From 7a25bf3a6da061cf94b7c9800fa345dba71006ef Mon Sep 17 00:00:00 2001 From: Himadri Ganguly Date: Fri, 13 Aug 2021 16:55:23 +0530 Subject: [PATCH 01/33] doc: add himadriganguly as a triager I would like to apply for the role of a triager in this project. My motivation to become a triager is to help manage issues, as well as learn deeper concepts of Node.js, and eventually become a collaborator! I hereby declare that I have read and understood the Code of Conduct and will adhere to that. PR-URL: https://github.com/nodejs/node/pull/39757 Reviewed-By: Gireesh Punathil Reviewed-By: Luigi Pinca --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4408ef5126e709..c4079eade75783 100644 --- a/README.md +++ b/README.md @@ -613,6 +613,8 @@ maintaining the Node.js project. * [Ayase-252](https://github.com/Ayase-252) - **Qingyu Deng** <i@ayase-lab.com> +* [himadriganguly](https://github.com/himadriganguly) - +**Himadri Ganguly** <himadri.tech@gmail.com> (he/him) * [marsonya](https://github.com/marsonya) - **Akhil Marsonya** <akhil.marsonya27@gmail.com> (he/him) * [PoojaDurgad](https://github.com/PoojaDurgad) - From a387600d8fd6ca825dbea6a59913d6b78d5d1a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Sat, 6 Mar 2021 13:53:50 +0100 Subject: [PATCH 02/33] doc: add example of self-reference in scoped packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/37630 Fixes: https://github.com/nodejs/node/issues/37618 Refs: https://github.com/nodejs/node/issues/37618#issuecomment-791888177 Co-authored-by: Michaël Zasso Reviewed-By: Guy Bedford --- doc/api/packages.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/doc/api/packages.md b/doc/api/packages.md index bd5fbe150b544b..02884be862759c 100644 --- a/doc/api/packages.md +++ b/doc/api/packages.md @@ -709,6 +709,32 @@ and in a CommonJS one. For example, this code will also work: const { something } = require('a-package/foo'); // Loads from ./foo.js. ``` +Finally, self-referencing also works with scoped packages. For example, this +code will also work: + +```json +// package.json +{ + "name": "@my/package", + "exports": "./index.js" +} +``` + +```js +// ./index.js +module.exports = 42; +``` + +```js +// ./other.js +console.log(require('@my/package')); +``` + +```console +$ node other.js +42 +``` + ## Dual CommonJS/ES module packages Prior to the introduction of support for ES modules in Node.js, it was a common From c34e2534abae0ffb3db353ff54da5af7d773b71b Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 15 Aug 2021 05:57:16 -0700 Subject: [PATCH 03/33] tools: update markdown lint dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/39770 Reviewed-By: Tobias Nießen Reviewed-By: James M Snell Reviewed-By: Antoine du Hamel --- tools/lint-md.js | 48809 +++++++++------- .../node-lint-md-cli-rollup/package-lock.json | 11569 +--- tools/node-lint-md-cli-rollup/package.json | 9 +- 3 files changed, 31651 insertions(+), 28736 deletions(-) diff --git a/tools/lint-md.js b/tools/lint-md.js index 23c4c03954a283..44e2149d101ed7 100644 --- a/tools/lint-md.js +++ b/tools/lint-md.js @@ -3,33 +3,76 @@ // Don't change this file manually, // it is generated from tools/node-lint-md-cli-rollup -var require$$0$3 = require('stream'); -var path$2 = require('path'); -var Module = require('module'); -var util$2 = require('util'); -var os = require('os'); -var tty = require('tty'); -var fs$1 = require('fs'); -var events = require('events'); -var assert = require('assert'); +var require$$0$a = require('stream'); +var require$$0$7 = require('path'); +var require$$0$5 = require('util'); +var require$$0$6 = require('os'); +var require$$1 = require('tty'); +var require$$0$8 = require('fs'); +var require$$1$1 = require('module'); +var require$$0$9 = require('events'); +var require$$6$1 = require('assert'); var url = require('url'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } -var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$3); -var path__default = /*#__PURE__*/_interopDefaultLegacy(path$2); -var Module__default = /*#__PURE__*/_interopDefaultLegacy(Module); -var util__default = /*#__PURE__*/_interopDefaultLegacy(util$2); -var os__default = /*#__PURE__*/_interopDefaultLegacy(os); -var tty__default = /*#__PURE__*/_interopDefaultLegacy(tty); -var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$1); -var events__default = /*#__PURE__*/_interopDefaultLegacy(events); -var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { + return e[k]; + } + }); + } + }); + } + n['default'] = e; + return Object.freeze(n); +} + +var require$$0__default$5 = /*#__PURE__*/_interopDefaultLegacy(require$$0$a); +var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$7); +var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$5); +var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$6); +var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1); +var require$$0__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$0$8); +var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1); +var require$$0__default$4 = /*#__PURE__*/_interopDefaultLegacy(require$$0$9); +var require$$6__default = /*#__PURE__*/_interopDefaultLegacy(require$$6$1); + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +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 cliEntry = {}; -var vfileStatistics = statistics; +var vfileStatistics = statistics$2; // Get stats for a file, list of files, or list of messages. -function statistics(files) { +function statistics$2(files) { var result = {true: 0, false: 0, null: 0}; count(files); @@ -75,20 +118,20 @@ function statistics(files) { } } -var slice = [].slice; +var slice$6 = [].slice; -var wrap_1 = wrap; +var wrap_1$1 = wrap$5; // Wrap `fn`. // Can be sync or async; return a promise, receive a completion handler, return // new values and errors. -function wrap(fn, callback) { +function wrap$5(fn, callback) { var invoked; return wrapped function wrapped() { - var params = slice.call(arguments, 0); + var params = slice$6.call(arguments, 0); var callback = fn.length > params.length; var result; @@ -138,14 +181,16 @@ function wrap(fn, callback) { } } -var trough_1 = trough; +var wrap$4 = wrap_1$1; -trough.wrap = wrap_1; +var trough_1$1 = trough$5; -var slice$1 = [].slice; +trough$5.wrap = wrap$4; + +var slice$5 = [].slice; // Create new middleware. -function trough() { +function trough$5() { var fns = []; var middleware = {}; @@ -157,7 +202,7 @@ function trough() { // Run `fns`. Last argument must be a completion handler. function run() { var index = -1; - var input = slice$1.call(arguments, 0, -1); + var input = slice$5.call(arguments, 0, -1); var done = arguments[arguments.length - 1]; if (typeof done !== 'function') { @@ -169,7 +214,7 @@ function trough() { // Run the next `fn`, if any. function next(err) { var fn = fns[++index]; - var params = slice$1.call(arguments, 0); + var params = slice$5.call(arguments, 0); var values = params.slice(1); var length = input.length; var pos = -1; @@ -190,7 +235,7 @@ function trough() { // Next or done. if (fn) { - wrap_1(fn, next).apply(null, input); + wrap$4(fn, next).apply(null, input); } else { done.apply(null, [null].concat(input)); } @@ -209,51 +254,31 @@ function trough() { } } -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; +var jsYaml$2 = {}; -function getAugmentedNamespace(n) { - if (n.__esModule) return n; - var a = Object.defineProperty({}, '__esModule', {value: true}); - Object.keys(n).forEach(function (k) { - var d = Object.getOwnPropertyDescriptor(n, k); - Object.defineProperty(a, k, d.get ? d : { - enumerable: true, - get: function () { - return n[k]; - } - }); - }); - return a; -} +var loader$2 = {}; -function createCommonjsModule(fn) { - var module = { exports: {} }; - return fn(module, module.exports), module.exports; -} - -function commonjsRequire (target) { - throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.'); -} +var common$b = {}; -function isNothing(subject) { +function isNothing$1(subject) { return (typeof subject === 'undefined') || (subject === null); } -function isObject(subject) { +function isObject$4(subject) { return (typeof subject === 'object') && (subject !== null); } -function toArray(sequence) { +function toArray$1(sequence) { if (Array.isArray(sequence)) return sequence; - else if (isNothing(sequence)) return []; + else if (isNothing$1(sequence)) return []; return [ sequence ]; } -function extend(target, source) { +function extend$4(target, source) { var index, length, key, sourceKeys; if (source) { @@ -269,7 +294,7 @@ function extend(target, source) { } -function repeat(string, count) { +function repeat$8(string, count) { var result = '', cycle; for (cycle = 0; cycle < count; cycle += 1) { @@ -280,30 +305,19 @@ function repeat(string, count) { } -function isNegativeZero(number) { +function isNegativeZero$1(number) { return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); } -var isNothing_1 = isNothing; -var isObject_1 = isObject; -var toArray_1 = toArray; -var repeat_1 = repeat; -var isNegativeZero_1 = isNegativeZero; -var extend_1 = extend; +common$b.isNothing = isNothing$1; +common$b.isObject = isObject$4; +common$b.toArray = toArray$1; +common$b.repeat = repeat$8; +common$b.isNegativeZero = isNegativeZero$1; +common$b.extend = extend$4; -var common = { - isNothing: isNothing_1, - isObject: isObject_1, - toArray: toArray_1, - repeat: repeat_1, - isNegativeZero: isNegativeZero_1, - extend: extend_1 -}; - -// YAML error class. http://stackoverflow.com/questions/8458984 - -function YAMLException(reason, mark) { +function YAMLException$6(reason, mark) { // Super constructor Error.call(this); @@ -324,11 +338,11 @@ function YAMLException(reason, mark) { // Inherit from Error -YAMLException.prototype = Object.create(Error.prototype); -YAMLException.prototype.constructor = YAMLException; +YAMLException$6.prototype = Object.create(Error.prototype); +YAMLException$6.prototype.constructor = YAMLException$6; -YAMLException.prototype.toString = function toString(compact) { +YAMLException$6.prototype.toString = function toString(compact) { var result = this.name + ': '; result += this.reason || '(unknown reason)'; @@ -341,9 +355,12 @@ YAMLException.prototype.toString = function toString(compact) { }; -var exception = YAMLException; +var exception$1 = YAMLException$6; + +var common$a = common$b; -function Mark(name, buffer, position, line, column) { + +function Mark$1(name, buffer, position, line, column) { this.name = name; this.buffer = buffer; this.position = position; @@ -352,7 +369,7 @@ function Mark(name, buffer, position, line, column) { } -Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { +Mark$1.prototype.getSnippet = function getSnippet(indent, maxLength) { var head, start, tail, end, snippet; if (!this.buffer) return null; @@ -386,12 +403,12 @@ Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { snippet = this.buffer.slice(start, end); - return common.repeat(' ', indent) + head + snippet + tail + '\n' + - common.repeat(' ', indent + this.position - start + head.length) + '^'; + return common$a.repeat(' ', indent) + head + snippet + tail + '\n' + + common$a.repeat(' ', indent + this.position - start + head.length) + '^'; }; -Mark.prototype.toString = function toString(compact) { +Mark$1.prototype.toString = function toString(compact) { var snippet, where = ''; if (this.name) { @@ -412,9 +429,11 @@ Mark.prototype.toString = function toString(compact) { }; -var mark = Mark; +var mark$1 = Mark$1; -var TYPE_CONSTRUCTOR_OPTIONS = [ +var YAMLException$5 = exception$1; + +var TYPE_CONSTRUCTOR_OPTIONS$1 = [ 'kind', 'resolve', 'construct', @@ -425,13 +444,13 @@ var TYPE_CONSTRUCTOR_OPTIONS = [ 'styleAliases' ]; -var YAML_NODE_KINDS = [ +var YAML_NODE_KINDS$1 = [ 'scalar', 'sequence', 'mapping' ]; -function compileStyleAliases(map) { +function compileStyleAliases$1(map) { var result = {}; if (map !== null) { @@ -445,12 +464,12 @@ function compileStyleAliases(map) { return result; } -function Type(tag, options) { +function Type$j(tag, options) { options = options || {}; Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + if (TYPE_CONSTRUCTOR_OPTIONS$1.indexOf(name) === -1) { + throw new YAMLException$5('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); } }); @@ -463,27 +482,27 @@ function Type(tag, options) { this.predicate = options['predicate'] || null; this.represent = options['represent'] || null; this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + this.styleAliases = compileStyleAliases$1(options['styleAliases'] || null); - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + if (YAML_NODE_KINDS$1.indexOf(this.kind) === -1) { + throw new YAMLException$5('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); } } -var type = Type; +var type$1 = Type$j; /*eslint-disable max-len*/ +var common$9 = common$b; +var YAMLException$4 = exception$1; +var Type$i = type$1; - - - -function compileList(schema, name, result) { +function compileList$1(schema, name, result) { var exclude = []; schema.include.forEach(function (includedSchema) { - result = compileList(includedSchema, name, result); + result = compileList$1(includedSchema, name, result); }); schema[name].forEach(function (currentType) { @@ -502,7 +521,7 @@ function compileList(schema, name, result) { } -function compileMap(/* lists... */) { +function compileMap$1(/* lists... */) { var result = { scalar: {}, sequence: {}, @@ -521,32 +540,32 @@ function compileMap(/* lists... */) { } -function Schema(definition) { +function Schema$7(definition) { this.include = definition.include || []; this.implicit = definition.implicit || []; this.explicit = definition.explicit || []; this.implicit.forEach(function (type) { if (type.loadKind && type.loadKind !== 'scalar') { - throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + throw new YAMLException$4('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); } }); - this.compiledImplicit = compileList(this, 'implicit', []); - this.compiledExplicit = compileList(this, 'explicit', []); - this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); + this.compiledImplicit = compileList$1(this, 'implicit', []); + this.compiledExplicit = compileList$1(this, 'explicit', []); + this.compiledTypeMap = compileMap$1(this.compiledImplicit, this.compiledExplicit); } -Schema.DEFAULT = null; +Schema$7.DEFAULT = null; -Schema.create = function createSchema() { +Schema$7.create = function createSchema() { var schemas, types; switch (arguments.length) { case 1: - schemas = Schema.DEFAULT; + schemas = Schema$7.DEFAULT; types = arguments[0]; break; @@ -556,53 +575,64 @@ Schema.create = function createSchema() { break; default: - throw new exception('Wrong number of arguments for Schema.create function'); + throw new YAMLException$4('Wrong number of arguments for Schema.create function'); } - schemas = common.toArray(schemas); - types = common.toArray(types); + schemas = common$9.toArray(schemas); + types = common$9.toArray(types); - if (!schemas.every(function (schema) { return schema instanceof Schema; })) { - throw new exception('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + if (!schemas.every(function (schema) { return schema instanceof Schema$7; })) { + throw new YAMLException$4('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); } - if (!types.every(function (type$1) { return type$1 instanceof type; })) { - throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + if (!types.every(function (type) { return type instanceof Type$i; })) { + throw new YAMLException$4('Specified list of YAML types (or a single Type object) contains a non-Type object.'); } - return new Schema({ + return new Schema$7({ include: schemas, explicit: types }); }; -var schema = Schema; +var schema$2 = Schema$7; -var str = new type('tag:yaml.org,2002:str', { +var Type$h = type$1; + +var str$1 = new Type$h('tag:yaml.org,2002:str', { kind: 'scalar', construct: function (data) { return data !== null ? data : ''; } }); -var seq = new type('tag:yaml.org,2002:seq', { +var Type$g = type$1; + +var seq$1 = new Type$g('tag:yaml.org,2002:seq', { kind: 'sequence', construct: function (data) { return data !== null ? data : []; } }); -var map = new type('tag:yaml.org,2002:map', { +var Type$f = type$1; + +var map$7 = new Type$f('tag:yaml.org,2002:map', { kind: 'mapping', construct: function (data) { return data !== null ? data : {}; } }); -var failsafe = new schema({ +var Schema$6 = schema$2; + + +var failsafe$1 = new Schema$6({ explicit: [ - str, - seq, - map + str$1, + seq$1, + map$7 ] }); -function resolveYamlNull(data) { +var Type$e = type$1; + +function resolveYamlNull$1(data) { if (data === null) return true; var max = data.length; @@ -611,19 +641,19 @@ function resolveYamlNull(data) { (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); } -function constructYamlNull() { +function constructYamlNull$1() { return null; } -function isNull(object) { +function isNull$1(object) { return object === null; } -var _null = new type('tag:yaml.org,2002:null', { +var _null$1 = new Type$e('tag:yaml.org,2002:null', { kind: 'scalar', - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, + resolve: resolveYamlNull$1, + construct: constructYamlNull$1, + predicate: isNull$1, represent: { canonical: function () { return '~'; }, lowercase: function () { return 'null'; }, @@ -633,7 +663,9 @@ var _null = new type('tag:yaml.org,2002:null', { defaultStyle: 'lowercase' }); -function resolveYamlBoolean(data) { +var Type$d = type$1; + +function resolveYamlBoolean$1(data) { if (data === null) return false; var max = data.length; @@ -642,21 +674,21 @@ function resolveYamlBoolean(data) { (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); } -function constructYamlBoolean(data) { +function constructYamlBoolean$1(data) { return data === 'true' || data === 'True' || data === 'TRUE'; } -function isBoolean(object) { +function isBoolean$1(object) { return Object.prototype.toString.call(object) === '[object Boolean]'; } -var bool = new type('tag:yaml.org,2002:bool', { +var bool$1 = new Type$d('tag:yaml.org,2002:bool', { kind: 'scalar', - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, + resolve: resolveYamlBoolean$1, + construct: constructYamlBoolean$1, + predicate: isBoolean$1, represent: { lowercase: function (object) { return object ? 'true' : 'false'; }, uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, @@ -665,21 +697,24 @@ var bool = new type('tag:yaml.org,2002:bool', { defaultStyle: 'lowercase' }); -function isHexCode(c) { +var common$8 = common$b; +var Type$c = type$1; + +function isHexCode$1(c) { return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || ((0x61/* a */ <= c) && (c <= 0x66/* f */)); } -function isOctCode(c) { +function isOctCode$1(c) { return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); } -function isDecCode(c) { +function isDecCode$1(c) { return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); } -function resolveYamlInteger(data) { +function resolveYamlInteger$1(data) { if (data === null) return false; var max = data.length, @@ -724,7 +759,7 @@ function resolveYamlInteger(data) { for (; index < max; index++) { ch = data[index]; if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; + if (!isHexCode$1(data.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== '_'; @@ -734,7 +769,7 @@ function resolveYamlInteger(data) { for (; index < max; index++) { ch = data[index]; if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; + if (!isOctCode$1(data.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== '_'; @@ -749,7 +784,7 @@ function resolveYamlInteger(data) { ch = data[index]; if (ch === '_') continue; if (ch === ':') break; - if (!isDecCode(data.charCodeAt(index))) { + if (!isDecCode$1(data.charCodeAt(index))) { return false; } hasDigits = true; @@ -765,7 +800,7 @@ function resolveYamlInteger(data) { return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); } -function constructYamlInteger(data) { +function constructYamlInteger$1(data) { var value = data, sign = 1, ch, base, digits = []; if (value.indexOf('_') !== -1) { @@ -808,16 +843,16 @@ function constructYamlInteger(data) { return sign * parseInt(value, 10); } -function isInteger(object) { +function isInteger$1(object) { return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); + (object % 1 === 0 && !common$8.isNegativeZero(object)); } -var int = new type('tag:yaml.org,2002:int', { +var int$4 = new Type$c('tag:yaml.org,2002:int', { kind: 'scalar', - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, + resolve: resolveYamlInteger$1, + construct: constructYamlInteger$1, + predicate: isInteger$1, represent: { binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, @@ -834,7 +869,10 @@ var int = new type('tag:yaml.org,2002:int', { } }); -var YAML_FLOAT_PATTERN = new RegExp( +var common$7 = common$b; +var Type$b = type$1; + +var YAML_FLOAT_PATTERN$1 = new RegExp( // 2.5e4, 2.5 and integers '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + // .2e4, .2 @@ -847,10 +885,10 @@ var YAML_FLOAT_PATTERN = new RegExp( // .nan '|\\.(?:nan|NaN|NAN))$'); -function resolveYamlFloat(data) { +function resolveYamlFloat$1(data) { if (data === null) return false; - if (!YAML_FLOAT_PATTERN.test(data) || + if (!YAML_FLOAT_PATTERN$1.test(data) || // Quick hack to not allow integers end with `_` // Probably should update regexp & check speed data[data.length - 1] === '_') { @@ -860,7 +898,7 @@ function resolveYamlFloat(data) { return true; } -function constructYamlFloat(data) { +function constructYamlFloat$1(data) { var value, sign, base, digits; value = data.replace(/_/g, '').toLowerCase(); @@ -897,9 +935,9 @@ function constructYamlFloat(data) { } -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; +var SCIENTIFIC_WITHOUT_DOT$1 = /^[-+]?[0-9]+e/; -function representYamlFloat(object, style) { +function representYamlFloat$1(object, style) { var res; if (isNaN(object)) { @@ -920,7 +958,7 @@ function representYamlFloat(object, style) { case 'uppercase': return '-.INF'; case 'camelcase': return '-.Inf'; } - } else if (common.isNegativeZero(object)) { + } else if (common$7.isNegativeZero(object)) { return '-0.0'; } @@ -929,47 +967,55 @@ function representYamlFloat(object, style) { // JS stringifier can build scientific format without dots: 5e-100, // while YAML requres dot: 5.e-100. Fix it with simple hack - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; + return SCIENTIFIC_WITHOUT_DOT$1.test(res) ? res.replace('e', '.e') : res; } -function isFloat(object) { +function isFloat$1(object) { return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); + (object % 1 !== 0 || common$7.isNegativeZero(object)); } -var float = new type('tag:yaml.org,2002:float', { +var float$1 = new Type$b('tag:yaml.org,2002:float', { kind: 'scalar', - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, + resolve: resolveYamlFloat$1, + construct: constructYamlFloat$1, + predicate: isFloat$1, + represent: representYamlFloat$1, defaultStyle: 'lowercase' }); -var json = new schema({ +var Schema$5 = schema$2; + + +var json$3 = new Schema$5({ include: [ - failsafe + failsafe$1 ], implicit: [ - _null, - bool, - int, - float + _null$1, + bool$1, + int$4, + float$1 ] }); -var core = new schema({ +var Schema$4 = schema$2; + + +var core$4 = new Schema$4({ include: [ - json + json$3 ] }); -var YAML_DATE_REGEXP = new RegExp( +var Type$a = type$1; + +var YAML_DATE_REGEXP$1 = new RegExp( '^([0-9][0-9][0-9][0-9])' + // [1] year '-([0-9][0-9])' + // [2] month '-([0-9][0-9])$'); // [3] day -var YAML_TIMESTAMP_REGEXP = new RegExp( +var YAML_TIMESTAMP_REGEXP$1 = new RegExp( '^([0-9][0-9][0-9][0-9])' + // [1] year '-([0-9][0-9]?)' + // [2] month '-([0-9][0-9]?)' + // [3] day @@ -981,19 +1027,19 @@ var YAML_TIMESTAMP_REGEXP = new RegExp( '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour '(?::([0-9][0-9]))?))?$'); // [11] tz_minute -function resolveYamlTimestamp(data) { +function resolveYamlTimestamp$1(data) { if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + if (YAML_DATE_REGEXP$1.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP$1.exec(data) !== null) return true; return false; } -function constructYamlTimestamp(data) { +function constructYamlTimestamp$1(data) { var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date; - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + match = YAML_DATE_REGEXP$1.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP$1.exec(data); if (match === null) throw new Error('Date resolve error'); @@ -1037,25 +1083,27 @@ function constructYamlTimestamp(data) { return date; } -function representYamlTimestamp(object /*, style*/) { +function representYamlTimestamp$1(object /*, style*/) { return object.toISOString(); } -var timestamp = new type('tag:yaml.org,2002:timestamp', { +var timestamp$1 = new Type$a('tag:yaml.org,2002:timestamp', { kind: 'scalar', - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, + resolve: resolveYamlTimestamp$1, + construct: constructYamlTimestamp$1, instanceOf: Date, - represent: representYamlTimestamp + represent: representYamlTimestamp$1 }); -function resolveYamlMerge(data) { +var Type$9 = type$1; + +function resolveYamlMerge$1(data) { return data === '<<' || data === null; } -var merge = new type('tag:yaml.org,2002:merge', { +var merge$2 = new Type$9('tag:yaml.org,2002:merge', { kind: 'scalar', - resolve: resolveYamlMerge + resolve: resolveYamlMerge$1 }); /*eslint-disable no-bitwise*/ @@ -1064,21 +1112,21 @@ var NodeBuffer; try { // A trick for browserified version, to not include `Buffer` shim - var _require = commonjsRequire; - NodeBuffer = _require('buffer').Buffer; + var _require$1 = commonjsRequire; + NodeBuffer = _require$1('buffer').Buffer; } catch (__) {} - +var Type$8 = type$1; // [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; +var BASE64_MAP$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; -function resolveYamlBinary(data) { +function resolveYamlBinary$1(data) { if (data === null) return false; - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP$1; // Convert one by one. for (idx = 0; idx < max; idx++) { @@ -1097,11 +1145,11 @@ function resolveYamlBinary(data) { return (bitlen % 8) === 0; } -function constructYamlBinary(data) { +function constructYamlBinary$1(data) { var idx, tailbits, input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan max = input.length, - map = BASE64_MAP, + map = BASE64_MAP$1, bits = 0, result = []; @@ -1141,10 +1189,10 @@ function constructYamlBinary(data) { return result; } -function representYamlBinary(object /*, style*/) { +function representYamlBinary$1(object /*, style*/) { var result = '', bits = 0, idx, tail, max = object.length, - map = BASE64_MAP; + map = BASE64_MAP$1; // Convert every three bytes to 4 ASCII characters. @@ -1183,22 +1231,24 @@ function representYamlBinary(object /*, style*/) { return result; } -function isBinary(object) { +function isBinary$1(object) { return NodeBuffer && NodeBuffer.isBuffer(object); } -var binary = new type('tag:yaml.org,2002:binary', { +var binary$1 = new Type$8('tag:yaml.org,2002:binary', { kind: 'scalar', - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary + resolve: resolveYamlBinary$1, + construct: constructYamlBinary$1, + predicate: isBinary$1, + represent: representYamlBinary$1 }); -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var _toString = Object.prototype.toString; +var Type$7 = type$1; -function resolveYamlOmap(data) { +var _hasOwnProperty$7 = Object.prototype.hasOwnProperty; +var _toString$5 = Object.prototype.toString; + +function resolveYamlOmap$1(data) { if (data === null) return true; var objectKeys = [], index, length, pair, pairKey, pairHasKey, @@ -1208,10 +1258,10 @@ function resolveYamlOmap(data) { pair = object[index]; pairHasKey = false; - if (_toString.call(pair) !== '[object Object]') return false; + if (_toString$5.call(pair) !== '[object Object]') return false; for (pairKey in pair) { - if (_hasOwnProperty.call(pair, pairKey)) { + if (_hasOwnProperty$7.call(pair, pairKey)) { if (!pairHasKey) pairHasKey = true; else return false; } @@ -1226,19 +1276,21 @@ function resolveYamlOmap(data) { return true; } -function constructYamlOmap(data) { +function constructYamlOmap$1(data) { return data !== null ? data : []; } -var omap = new type('tag:yaml.org,2002:omap', { +var omap$1 = new Type$7('tag:yaml.org,2002:omap', { kind: 'sequence', - resolve: resolveYamlOmap, - construct: constructYamlOmap + resolve: resolveYamlOmap$1, + construct: constructYamlOmap$1 }); -var _toString$1 = Object.prototype.toString; +var Type$6 = type$1; -function resolveYamlPairs(data) { +var _toString$4 = Object.prototype.toString; + +function resolveYamlPairs$1(data) { if (data === null) return true; var index, length, pair, keys, result, @@ -1249,7 +1301,7 @@ function resolveYamlPairs(data) { for (index = 0, length = object.length; index < length; index += 1) { pair = object[index]; - if (_toString$1.call(pair) !== '[object Object]') return false; + if (_toString$4.call(pair) !== '[object Object]') return false; keys = Object.keys(pair); @@ -1261,7 +1313,7 @@ function resolveYamlPairs(data) { return true; } -function constructYamlPairs(data) { +function constructYamlPairs$1(data) { if (data === null) return []; var index, length, pair, keys, result, @@ -1280,21 +1332,23 @@ function constructYamlPairs(data) { return result; } -var pairs = new type('tag:yaml.org,2002:pairs', { +var pairs$1 = new Type$6('tag:yaml.org,2002:pairs', { kind: 'sequence', - resolve: resolveYamlPairs, - construct: constructYamlPairs + resolve: resolveYamlPairs$1, + construct: constructYamlPairs$1 }); -var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; +var Type$5 = type$1; -function resolveYamlSet(data) { +var _hasOwnProperty$6 = Object.prototype.hasOwnProperty; + +function resolveYamlSet$1(data) { if (data === null) return true; var key, object = data; for (key in object) { - if (_hasOwnProperty$1.call(object, key)) { + if (_hasOwnProperty$6.call(object, key)) { if (object[key] !== null) return false; } } @@ -1302,32 +1356,37 @@ function resolveYamlSet(data) { return true; } -function constructYamlSet(data) { +function constructYamlSet$1(data) { return data !== null ? data : {}; } -var set = new type('tag:yaml.org,2002:set', { +var set$1 = new Type$5('tag:yaml.org,2002:set', { kind: 'mapping', - resolve: resolveYamlSet, - construct: constructYamlSet + resolve: resolveYamlSet$1, + construct: constructYamlSet$1 }); -var default_safe = new schema({ +var Schema$3 = schema$2; + + +var default_safe = new Schema$3({ include: [ - core + core$4 ], implicit: [ - timestamp, - merge + timestamp$1, + merge$2 ], explicit: [ - binary, - omap, - pairs, - set + binary$1, + omap$1, + pairs$1, + set$1 ] }); +var Type$4 = type$1; + function resolveJavascriptUndefined() { return true; } @@ -1345,7 +1404,7 @@ function isUndefined(object) { return typeof object === 'undefined'; } -var _undefined = new type('tag:yaml.org,2002:js/undefined', { +var _undefined = new Type$4('tag:yaml.org,2002:js/undefined', { kind: 'scalar', resolve: resolveJavascriptUndefined, construct: constructJavascriptUndefined, @@ -1353,6 +1412,8 @@ var _undefined = new type('tag:yaml.org,2002:js/undefined', { represent: representJavascriptUndefined }); +var Type$3 = type$1; + function resolveJavascriptRegExp(data) { if (data === null) return false; if (data.length === 0) return false; @@ -1402,7 +1463,7 @@ function isRegExp(object) { return Object.prototype.toString.call(object) === '[object RegExp]'; } -var regexp = new type('tag:yaml.org,2002:js/regexp', { +var regexp = new Type$3('tag:yaml.org,2002:js/regexp', { kind: 'scalar', resolve: resolveJavascriptRegExp, construct: constructJavascriptRegExp, @@ -1421,15 +1482,15 @@ var esprima; // try { // workaround to exclude package from browserify list. - var _require$1 = commonjsRequire; - esprima = _require$1('esprima'); + var _require = commonjsRequire; + esprima = _require('esprima'); } catch (_) { /* eslint-disable no-redeclare */ /* global window */ if (typeof window !== 'undefined') esprima = window.esprima; } - +var Type$2 = type$1; function resolveJavascriptFunction(data) { if (data === null) return false; @@ -1494,7 +1555,7 @@ function isFunction(object) { return Object.prototype.toString.call(object) === '[object Function]'; } -var _function = new type('tag:yaml.org,2002:js/function', { +var _function = new Type$2('tag:yaml.org,2002:js/function', { kind: 'scalar', resolve: resolveJavascriptFunction, construct: constructJavascriptFunction, @@ -1502,7 +1563,10 @@ var _function = new type('tag:yaml.org,2002:js/function', { represent: representJavascriptFunction }); -var default_full = schema.DEFAULT = new schema({ +var Schema$2 = schema$2; + + +var default_full = Schema$2.DEFAULT = new Schema$2({ include: [ default_safe ], @@ -1515,52 +1579,52 @@ var default_full = schema.DEFAULT = new schema({ /*eslint-disable max-len,no-use-before-define*/ +var common$6 = common$b; +var YAMLException$3 = exception$1; +var Mark = mark$1; +var DEFAULT_SAFE_SCHEMA$1 = default_safe; +var DEFAULT_FULL_SCHEMA$1 = default_full; +var _hasOwnProperty$5 = Object.prototype.hasOwnProperty; +var CONTEXT_FLOW_IN$1 = 1; +var CONTEXT_FLOW_OUT$1 = 2; +var CONTEXT_BLOCK_IN$1 = 3; +var CONTEXT_BLOCK_OUT$1 = 4; - -var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; - - -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; +var CHOMPING_CLIP$1 = 1; +var CHOMPING_STRIP$1 = 2; +var CHOMPING_KEEP$1 = 3; -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; +var PATTERN_NON_PRINTABLE$1 = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS$1 = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS$1 = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE$1 = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI$1 = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; -function _class(obj) { return Object.prototype.toString.call(obj); } +function _class$1(obj) { return Object.prototype.toString.call(obj); } -function is_EOL(c) { +function is_EOL$1(c) { return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); } -function is_WHITE_SPACE(c) { +function is_WHITE_SPACE$1(c) { return (c === 0x09/* Tab */) || (c === 0x20/* Space */); } -function is_WS_OR_EOL(c) { +function is_WS_OR_EOL$1(c) { return (c === 0x09/* Tab */) || (c === 0x20/* Space */) || (c === 0x0A/* LF */) || (c === 0x0D/* CR */); } -function is_FLOW_INDICATOR(c) { +function is_FLOW_INDICATOR$1(c) { return c === 0x2C/* , */ || c === 0x5B/* [ */ || c === 0x5D/* ] */ || @@ -1568,7 +1632,7 @@ function is_FLOW_INDICATOR(c) { c === 0x7D/* } */; } -function fromHexCode(c) { +function fromHexCode$1(c) { var lc; if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { @@ -1585,14 +1649,14 @@ function fromHexCode(c) { return -1; } -function escapedHexLen(c) { +function escapedHexLen$1(c) { if (c === 0x78/* x */) { return 2; } if (c === 0x75/* u */) { return 4; } if (c === 0x55/* U */) { return 8; } return 0; } -function fromDecimalCode(c) { +function fromDecimalCode$1(c) { if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { return c - 0x30; } @@ -1600,7 +1664,7 @@ function fromDecimalCode(c) { return -1; } -function simpleEscapeSequence(c) { +function simpleEscapeSequence$1(c) { /* eslint-disable indent */ return (c === 0x30/* 0 */) ? '\x00' : (c === 0x61/* a */) ? '\x07' : @@ -1622,7 +1686,7 @@ function simpleEscapeSequence(c) { (c === 0x50/* P */) ? '\u2029' : ''; } -function charFromCodepoint(c) { +function charFromCodepoint$1(c) { if (c <= 0xFFFF) { return String.fromCharCode(c); } @@ -1634,19 +1698,19 @@ function charFromCodepoint(c) { ); } -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); +var simpleEscapeCheck$1 = new Array(256); // integer, for fast access +var simpleEscapeMap$1 = new Array(256); +for (var i$1 = 0; i$1 < 256; i$1++) { + simpleEscapeCheck$1[i$1] = simpleEscapeSequence$1(i$1) ? 1 : 0; + simpleEscapeMap$1[i$1] = simpleEscapeSequence$1(i$1); } -function State(input, options) { +function State$3(input, options) { this.input = input; this.filename = options['filename'] || null; - this.schema = options['schema'] || default_full; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA$1; this.onWarning = options['onWarning'] || null; this.legacy = options['legacy'] || false; this.json = options['json'] || false; @@ -1676,55 +1740,55 @@ function State(input, options) { } -function generateError(state, message) { - return new exception( +function generateError$1(state, message) { + return new YAMLException$3( message, - new mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); } -function throwError(state, message) { - throw generateError(state, message); +function throwError$2(state, message) { + throw generateError$1(state, message); } -function throwWarning(state, message) { +function throwWarning$1(state, message) { if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); + state.onWarning.call(null, generateError$1(state, message)); } } -var directiveHandlers = { +var directiveHandlers$1 = { YAML: function handleYamlDirective(state, name, args) { var match, major, minor; if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); + throwError$2(state, 'duplication of %YAML directive'); } if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); + throwError$2(state, 'YAML directive accepts exactly one argument'); } match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); + throwError$2(state, 'ill-formed argument of the YAML directive'); } major = parseInt(match[1], 10); minor = parseInt(match[2], 10); if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); + throwError$2(state, 'unacceptable YAML version of the document'); } state.version = args[0]; state.checkLineBreaks = (minor < 2); if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); + throwWarning$1(state, 'unsupported YAML version of the document'); } }, @@ -1733,22 +1797,22 @@ var directiveHandlers = { var handle, prefix; if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); + throwError$2(state, 'TAG directive accepts exactly two arguments'); } handle = args[0]; prefix = args[1]; - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + if (!PATTERN_TAG_HANDLE$1.test(handle)) { + throwError$2(state, 'ill-formed tag handle (first argument) of the TAG directive'); } - if (_hasOwnProperty$2.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + if (_hasOwnProperty$5.call(state.tagMap, handle)) { + throwError$2(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); } - if (!PATTERN_TAG_URI.test(prefix)) { - throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + if (!PATTERN_TAG_URI$1.test(prefix)) { + throwError$2(state, 'ill-formed tag prefix (second argument) of the TAG directive'); } state.tagMap[handle] = prefix; @@ -1756,7 +1820,7 @@ var directiveHandlers = { }; -function captureSegment(state, start, end, checkJson) { +function captureSegment$1(state, start, end, checkJson) { var _position, _length, _character, _result; if (start < end) { @@ -1767,22 +1831,22 @@ function captureSegment(state, start, end, checkJson) { _character = _result.charCodeAt(_position); if (!(_character === 0x09 || (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); + throwError$2(state, 'expected valid JSON character'); } } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); + } else if (PATTERN_NON_PRINTABLE$1.test(_result)) { + throwError$2(state, 'the stream contains non-printable characters'); } state.result += _result; } } -function mergeMappings(state, destination, source, overridableKeys) { +function mergeMappings$1(state, destination, source, overridableKeys) { var sourceKeys, key, index, quantity; - if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + if (!common$6.isObject(source)) { + throwError$2(state, 'cannot merge mappings; the provided source object is unacceptable'); } sourceKeys = Object.keys(source); @@ -1790,14 +1854,14 @@ function mergeMappings(state, destination, source, overridableKeys) { for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { key = sourceKeys[index]; - if (!_hasOwnProperty$2.call(destination, key)) { + if (!_hasOwnProperty$5.call(destination, key)) { destination[key] = source[key]; overridableKeys[key] = true; } } } -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { +function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { var index, quantity; // The output is a plain object here, so keys can only be strings. @@ -1808,10 +1872,10 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { if (Array.isArray(keyNode[index])) { - throwError(state, 'nested arrays are not supported inside keys'); + throwError$2(state, 'nested arrays are not supported inside keys'); } - if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + if (typeof keyNode === 'object' && _class$1(keyNode[index]) === '[object Object]') { keyNode[index] = '[object Object]'; } } @@ -1820,7 +1884,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu // Avoid code execution in load() via toString property // (still use its own toString for arrays, timestamps, // and whatever user schema extensions happen to have @@toStringTag) - if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + if (typeof keyNode === 'object' && _class$1(keyNode) === '[object Object]') { keyNode = '[object Object]'; } @@ -1834,18 +1898,18 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu if (keyTag === 'tag:yaml.org,2002:merge') { if (Array.isArray(valueNode)) { for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings(state, _result, valueNode[index], overridableKeys); + mergeMappings$1(state, _result, valueNode[index], overridableKeys); } } else { - mergeMappings(state, _result, valueNode, overridableKeys); + mergeMappings$1(state, _result, valueNode, overridableKeys); } } else { if (!state.json && - !_hasOwnProperty$2.call(overridableKeys, keyNode) && - _hasOwnProperty$2.call(_result, keyNode)) { + !_hasOwnProperty$5.call(overridableKeys, keyNode) && + _hasOwnProperty$5.call(_result, keyNode)) { state.line = startLine || state.line; state.position = startPos || state.position; - throwError(state, 'duplicated mapping key'); + throwError$2(state, 'duplicated mapping key'); } _result[keyNode] = valueNode; delete overridableKeys[keyNode]; @@ -1854,7 +1918,7 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu return _result; } -function readLineBreak(state) { +function readLineBreak$1(state) { var ch; ch = state.input.charCodeAt(state.position); @@ -1867,19 +1931,19 @@ function readLineBreak(state) { state.position++; } } else { - throwError(state, 'a line break is expected'); + throwError$2(state, 'a line break is expected'); } state.line += 1; state.lineStart = state.position; } -function skipSeparationSpace(state, allowComments, checkIndent) { +function skipSeparationSpace$1(state, allowComments, checkIndent) { var lineBreaks = 0, ch = state.input.charCodeAt(state.position); while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { + while (is_WHITE_SPACE$1(ch)) { ch = state.input.charCodeAt(++state.position); } @@ -1889,8 +1953,8 @@ function skipSeparationSpace(state, allowComments, checkIndent) { } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); } - if (is_EOL(ch)) { - readLineBreak(state); + if (is_EOL$1(ch)) { + readLineBreak$1(state); ch = state.input.charCodeAt(state.position); lineBreaks++; @@ -1906,13 +1970,13 @@ function skipSeparationSpace(state, allowComments, checkIndent) { } if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); + throwWarning$1(state, 'deficient indentation'); } return lineBreaks; } -function testDocumentSeparator(state) { +function testDocumentSeparator$1(state) { var _position = state.position, ch; @@ -1928,7 +1992,7 @@ function testDocumentSeparator(state) { ch = state.input.charCodeAt(_position); - if (ch === 0 || is_WS_OR_EOL(ch)) { + if (ch === 0 || is_WS_OR_EOL$1(ch)) { return true; } } @@ -1936,16 +2000,16 @@ function testDocumentSeparator(state) { return false; } -function writeFoldedLines(state, count) { +function writeFoldedLines$1(state, count) { if (count === 1) { state.result += ' '; } else if (count > 1) { - state.result += common.repeat('\n', count - 1); + state.result += common$6.repeat('\n', count - 1); } } -function readPlainScalar(state, nodeIndent, withinFlowCollection) { +function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { var preceding, following, captureStart, @@ -1960,8 +2024,8 @@ function readPlainScalar(state, nodeIndent, withinFlowCollection) { ch = state.input.charCodeAt(state.position); - if (is_WS_OR_EOL(ch) || - is_FLOW_INDICATOR(ch) || + if (is_WS_OR_EOL$1(ch) || + is_FLOW_INDICATOR$1(ch) || ch === 0x23/* # */ || ch === 0x26/* & */ || ch === 0x2A/* * */ || @@ -1979,8 +2043,8 @@ function readPlainScalar(state, nodeIndent, withinFlowCollection) { if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { + if (is_WS_OR_EOL$1(following) || + withinFlowCollection && is_FLOW_INDICATOR$1(following)) { return false; } } @@ -1994,27 +2058,27 @@ function readPlainScalar(state, nodeIndent, withinFlowCollection) { if (ch === 0x3A/* : */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { + if (is_WS_OR_EOL$1(following) || + withinFlowCollection && is_FLOW_INDICATOR$1(following)) { break; } } else if (ch === 0x23/* # */) { preceding = state.input.charCodeAt(state.position - 1); - if (is_WS_OR_EOL(preceding)) { + if (is_WS_OR_EOL$1(preceding)) { break; } - } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || - withinFlowCollection && is_FLOW_INDICATOR(ch)) { + } else if ((state.position === state.lineStart && testDocumentSeparator$1(state)) || + withinFlowCollection && is_FLOW_INDICATOR$1(ch)) { break; - } else if (is_EOL(ch)) { + } else if (is_EOL$1(ch)) { _line = state.line; _lineStart = state.lineStart; _lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); + skipSeparationSpace$1(state, false, -1); if (state.lineIndent >= nodeIndent) { hasPendingContent = true; @@ -2030,20 +2094,20 @@ function readPlainScalar(state, nodeIndent, withinFlowCollection) { } if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - _line); + captureSegment$1(state, captureStart, captureEnd, false); + writeFoldedLines$1(state, state.line - _line); captureStart = captureEnd = state.position; hasPendingContent = false; } - if (!is_WHITE_SPACE(ch)) { + if (!is_WHITE_SPACE$1(ch)) { captureEnd = state.position + 1; } ch = state.input.charCodeAt(++state.position); } - captureSegment(state, captureStart, captureEnd, false); + captureSegment$1(state, captureStart, captureEnd, false); if (state.result) { return true; @@ -2054,7 +2118,7 @@ function readPlainScalar(state, nodeIndent, withinFlowCollection) { return false; } -function readSingleQuotedScalar(state, nodeIndent) { +function readSingleQuotedScalar$1(state, nodeIndent) { var ch, captureStart, captureEnd; @@ -2071,7 +2135,7 @@ function readSingleQuotedScalar(state, nodeIndent) { while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); + captureSegment$1(state, captureStart, state.position, true); ch = state.input.charCodeAt(++state.position); if (ch === 0x27/* ' */) { @@ -2082,13 +2146,13 @@ function readSingleQuotedScalar(state, nodeIndent) { return true; } - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + } else if (is_EOL$1(ch)) { + captureSegment$1(state, captureStart, captureEnd, true); + writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a single quoted scalar'); + } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { + throwError$2(state, 'unexpected end of the document within a single quoted scalar'); } else { state.position++; @@ -2096,10 +2160,10 @@ function readSingleQuotedScalar(state, nodeIndent) { } } - throwError(state, 'unexpected end of the stream within a single quoted scalar'); + throwError$2(state, 'unexpected end of the stream within a single quoted scalar'); } -function readDoubleQuotedScalar(state, nodeIndent) { +function readDoubleQuotedScalar$1(state, nodeIndent) { var captureStart, captureEnd, hexLength, @@ -2120,54 +2184,54 @@ function readDoubleQuotedScalar(state, nodeIndent) { while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); + captureSegment$1(state, captureStart, state.position, true); state.position++; return true; } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); + captureSegment$1(state, captureStart, state.position, true); ch = state.input.charCodeAt(++state.position); - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); + if (is_EOL$1(ch)) { + skipSeparationSpace$1(state, false, nodeIndent); // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; + } else if (ch < 256 && simpleEscapeCheck$1[ch]) { + state.result += simpleEscapeMap$1[ch]; state.position++; - } else if ((tmp = escapedHexLen(ch)) > 0) { + } else if ((tmp = escapedHexLen$1(ch)) > 0) { hexLength = tmp; hexResult = 0; for (; hexLength > 0; hexLength--) { ch = state.input.charCodeAt(++state.position); - if ((tmp = fromHexCode(ch)) >= 0) { + if ((tmp = fromHexCode$1(ch)) >= 0) { hexResult = (hexResult << 4) + tmp; } else { - throwError(state, 'expected hexadecimal character'); + throwError$2(state, 'expected hexadecimal character'); } } - state.result += charFromCodepoint(hexResult); + state.result += charFromCodepoint$1(hexResult); state.position++; } else { - throwError(state, 'unknown escape sequence'); + throwError$2(state, 'unknown escape sequence'); } captureStart = captureEnd = state.position; - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + } else if (is_EOL$1(ch)) { + captureSegment$1(state, captureStart, captureEnd, true); + writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a double quoted scalar'); + } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { + throwError$2(state, 'unexpected end of the document within a double quoted scalar'); } else { state.position++; @@ -2175,10 +2239,10 @@ function readDoubleQuotedScalar(state, nodeIndent) { } } - throwError(state, 'unexpected end of the stream within a double quoted scalar'); + throwError$2(state, 'unexpected end of the stream within a double quoted scalar'); } -function readFlowCollection(state, nodeIndent) { +function readFlowCollection$1(state, nodeIndent) { var readNext = true, _line, _tag = state.tag, @@ -2216,7 +2280,7 @@ function readFlowCollection(state, nodeIndent) { ch = state.input.charCodeAt(++state.position); while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace$1(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); @@ -2228,7 +2292,7 @@ function readFlowCollection(state, nodeIndent) { state.result = _result; return true; } else if (!readNext) { - throwError(state, 'missed comma between flow collection entries'); + throwError$2(state, 'missed comma between flow collection entries'); } keyTag = keyNode = valueNode = null; @@ -2237,38 +2301,38 @@ function readFlowCollection(state, nodeIndent) { if (ch === 0x3F/* ? */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL(following)) { + if (is_WS_OR_EOL$1(following)) { isPair = isExplicitPair = true; state.position++; - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace$1(state, true, nodeIndent); } } _line = state.line; - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); keyTag = state.tag; keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace$1(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { isPair = true; ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + skipSeparationSpace$1(state, true, nodeIndent); + composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); valueNode = state.result; } if (isMapping) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); + storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode); } else if (isPair) { - _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); + _result.push(storeMappingPair$1(state, null, overridableKeys, keyTag, keyNode, valueNode)); } else { _result.push(keyNode); } - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace$1(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); @@ -2280,13 +2344,13 @@ function readFlowCollection(state, nodeIndent) { } } - throwError(state, 'unexpected end of the stream within a flow collection'); + throwError$2(state, 'unexpected end of the stream within a flow collection'); } -function readBlockScalar(state, nodeIndent) { +function readBlockScalar$1(state, nodeIndent) { var captureStart, folding, - chomping = CHOMPING_CLIP, + chomping = CHOMPING_CLIP$1, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, @@ -2312,20 +2376,20 @@ function readBlockScalar(state, nodeIndent) { ch = state.input.charCodeAt(++state.position); if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + if (CHOMPING_CLIP$1 === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP$1 : CHOMPING_STRIP$1; } else { - throwError(state, 'repeat of a chomping mode identifier'); + throwError$2(state, 'repeat of a chomping mode identifier'); } - } else if ((tmp = fromDecimalCode(ch)) >= 0) { + } else if ((tmp = fromDecimalCode$1(ch)) >= 0) { if (tmp === 0) { - throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + throwError$2(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); } else if (!detectedIndent) { textIndent = nodeIndent + tmp - 1; detectedIndent = true; } else { - throwError(state, 'repeat of an indentation width identifier'); + throwError$2(state, 'repeat of an indentation width identifier'); } } else { @@ -2333,18 +2397,18 @@ function readBlockScalar(state, nodeIndent) { } } - if (is_WHITE_SPACE(ch)) { + if (is_WHITE_SPACE$1(ch)) { do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); + while (is_WHITE_SPACE$1(ch)); if (ch === 0x23/* # */) { do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); + while (!is_EOL$1(ch) && (ch !== 0)); } } while (ch !== 0) { - readLineBreak(state); + readLineBreak$1(state); state.lineIndent = 0; ch = state.input.charCodeAt(state.position); @@ -2359,7 +2423,7 @@ function readBlockScalar(state, nodeIndent) { textIndent = state.lineIndent; } - if (is_EOL(ch)) { + if (is_EOL$1(ch)) { emptyLines++; continue; } @@ -2368,9 +2432,9 @@ function readBlockScalar(state, nodeIndent) { if (state.lineIndent < textIndent) { // Perform the chomping. - if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { + if (chomping === CHOMPING_KEEP$1) { + state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP$1) { if (didReadContent) { // i.e. only if the scalar is not empty. state.result += '\n'; } @@ -2384,15 +2448,15 @@ function readBlockScalar(state, nodeIndent) { if (folding) { // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { + if (is_WHITE_SPACE$1(ch)) { atMoreIndented = true; // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); // End of more-indented block. } else if (atMoreIndented) { atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); + state.result += common$6.repeat('\n', emptyLines + 1); // Just one line break - perceive as the same line. } else if (emptyLines === 0) { @@ -2402,13 +2466,13 @@ function readBlockScalar(state, nodeIndent) { // Several line breaks - perceive as different lines. } else { - state.result += common.repeat('\n', emptyLines); + state.result += common$6.repeat('\n', emptyLines); } // Literal style: just add exact number of line breaks between content lines. } else { // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); } didReadContent = true; @@ -2416,17 +2480,17 @@ function readBlockScalar(state, nodeIndent) { emptyLines = 0; captureStart = state.position; - while (!is_EOL(ch) && (ch !== 0)) { + while (!is_EOL$1(ch) && (ch !== 0)) { ch = state.input.charCodeAt(++state.position); } - captureSegment(state, captureStart, state.position, false); + captureSegment$1(state, captureStart, state.position, false); } return true; } -function readBlockSequence(state, nodeIndent) { +function readBlockSequence$1(state, nodeIndent) { var _line, _tag = state.tag, _anchor = state.anchor, @@ -2449,14 +2513,14 @@ function readBlockSequence(state, nodeIndent) { following = state.input.charCodeAt(state.position + 1); - if (!is_WS_OR_EOL(following)) { + if (!is_WS_OR_EOL$1(following)) { break; } detected = true; state.position++; - if (skipSeparationSpace(state, true, -1)) { + if (skipSeparationSpace$1(state, true, -1)) { if (state.lineIndent <= nodeIndent) { _result.push(null); ch = state.input.charCodeAt(state.position); @@ -2465,14 +2529,14 @@ function readBlockSequence(state, nodeIndent) { } _line = state.line; - composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + composeNode$1(state, nodeIndent, CONTEXT_BLOCK_IN$1, false, true); _result.push(state.result); - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); ch = state.input.charCodeAt(state.position); if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); + throwError$2(state, 'bad indentation of a sequence entry'); } else if (state.lineIndent < nodeIndent) { break; } @@ -2488,7 +2552,7 @@ function readBlockSequence(state, nodeIndent) { return false; } -function readBlockMapping(state, nodeIndent, flowIndent) { +function readBlockMapping$1(state, nodeIndent, flowIndent) { var following, allowCompact, _line, @@ -2519,11 +2583,11 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // Explicit notation case. There are two separate blocks: // first for the key (denoted by "?") and second for the value (denoted by ":") // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL$1(following)) { if (ch === 0x3F/* ? */) { if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); keyTag = keyNode = valueNode = null; } @@ -2537,7 +2601,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { allowCompact = true; } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + throwError$2(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); } state.position += 1; @@ -2546,24 +2610,24 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // // Implicit notation case. Flow-style node as the key first, then ":", and the value. // - } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + } else if (composeNode$1(state, flowIndent, CONTEXT_FLOW_OUT$1, false, true)) { if (state.line === _line) { ch = state.input.charCodeAt(state.position); - while (is_WHITE_SPACE(ch)) { + while (is_WHITE_SPACE$1(ch)) { ch = state.input.charCodeAt(++state.position); } if (ch === 0x3A/* : */) { ch = state.input.charCodeAt(++state.position); - if (!is_WS_OR_EOL(ch)) { - throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + if (!is_WS_OR_EOL$1(ch)) { + throwError$2(state, 'a whitespace character is expected after the key-value separator within a block mapping'); } if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); keyTag = keyNode = valueNode = null; } @@ -2574,7 +2638,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { keyNode = state.result; } else if (detected) { - throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + throwError$2(state, 'can not read an implicit mapping pair; a colon is missed'); } else { state.tag = _tag; @@ -2583,7 +2647,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { } } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + throwError$2(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); } else { state.tag = _tag; @@ -2599,7 +2663,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // Common reading code for both explicit and implicit notations. // if (state.line === _line || state.lineIndent > nodeIndent) { - if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (composeNode$1(state, nodeIndent, CONTEXT_BLOCK_OUT$1, true, allowCompact)) { if (atExplicitKey) { keyNode = state.result; } else { @@ -2608,16 +2672,16 @@ function readBlockMapping(state, nodeIndent, flowIndent) { } if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); + storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); keyTag = keyNode = valueNode = null; } - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); ch = state.input.charCodeAt(state.position); } if (state.lineIndent > nodeIndent && (ch !== 0)) { - throwError(state, 'bad indentation of a mapping entry'); + throwError$2(state, 'bad indentation of a mapping entry'); } else if (state.lineIndent < nodeIndent) { break; } @@ -2629,7 +2693,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // Special case: last mapping's node contains only the key in explicit notation. if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); } // Expose the resulting mapping. @@ -2643,7 +2707,7 @@ function readBlockMapping(state, nodeIndent, flowIndent) { return detected; } -function readTagProperty(state) { +function readTagProperty$1(state) { var _position, isVerbatim = false, isNamed = false, @@ -2656,7 +2720,7 @@ function readTagProperty(state) { if (ch !== 0x21/* ! */) return false; if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); + throwError$2(state, 'duplication of a tag property'); } ch = state.input.charCodeAt(++state.position); @@ -2684,23 +2748,23 @@ function readTagProperty(state) { tagName = state.input.slice(_position, state.position); ch = state.input.charCodeAt(++state.position); } else { - throwError(state, 'unexpected end of the stream within a verbatim tag'); + throwError$2(state, 'unexpected end of the stream within a verbatim tag'); } } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { + while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { if (ch === 0x21/* ! */) { if (!isNamed) { tagHandle = state.input.slice(_position - 1, state.position + 1); - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); + if (!PATTERN_TAG_HANDLE$1.test(tagHandle)) { + throwError$2(state, 'named tag handle cannot contain such characters'); } isNamed = true; _position = state.position + 1; } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); + throwError$2(state, 'tag suffix cannot contain exclamation marks'); } } @@ -2709,19 +2773,19 @@ function readTagProperty(state) { tagName = state.input.slice(_position, state.position); - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); + if (PATTERN_FLOW_INDICATORS$1.test(tagName)) { + throwError$2(state, 'tag suffix cannot contain flow indicator characters'); } } - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state, 'tag name cannot contain such characters: ' + tagName); + if (tagName && !PATTERN_TAG_URI$1.test(tagName)) { + throwError$2(state, 'tag name cannot contain such characters: ' + tagName); } if (isVerbatim) { state.tag = tagName; - } else if (_hasOwnProperty$2.call(state.tagMap, tagHandle)) { + } else if (_hasOwnProperty$5.call(state.tagMap, tagHandle)) { state.tag = state.tagMap[tagHandle] + tagName; } else if (tagHandle === '!') { @@ -2731,13 +2795,13 @@ function readTagProperty(state) { state.tag = 'tag:yaml.org,2002:' + tagName; } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + throwError$2(state, 'undeclared tag handle "' + tagHandle + '"'); } return true; } -function readAnchorProperty(state) { +function readAnchorProperty$1(state) { var _position, ch; @@ -2746,25 +2810,25 @@ function readAnchorProperty(state) { if (ch !== 0x26/* & */) return false; if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); + throwError$2(state, 'duplication of an anchor property'); } ch = state.input.charCodeAt(++state.position); _position = state.position; - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { ch = state.input.charCodeAt(++state.position); } if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); + throwError$2(state, 'name of an anchor node must contain at least one character'); } state.anchor = state.input.slice(_position, state.position); return true; } -function readAlias(state) { +function readAlias$1(state) { var _position, alias, ch; @@ -2775,26 +2839,26 @@ function readAlias(state) { ch = state.input.charCodeAt(++state.position); _position = state.position; - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { ch = state.input.charCodeAt(++state.position); } if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); + throwError$2(state, 'name of an alias node must contain at least one character'); } alias = state.input.slice(_position, state.position); - if (!_hasOwnProperty$2.call(state.anchorMap, alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); + if (!_hasOwnProperty$5.call(state.anchorMap, alias)) { + throwError$2(state, 'unidentified alias "' + alias + '"'); } state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); return true; } -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { +function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompact) { var allowBlockStyles, allowBlockScalars, allowBlockCollections, @@ -2817,11 +2881,11 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact state.result = null; allowBlockStyles = allowBlockScalars = allowBlockCollections = - CONTEXT_BLOCK_OUT === nodeContext || - CONTEXT_BLOCK_IN === nodeContext; + CONTEXT_BLOCK_OUT$1 === nodeContext || + CONTEXT_BLOCK_IN$1 === nodeContext; if (allowToSeek) { - if (skipSeparationSpace(state, true, -1)) { + if (skipSeparationSpace$1(state, true, -1)) { atNewLine = true; if (state.lineIndent > parentIndent) { @@ -2835,8 +2899,8 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact } if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { - if (skipSeparationSpace(state, true, -1)) { + while (readTagProperty$1(state) || readAnchorProperty$1(state)) { + if (skipSeparationSpace$1(state, true, -1)) { atNewLine = true; allowBlockCollections = allowBlockStyles; @@ -2857,8 +2921,8 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact allowBlockCollections = atNewLine || allowCompact; } - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + if (indentStatus === 1 || CONTEXT_BLOCK_OUT$1 === nodeContext) { + if (CONTEXT_FLOW_IN$1 === nodeContext || CONTEXT_FLOW_OUT$1 === nodeContext) { flowIndent = parentIndent; } else { flowIndent = parentIndent + 1; @@ -2868,24 +2932,24 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact if (indentStatus === 1) { if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || - readFlowCollection(state, flowIndent)) { + (readBlockSequence$1(state, blockIndent) || + readBlockMapping$1(state, blockIndent, flowIndent)) || + readFlowCollection$1(state, flowIndent)) { hasContent = true; } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || - readSingleQuotedScalar(state, flowIndent) || - readDoubleQuotedScalar(state, flowIndent)) { + if ((allowBlockScalars && readBlockScalar$1(state, flowIndent)) || + readSingleQuotedScalar$1(state, flowIndent) || + readDoubleQuotedScalar$1(state, flowIndent)) { hasContent = true; - } else if (readAlias(state)) { + } else if (readAlias$1(state)) { hasContent = true; if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); + throwError$2(state, 'alias node should not have any properties'); } - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + } else if (readPlainScalar$1(state, flowIndent, CONTEXT_FLOW_IN$1 === nodeContext)) { hasContent = true; if (state.tag === null) { @@ -2900,7 +2964,7 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact } else if (indentStatus === 0) { // Special case: block sequences are allowed to have same indentation level as the parent. // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + hasContent = allowBlockCollections && readBlockSequence$1(state, blockIndent); } } @@ -2913,7 +2977,7 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact // tag, for example like this: "! [0]" // if (state.result !== null && state.kind !== 'scalar') { - throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + throwError$2(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); } for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { @@ -2928,15 +2992,15 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact break; } } - } else if (_hasOwnProperty$2.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + } else if (_hasOwnProperty$5.call(state.typeMap[state.kind || 'fallback'], state.tag)) { type = state.typeMap[state.kind || 'fallback'][state.tag]; if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + throwError$2(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); } if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + throwError$2(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); } else { state.result = type.construct(state.result); if (state.anchor !== null) { @@ -2944,7 +3008,7 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact } } } else { - throwError(state, 'unknown tag !<' + state.tag + '>'); + throwError$2(state, 'unknown tag !<' + state.tag + '>'); } } @@ -2954,7 +3018,7 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact return state.tag !== null || state.anchor !== null || hasContent; } -function readDocument(state) { +function readDocument$1(state) { var documentStart = state.position, _position, directiveName, @@ -2968,7 +3032,7 @@ function readDocument(state) { state.anchorMap = {}; while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); ch = state.input.charCodeAt(state.position); @@ -2980,7 +3044,7 @@ function readDocument(state) { ch = state.input.charCodeAt(++state.position); _position = state.position; - while (ch !== 0 && !is_WS_OR_EOL(ch)) { + while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { ch = state.input.charCodeAt(++state.position); } @@ -2988,81 +3052,81 @@ function readDocument(state) { directiveArgs = []; if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); + throwError$2(state, 'directive name must not be less than one character in length'); } while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { + while (is_WHITE_SPACE$1(ch)) { ch = state.input.charCodeAt(++state.position); } if (ch === 0x23/* # */) { do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); + while (ch !== 0 && !is_EOL$1(ch)); break; } - if (is_EOL(ch)) break; + if (is_EOL$1(ch)) break; _position = state.position; - while (ch !== 0 && !is_WS_OR_EOL(ch)) { + while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { ch = state.input.charCodeAt(++state.position); } directiveArgs.push(state.input.slice(_position, state.position)); } - if (ch !== 0) readLineBreak(state); + if (ch !== 0) readLineBreak$1(state); - if (_hasOwnProperty$2.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); + if (_hasOwnProperty$5.call(directiveHandlers$1, directiveName)) { + directiveHandlers$1[directiveName](state, directiveName, directiveArgs); } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); + throwWarning$1(state, 'unknown document directive "' + directiveName + '"'); } } - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2D/* - */ && state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { state.position += 3; - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); + throwError$2(state, 'directives end mark is expected'); } - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); + composeNode$1(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT$1, false, true); + skipSeparationSpace$1(state, true, -1); if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + PATTERN_NON_ASCII_LINE_BREAKS$1.test(state.input.slice(documentStart, state.position))) { + throwWarning$1(state, 'non-ASCII line breaks are interpreted as content'); } state.documents.push(state.result); - if (state.position === state.lineStart && testDocumentSeparator(state)) { + if (state.position === state.lineStart && testDocumentSeparator$1(state)) { if (state.input.charCodeAt(state.position) === 0x2E/* . */) { state.position += 3; - skipSeparationSpace(state, true, -1); + skipSeparationSpace$1(state, true, -1); } return; } if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); + throwError$2(state, 'end of the stream or a document separator is expected'); } else { return; } } -function loadDocuments(input, options) { +function loadDocuments$1(input, options) { input = String(input); options = options || {}; @@ -3080,13 +3144,13 @@ function loadDocuments(input, options) { } } - var state = new State(input, options); + var state = new State$3(input, options); var nullpos = input.indexOf('\0'); if (nullpos !== -1) { state.position = nullpos; - throwError(state, 'null byte is not allowed in input'); + throwError$2(state, 'null byte is not allowed in input'); } // Use 0 as string terminator. That significantly simplifies bounds check. @@ -3098,20 +3162,20 @@ function loadDocuments(input, options) { } while (state.position < (state.length - 1)) { - readDocument(state); + readDocument$1(state); } return state.documents; } -function loadAll(input, iterator, options) { +function loadAll$2(input, iterator, options) { if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { options = iterator; iterator = null; } - var documents = loadDocuments(input, options); + var documents = loadDocuments$1(input, options); if (typeof iterator !== 'function') { return documents; @@ -3123,8 +3187,8 @@ function loadAll(input, iterator, options) { } -function load(input, options) { - var documents = loadDocuments(input, options); +function load$5(input, options) { + var documents = loadDocuments$1(input, options); if (documents.length === 0) { /*eslint-disable no-undefined*/ @@ -3132,96 +3196,91 @@ function load(input, options) { } else if (documents.length === 1) { return documents[0]; } - throw new exception('expected a single document in the stream, but found more'); + throw new YAMLException$3('expected a single document in the stream, but found more'); } -function safeLoadAll(input, iterator, options) { +function safeLoadAll$1(input, iterator, options) { if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { options = iterator; iterator = null; } - return loadAll(input, iterator, common.extend({ schema: default_safe }, options)); + return loadAll$2(input, iterator, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options)); } -function safeLoad(input, options) { - return load(input, common.extend({ schema: default_safe }, options)); +function safeLoad$1(input, options) { + return load$5(input, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options)); } -var loadAll_1 = loadAll; -var load_1 = load; -var safeLoadAll_1 = safeLoadAll; -var safeLoad_1 = safeLoad; +loader$2.loadAll = loadAll$2; +loader$2.load = load$5; +loader$2.safeLoadAll = safeLoadAll$1; +loader$2.safeLoad = safeLoad$1; -var loader = { - loadAll: loadAll_1, - load: load_1, - safeLoadAll: safeLoadAll_1, - safeLoad: safeLoad_1 -}; +var dumper$2 = {}; /*eslint-disable no-use-before-define*/ +var common$5 = common$b; +var YAMLException$2 = exception$1; +var DEFAULT_FULL_SCHEMA = default_full; +var DEFAULT_SAFE_SCHEMA = default_safe; +var _toString$3 = Object.prototype.toString; +var _hasOwnProperty$4 = Object.prototype.hasOwnProperty; +var CHAR_TAB$1 = 0x09; /* Tab */ +var CHAR_LINE_FEED$1 = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN$1 = 0x0D; /* CR */ +var CHAR_SPACE$1 = 0x20; /* Space */ +var CHAR_EXCLAMATION$1 = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE$2 = 0x22; /* " */ +var CHAR_SHARP$1 = 0x23; /* # */ +var CHAR_PERCENT$1 = 0x25; /* % */ +var CHAR_AMPERSAND$1 = 0x26; /* & */ +var CHAR_SINGLE_QUOTE$2 = 0x27; /* ' */ +var CHAR_ASTERISK$2 = 0x2A; /* * */ +var CHAR_COMMA$3 = 0x2C; /* , */ +var CHAR_MINUS$1 = 0x2D; /* - */ +var CHAR_COLON$1 = 0x3A; /* : */ +var CHAR_EQUALS$1 = 0x3D; /* = */ +var CHAR_GREATER_THAN$1 = 0x3E; /* > */ +var CHAR_QUESTION$1 = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT$1 = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET$3 = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET$3 = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT$1 = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET$1 = 0x7B; /* { */ +var CHAR_VERTICAL_LINE$1 = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET$1 = 0x7D; /* } */ +var ESCAPE_SEQUENCES$1 = {}; +ESCAPE_SEQUENCES$1[0x00] = '\\0'; +ESCAPE_SEQUENCES$1[0x07] = '\\a'; +ESCAPE_SEQUENCES$1[0x08] = '\\b'; +ESCAPE_SEQUENCES$1[0x09] = '\\t'; +ESCAPE_SEQUENCES$1[0x0A] = '\\n'; +ESCAPE_SEQUENCES$1[0x0B] = '\\v'; +ESCAPE_SEQUENCES$1[0x0C] = '\\f'; +ESCAPE_SEQUENCES$1[0x0D] = '\\r'; +ESCAPE_SEQUENCES$1[0x1B] = '\\e'; +ESCAPE_SEQUENCES$1[0x22] = '\\"'; +ESCAPE_SEQUENCES$1[0x5C] = '\\\\'; +ESCAPE_SEQUENCES$1[0x85] = '\\N'; +ESCAPE_SEQUENCES$1[0xA0] = '\\_'; +ESCAPE_SEQUENCES$1[0x2028] = '\\L'; +ESCAPE_SEQUENCES$1[0x2029] = '\\P'; -var _toString$2 = Object.prototype.toString; -var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; - -var CHAR_TAB = 0x09; /* Tab */ -var CHAR_LINE_FEED = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ -var CHAR_SPACE = 0x20; /* Space */ -var CHAR_EXCLAMATION = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE = 0x22; /* " */ -var CHAR_SHARP = 0x23; /* # */ -var CHAR_PERCENT = 0x25; /* % */ -var CHAR_AMPERSAND = 0x26; /* & */ -var CHAR_SINGLE_QUOTE = 0x27; /* ' */ -var CHAR_ASTERISK = 0x2A; /* * */ -var CHAR_COMMA = 0x2C; /* , */ -var CHAR_MINUS = 0x2D; /* - */ -var CHAR_COLON = 0x3A; /* : */ -var CHAR_EQUALS = 0x3D; /* = */ -var CHAR_GREATER_THAN = 0x3E; /* > */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ +var DEPRECATED_BOOLEANS_SYNTAX$1 = [ 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' ]; -function compileStyleMap(schema, map) { +function compileStyleMap$1(schema, map) { var result, keys, index, length, tag, style, type; if (map === null) return {}; @@ -3238,7 +3297,7 @@ function compileStyleMap(schema, map) { } type = schema.compiledTypeMap['fallback'][tag]; - if (type && _hasOwnProperty$3.call(type.styleAliases, style)) { + if (type && _hasOwnProperty$4.call(type.styleAliases, style)) { style = type.styleAliases[style]; } @@ -3248,7 +3307,7 @@ function compileStyleMap(schema, map) { return result; } -function encodeHex(character) { +function encodeHex$1(character) { var string, handle, length; string = character.toString(16).toUpperCase(); @@ -3263,19 +3322,19 @@ function encodeHex(character) { handle = 'U'; length = 8; } else { - throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); + throw new YAMLException$2('code point within a string may not be greater than 0xFFFFFFFF'); } - return '\\' + handle + common.repeat('0', length - string.length) + string; + return '\\' + handle + common$5.repeat('0', length - string.length) + string; } -function State$1(options) { - this.schema = options['schema'] || default_full; +function State$2(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; this.indent = Math.max(1, (options['indent'] || 2)); this.noArrayIndent = options['noArrayIndent'] || false; this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.flowLevel = (common$5.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap$1(this.schema, options['styles'] || null); this.sortKeys = options['sortKeys'] || false; this.lineWidth = options['lineWidth'] || 80; this.noRefs = options['noRefs'] || false; @@ -3293,8 +3352,8 @@ function State$1(options) { } // Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), +function indentString$1(string, spaces) { + var ind = common$5.repeat(' ', spaces), position = 0, next = -1, result = '', @@ -3319,11 +3378,11 @@ function indentString(string, spaces) { return result; } -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); +function generateNextLine$1(state, level) { + return '\n' + common$5.repeat(' ', state.indent * level); } -function testImplicitResolving(state, str) { +function testImplicitResolving$1(state, str) { var index, length, type; for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { @@ -3338,15 +3397,15 @@ function testImplicitResolving(state, str) { } // [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; +function isWhitespace$1(c) { + return c === CHAR_SPACE$1 || c === CHAR_TAB$1; } // Returns true if the character can be printed without escaping. // From YAML 1.2: "any allowed characters known to be non-printable // should also be escaped. [However,] This isn’t mandatory" // Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { +function isPrintable$1(c) { return (0x00020 <= c && c <= 0x00007E) || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) @@ -3360,74 +3419,74 @@ function isPrintable(c) { // [25] b-carriage-return ::= #xD /* CR */ // [3] c-byte-order-mark ::= #xFEFF function isNsChar(c) { - return isPrintable(c) && !isWhitespace(c) + return isPrintable$1(c) && !isWhitespace$1(c) // byte-order-mark && c !== 0xFEFF // b-char - && c !== CHAR_CARRIAGE_RETURN - && c !== CHAR_LINE_FEED; + && c !== CHAR_CARRIAGE_RETURN$1 + && c !== CHAR_LINE_FEED$1; } // Simplified test for values allowed after the first character in plain style. -function isPlainSafe(c, prev) { +function isPlainSafe$1(c, prev) { // Uses a subset of nb-char - c-flow-indicator - ":" - "#" // where nb-char ::= c-printable - b-char - c-byte-order-mark. - return isPrintable(c) && c !== 0xFEFF + return isPrintable$1(c) && c !== 0xFEFF // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET + && c !== CHAR_COMMA$3 + && c !== CHAR_LEFT_SQUARE_BRACKET$3 + && c !== CHAR_RIGHT_SQUARE_BRACKET$3 + && c !== CHAR_LEFT_CURLY_BRACKET$1 + && c !== CHAR_RIGHT_CURLY_BRACKET$1 // - ":" - "#" // /* An ns-char preceding */ "#" - && c !== CHAR_COLON - && ((c !== CHAR_SHARP) || (prev && isNsChar(prev))); + && c !== CHAR_COLON$1 + && ((c !== CHAR_SHARP$1) || (prev && isNsChar(prev))); } // Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { +function isPlainSafeFirst$1(c) { // Uses a subset of ns-char - c-indicator // where ns-char = nb-char - s-white. - return isPrintable(c) && c !== 0xFEFF - && !isWhitespace(c) // - s-white + return isPrintable$1(c) && c !== 0xFEFF + && !isWhitespace$1(c) // - s-white // - (c-indicator ::= // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET + && c !== CHAR_MINUS$1 + && c !== CHAR_QUESTION$1 + && c !== CHAR_COLON$1 + && c !== CHAR_COMMA$3 + && c !== CHAR_LEFT_SQUARE_BRACKET$3 + && c !== CHAR_RIGHT_SQUARE_BRACKET$3 + && c !== CHAR_LEFT_CURLY_BRACKET$1 + && c !== CHAR_RIGHT_CURLY_BRACKET$1 // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_EQUALS - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE + && c !== CHAR_SHARP$1 + && c !== CHAR_AMPERSAND$1 + && c !== CHAR_ASTERISK$2 + && c !== CHAR_EXCLAMATION$1 + && c !== CHAR_VERTICAL_LINE$1 + && c !== CHAR_EQUALS$1 + && c !== CHAR_GREATER_THAN$1 + && c !== CHAR_SINGLE_QUOTE$2 + && c !== CHAR_DOUBLE_QUOTE$2 // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; + && c !== CHAR_PERCENT$1 + && c !== CHAR_COMMERCIAL_AT$1 + && c !== CHAR_GRAVE_ACCENT$1; } // Determines whether block indentation indicator is required. -function needIndentIndicator(string) { +function needIndentIndicator$1(string) { var leadingSpaceRe = /^\n* /; return leadingSpaceRe.test(string); } -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; +var STYLE_PLAIN$1 = 1, + STYLE_SINGLE$1 = 2, + STYLE_LITERAL$1 = 3, + STYLE_FOLDED$1 = 4, + STYLE_DOUBLE$1 = 5; // Determines which scalar styles are possible and returns the preferred style. // lineWidth = -1 => no limit. @@ -3436,32 +3495,32 @@ var STYLE_PLAIN = 1, // STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. // STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). // STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { +function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { var i; var char, prev_char; var hasLineBreak = false; var hasFoldableLine = false; // only checked if shouldTrackWidth var shouldTrackWidth = lineWidth !== -1; var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(string.charCodeAt(0)) - && !isWhitespace(string.charCodeAt(string.length - 1)); + var plain = isPlainSafeFirst$1(string.charCodeAt(0)) + && !isWhitespace$1(string.charCodeAt(string.length - 1)); if (singleLineOnly) { // Case: no block styles. // Check for disallowed characters to rule out plain and single. for (i = 0; i < string.length; i++) { char = string.charCodeAt(i); - if (!isPrintable(char)) { - return STYLE_DOUBLE; + if (!isPrintable$1(char)) { + return STYLE_DOUBLE$1; } prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe(char, prev_char); + plain = plain && isPlainSafe$1(char, prev_char); } } else { // Case: block styles permitted. for (i = 0; i < string.length; i++) { char = string.charCodeAt(i); - if (char === CHAR_LINE_FEED) { + if (char === CHAR_LINE_FEED$1) { hasLineBreak = true; // Check if any line can be folded. if (shouldTrackWidth) { @@ -3471,11 +3530,11 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te string[previousLineBreak + 1] !== ' '); previousLineBreak = i; } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; + } else if (!isPrintable$1(char)) { + return STYLE_DOUBLE$1; } prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe(char, prev_char); + plain = plain && isPlainSafe$1(char, prev_char); } // in case the end is missing a \n hasFoldableLine = hasFoldableLine || (shouldTrackWidth && @@ -3489,15 +3548,15 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te // Strings interpretable as another type have to be quoted; // e.g. the string 'true' vs. the boolean true. return plain && !testAmbiguousType(string) - ? STYLE_PLAIN : STYLE_SINGLE; + ? STYLE_PLAIN$1 : STYLE_SINGLE$1; } // Edge case: block indentation indicator can only have one digit. - if (indentPerLevel > 9 && needIndentIndicator(string)) { - return STYLE_DOUBLE; + if (indentPerLevel > 9 && needIndentIndicator$1(string)) { + return STYLE_DOUBLE$1; } // At this point we know block styles are valid. // Prefer literal style unless we want to fold. - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + return hasFoldableLine ? STYLE_FOLDED$1 : STYLE_LITERAL$1; } // Note: line breaking/folding is implemented for only the folded style. @@ -3506,13 +3565,13 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te // • No ending newline => unaffected; already using strip "-" chomping. // • Ending newline => removed then restored. // Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey) { +function writeScalar$1(state, string, level, iskey) { state.dump = (function () { if (string.length === 0) { return "''"; } if (!state.noCompatMode && - DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { + DEPRECATED_BOOLEANS_SYNTAX$1.indexOf(string) !== -1) { return "'" + string + "'"; } @@ -3532,31 +3591,31 @@ function writeScalar(state, string, level, iskey) { // No block styles in flow mode. || (state.flowLevel > -1 && level >= state.flowLevel); function testAmbiguity(string) { - return testImplicitResolving(state, string); + return testImplicitResolving$1(state, string); } - switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { - case STYLE_PLAIN: + switch (chooseScalarStyle$1(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { + case STYLE_PLAIN$1: return string; - case STYLE_SINGLE: + case STYLE_SINGLE$1: return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); - case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); - case STYLE_DOUBLE: - return '"' + escapeString(string) + '"'; + case STYLE_LITERAL$1: + return '|' + blockHeader$1(string, state.indent) + + dropEndingNewline$1(indentString$1(string, indent)); + case STYLE_FOLDED$1: + return '>' + blockHeader$1(string, state.indent) + + dropEndingNewline$1(indentString$1(foldString$1(string, lineWidth), indent)); + case STYLE_DOUBLE$1: + return '"' + escapeString$1(string) + '"'; default: - throw new exception('impossible error: invalid scalar style'); + throw new YAMLException$2('impossible error: invalid scalar style'); } }()); } // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; +function blockHeader$1(string, indentPerLevel) { + var indentIndicator = needIndentIndicator$1(string) ? String(indentPerLevel) : ''; // note the special case: the string '\n' counts as a "trailing" empty line. var clip = string[string.length - 1] === '\n'; @@ -3567,13 +3626,13 @@ function blockHeader(string, indentPerLevel) { } // (See the note for writeScalar.) -function dropEndingNewline(string) { +function dropEndingNewline$1(string) { return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; } // Note: a long line without a suitable break point will exceed the width limit. // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { +function foldString$1(string, width) { // In folded style, $k$ consecutive newlines output as $k+1$ newlines— // unless they're before or after a more-indented line, or at the very // beginning or end, in which case $k$ maps to $k$. @@ -3585,7 +3644,7 @@ function foldString(string, width) { var nextLF = string.indexOf('\n'); nextLF = nextLF !== -1 ? nextLF : string.length; lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); + return foldLine$1(string.slice(0, nextLF), width); }()); // If we haven't reached the first content line yet, don't add an extra \n. var prevMoreIndented = string[0] === '\n' || string[0] === ' '; @@ -3599,7 +3658,7 @@ function foldString(string, width) { result += prefix + (!prevMoreIndented && !moreIndented && line !== '' ? '\n' : '') - + foldLine(line, width); + + foldLine$1(line, width); prevMoreIndented = moreIndented; } @@ -3610,7 +3669,7 @@ function foldString(string, width) { // Picks the longest line under the limit each time, // otherwise settles for the shortest line over the limit. // NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { +function foldLine$1(line, width) { if (line === '' || line[0] === ' ') return line; // Since a more-indented line adds a \n, breaks can't be followed by a space. @@ -3650,7 +3709,7 @@ function foldLine(line, width) { } // Escapes a double-quoted string. -function escapeString(string) { +function escapeString$1(string) { var result = ''; var char, nextChar; var escapeSeq; @@ -3662,21 +3721,21 @@ function escapeString(string) { nextChar = string.charCodeAt(i + 1); if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { // Combine the surrogate pair and store it escaped. - result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); + result += encodeHex$1((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); // Advance index one extra since we already used that char here. i++; continue; } } - escapeSeq = ESCAPE_SEQUENCES[char]; - result += !escapeSeq && isPrintable(char) + escapeSeq = ESCAPE_SEQUENCES$1[char]; + result += !escapeSeq && isPrintable$1(char) ? string[i] - : escapeSeq || encodeHex(char); + : escapeSeq || encodeHex$1(char); } return result; } -function writeFlowSequence(state, level, object) { +function writeFlowSequence$1(state, level, object) { var _result = '', _tag = state.tag, index, @@ -3684,7 +3743,7 @@ function writeFlowSequence(state, level, object) { for (index = 0, length = object.length; index < length; index += 1) { // Write only valid elements. - if (writeNode(state, level, object[index], false, false)) { + if (writeNode$1(state, level, object[index], false, false)) { if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); _result += state.dump; } @@ -3694,7 +3753,7 @@ function writeFlowSequence(state, level, object) { state.dump = '[' + _result + ']'; } -function writeBlockSequence(state, level, object, compact) { +function writeBlockSequence$1(state, level, object, compact) { var _result = '', _tag = state.tag, index, @@ -3702,12 +3761,12 @@ function writeBlockSequence(state, level, object, compact) { for (index = 0, length = object.length; index < length; index += 1) { // Write only valid elements. - if (writeNode(state, level + 1, object[index], true, true)) { + if (writeNode$1(state, level + 1, object[index], true, true)) { if (!compact || index !== 0) { - _result += generateNextLine(state, level); + _result += generateNextLine$1(state, level); } - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { _result += '-'; } else { _result += '- '; @@ -3721,7 +3780,7 @@ function writeBlockSequence(state, level, object, compact) { state.dump = _result || '[]'; // Empty sequence if no valid values. } -function writeFlowMapping(state, level, object) { +function writeFlowMapping$1(state, level, object) { var _result = '', _tag = state.tag, objectKeyList = Object.keys(object), @@ -3741,7 +3800,7 @@ function writeFlowMapping(state, level, object) { objectKey = objectKeyList[index]; objectValue = object[objectKey]; - if (!writeNode(state, level, objectKey, false, false)) { + if (!writeNode$1(state, level, objectKey, false, false)) { continue; // Skip this pair because of invalid key; } @@ -3749,7 +3808,7 @@ function writeFlowMapping(state, level, object) { pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); - if (!writeNode(state, level, objectValue, false, false)) { + if (!writeNode$1(state, level, objectValue, false, false)) { continue; // Skip this pair because of invalid value. } @@ -3763,7 +3822,7 @@ function writeFlowMapping(state, level, object) { state.dump = '{' + _result + '}'; } -function writeBlockMapping(state, level, object, compact) { +function writeBlockMapping$1(state, level, object, compact) { var _result = '', _tag = state.tag, objectKeyList = Object.keys(object), @@ -3783,20 +3842,20 @@ function writeBlockMapping(state, level, object, compact) { objectKeyList.sort(state.sortKeys); } else if (state.sortKeys) { // Something is wrong - throw new exception('sortKeys must be a boolean or a function'); + throw new YAMLException$2('sortKeys must be a boolean or a function'); } for (index = 0, length = objectKeyList.length; index < length; index += 1) { pairBuffer = ''; if (!compact || index !== 0) { - pairBuffer += generateNextLine(state, level); + pairBuffer += generateNextLine$1(state, level); } objectKey = objectKeyList[index]; objectValue = object[objectKey]; - if (!writeNode(state, level + 1, objectKey, true, true, true)) { + if (!writeNode$1(state, level + 1, objectKey, true, true, true)) { continue; // Skip this pair because of invalid key. } @@ -3804,7 +3863,7 @@ function writeBlockMapping(state, level, object, compact) { (state.dump && state.dump.length > 1024); if (explicitPair) { - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { pairBuffer += '?'; } else { pairBuffer += '? '; @@ -3814,14 +3873,14 @@ function writeBlockMapping(state, level, object, compact) { pairBuffer += state.dump; if (explicitPair) { - pairBuffer += generateNextLine(state, level); + pairBuffer += generateNextLine$1(state, level); } - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + if (!writeNode$1(state, level + 1, objectValue, true, explicitPair)) { continue; // Skip this pair because of invalid value. } - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { pairBuffer += ':'; } else { pairBuffer += ': '; @@ -3837,7 +3896,7 @@ function writeBlockMapping(state, level, object, compact) { state.dump = _result || '{}'; // Empty mapping if no valid pairs. } -function detectType(state, object, explicit) { +function detectType$1(state, object, explicit) { var _result, typeList, index, length, type, style; typeList = explicit ? state.explicitTypes : state.implicitTypes; @@ -3854,12 +3913,12 @@ function detectType(state, object, explicit) { if (type.represent) { style = state.styleMap[type.tag] || type.defaultStyle; - if (_toString$2.call(type.represent) === '[object Function]') { + if (_toString$3.call(type.represent) === '[object Function]') { _result = type.represent(object, style); - } else if (_hasOwnProperty$3.call(type.represent, style)) { + } else if (_hasOwnProperty$4.call(type.represent, style)) { _result = type.represent[style](object, style); } else { - throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + throw new YAMLException$2('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); } state.dump = _result; @@ -3875,15 +3934,15 @@ function detectType(state, object, explicit) { // Serializes `object` and writes it to global `result`. // Returns true on success, or false on invalid object. // -function writeNode(state, level, object, block, compact, iskey) { +function writeNode$1(state, level, object, block, compact, iskey) { state.tag = null; state.dump = object; - if (!detectType(state, object, false)) { - detectType(state, object, true); + if (!detectType$1(state, object, false)) { + detectType$1(state, object, true); } - var type = _toString$2.call(state.dump); + var type = _toString$3.call(state.dump); if (block) { block = (state.flowLevel < 0 || state.flowLevel > level); @@ -3910,12 +3969,12 @@ function writeNode(state, level, object, block, compact, iskey) { } if (type === '[object Object]') { if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); + writeBlockMapping$1(state, level, state.dump, compact); if (duplicate) { state.dump = '&ref_' + duplicateIndex + state.dump; } } else { - writeFlowMapping(state, level, state.dump); + writeFlowMapping$1(state, level, state.dump); if (duplicate) { state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; } @@ -3923,23 +3982,23 @@ function writeNode(state, level, object, block, compact, iskey) { } else if (type === '[object Array]') { var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; if (block && (state.dump.length !== 0)) { - writeBlockSequence(state, arrayLevel, state.dump, compact); + writeBlockSequence$1(state, arrayLevel, state.dump, compact); if (duplicate) { state.dump = '&ref_' + duplicateIndex + state.dump; } } else { - writeFlowSequence(state, arrayLevel, state.dump); + writeFlowSequence$1(state, arrayLevel, state.dump); if (duplicate) { state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; } } } else if (type === '[object String]') { if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey); + writeScalar$1(state, state.dump, level, iskey); } } else { if (state.skipInvalid) return false; - throw new exception('unacceptable kind of an object to dump ' + type); + throw new YAMLException$2('unacceptable kind of an object to dump ' + type); } if (state.tag !== null && state.tag !== '?') { @@ -3950,13 +4009,13 @@ function writeNode(state, level, object, block, compact, iskey) { return true; } -function getDuplicateReferences(object, state) { +function getDuplicateReferences$1(object, state) { var objects = [], duplicatesIndexes = [], index, length; - inspectNode(object, objects, duplicatesIndexes); + inspectNode$1(object, objects, duplicatesIndexes); for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { state.duplicates.push(objects[duplicatesIndexes[index]]); @@ -3964,7 +4023,7 @@ function getDuplicateReferences(object, state) { state.usedDuplicates = new Array(length); } -function inspectNode(object, objects, duplicatesIndexes) { +function inspectNode$1(object, objects, duplicatesIndexes) { var objectKeyList, index, length; @@ -3980,42 +4039,41 @@ function inspectNode(object, objects, duplicatesIndexes) { if (Array.isArray(object)) { for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); + inspectNode$1(object[index], objects, duplicatesIndexes); } } else { objectKeyList = Object.keys(object); for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + inspectNode$1(object[objectKeyList[index]], objects, duplicatesIndexes); } } } } } -function dump(input, options) { +function dump$2(input, options) { options = options || {}; - var state = new State$1(options); + var state = new State$2(options); - if (!state.noRefs) getDuplicateReferences(input, state); + if (!state.noRefs) getDuplicateReferences$1(input, state); - if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + if (writeNode$1(state, 0, input, true, true)) return state.dump + '\n'; return ''; } -function safeDump(input, options) { - return dump(input, common.extend({ schema: default_safe }, options)); +function safeDump$1(input, options) { + return dump$2(input, common$5.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); } -var dump_1 = dump; -var safeDump_1 = safeDump; +dumper$2.dump = dump$2; +dumper$2.safeDump = safeDump$1; + +var loader$1 = loader$2; +var dumper$1 = dumper$2; -var dumper = { - dump: dump_1, - safeDump: safeDump_1 -}; function deprecated(name) { return function () { @@ -4024,59 +4082,38 @@ function deprecated(name) { } -var Type$1 = type; -var Schema$1 = schema; -var FAILSAFE_SCHEMA = failsafe; -var JSON_SCHEMA = json; -var CORE_SCHEMA = core; -var DEFAULT_SAFE_SCHEMA = default_safe; -var DEFAULT_FULL_SCHEMA = default_full; -var load$1 = loader.load; -var loadAll$1 = loader.loadAll; -var safeLoad$1 = loader.safeLoad; -var safeLoadAll$1 = loader.safeLoadAll; -var dump$1 = dumper.dump; -var safeDump$1 = dumper.safeDump; -var YAMLException$1 = exception; +jsYaml$2.Type = type$1; +jsYaml$2.Schema = schema$2; +jsYaml$2.FAILSAFE_SCHEMA = failsafe$1; +jsYaml$2.JSON_SCHEMA = json$3; +jsYaml$2.CORE_SCHEMA = core$4; +jsYaml$2.DEFAULT_SAFE_SCHEMA = default_safe; +jsYaml$2.DEFAULT_FULL_SCHEMA = default_full; +jsYaml$2.load = loader$1.load; +jsYaml$2.loadAll = loader$1.loadAll; +jsYaml$2.safeLoad = loader$1.safeLoad; +jsYaml$2.safeLoadAll = loader$1.safeLoadAll; +jsYaml$2.dump = dumper$1.dump; +jsYaml$2.safeDump = dumper$1.safeDump; +jsYaml$2.YAMLException = exception$1; // Deprecated schema names from JS-YAML 2.0.x -var MINIMAL_SCHEMA = failsafe; -var SAFE_SCHEMA = default_safe; -var DEFAULT_SCHEMA = default_full; +jsYaml$2.MINIMAL_SCHEMA = failsafe$1; +jsYaml$2.SAFE_SCHEMA = default_safe; +jsYaml$2.DEFAULT_SCHEMA = default_full; // Deprecated functions from JS-YAML 1.x.x -var scan = deprecated('scan'); -var parse = deprecated('parse'); -var compose = deprecated('compose'); -var addConstructor = deprecated('addConstructor'); +jsYaml$2.scan = deprecated('scan'); +jsYaml$2.parse = deprecated('parse'); +jsYaml$2.compose = deprecated('compose'); +jsYaml$2.addConstructor = deprecated('addConstructor'); + +var yaml$1 = jsYaml$2; -var jsYaml = { - Type: Type$1, - Schema: Schema$1, - FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, - JSON_SCHEMA: JSON_SCHEMA, - CORE_SCHEMA: CORE_SCHEMA, - DEFAULT_SAFE_SCHEMA: DEFAULT_SAFE_SCHEMA, - DEFAULT_FULL_SCHEMA: DEFAULT_FULL_SCHEMA, - load: load$1, - loadAll: loadAll$1, - safeLoad: safeLoad$1, - safeLoadAll: safeLoadAll$1, - dump: dump$1, - safeDump: safeDump$1, - YAMLException: YAMLException$1, - MINIMAL_SCHEMA: MINIMAL_SCHEMA, - SAFE_SCHEMA: SAFE_SCHEMA, - DEFAULT_SCHEMA: DEFAULT_SCHEMA, - scan: scan, - parse: parse, - compose: compose, - addConstructor: addConstructor -}; -var jsYaml$1 = jsYaml; +var jsYaml$1 = yaml$1; -var isArrayish = function isArrayish(obj) { +var isArrayish$2 = function isArrayish(obj) { if (!obj) { return false; } @@ -4085,7 +4122,10 @@ var isArrayish = function isArrayish(obj) { (obj.length >= 0 && obj.splice instanceof Function); }; -var errorEx = function errorEx(name, properties) { +var util$4 = require$$0__default['default']; +var isArrayish$1 = isArrayish$2; + +var errorEx$1 = function errorEx(name, properties) { if (!name || name.constructor !== String) { properties = name || {}; name = Error.name; @@ -4120,7 +4160,7 @@ var errorEx = function errorEx(name, properties) { if ('message' in modifier) { newMessage = modifier.message(this[key], newMessage) || newMessage; - if (!isArrayish(newMessage)) { + if (!isArrayish$1(newMessage)) { newMessage = [newMessage]; } } @@ -4186,13 +4226,13 @@ var errorEx = function errorEx(name, properties) { Object.setPrototypeOf(errorExError.prototype, Error.prototype); Object.setPrototypeOf(errorExError, Error); } else { - util__default['default'].inherits(errorExError, Error); + util$4.inherits(errorExError, Error); } return errorExError; }; -errorEx.append = function (str, def) { +errorEx$1.append = function (str, def) { return { message: function (v, message) { v = v || def; @@ -4206,7 +4246,7 @@ errorEx.append = function (str, def) { }; }; -errorEx.line = function (str, def) { +errorEx$1.line = function (str, def) { return { line: function (v) { v = v || def; @@ -4220,7 +4260,7 @@ errorEx.line = function (str, def) { }; }; -var errorEx_1 = errorEx; +var errorEx_1 = errorEx$1; const hexify = char => { const h = char.charCodeAt(0).toString(16).toUpperCase(); @@ -4293,7 +4333,7 @@ const kNewline = Symbol.for('newline'); const formatRE = /^\s*[{\[]((?:\r?\n)+)([\s\t]*)/; const emptyRE = /^(?:\{\}|\[\])((?:\r?\n)+)?$/; -const parseJson = (txt, reviver, context) => { +const parseJson$1 = (txt, reviver, context) => { const parseText = stripBOM(txt); context = context || 20; try { @@ -4324,7 +4364,7 @@ const parseJson = (txt, reviver, context) => { }) } - throw new JSONParseError(e, parseText, context, parseJson) + throw new JSONParseError(e, parseText, context, parseJson$1) } }; @@ -4333,10 +4373,10 @@ const parseJson = (txt, reviver, context) => { // translates it to FEFF, the UTF-16 BOM. const stripBOM = txt => String(txt).replace(/^\uFEFF/, ''); -var jsonParseEvenBetterErrors = parseJson; -parseJson.JSONParseError = JSONParseError; +var jsonParseEvenBetterErrors = parseJson$1; +parseJson$1.JSONParseError = JSONParseError; -parseJson.noExceptions = (txt, reviver) => { +parseJson$1.noExceptions = (txt, reviver) => { try { return JSON.parse(stripBOM(txt), reviver) } catch (e) {} @@ -4344,7 +4384,7 @@ parseJson.noExceptions = (txt, reviver) => { var LF = '\n'; var CR = '\r'; -var LinesAndColumns = (function () { +var LinesAndColumns$1 = (function () { function LinesAndColumns(string) { this.string = string; var offsets = [0]; @@ -4398,21 +4438,31 @@ var LinesAndColumns = (function () { return LinesAndColumns; }()); -var dist = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': LinesAndColumns +var dist$2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': LinesAndColumns$1 }); +var require$$2 = /*@__PURE__*/getAugmentedNamespace(dist$2); + +var lib$9 = {}; + +var lib$8 = {}; + +var jsTokens = {}; + // Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell // License: MIT. (See LICENSE.) - +Object.defineProperty(jsTokens, "__esModule", { + value: true +}); // This regex comes from regex.coffee, and is inserted here by generate-index.js // (run `npm run build`). -var _default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g; +jsTokens.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g; -var matchToToken = function(match) { +jsTokens.matchToToken = function(match) { var token = {type: "invalid", value: match[0], closed: undefined}; if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]); else if (match[ 5]) token.type = "comment"; @@ -4425,14 +4475,16 @@ var matchToToken = function(match) { return token }; -var jsTokens = /*#__PURE__*/Object.defineProperty({ - default: _default, - matchToToken: matchToToken -}, '__esModule', {value: true}); +var lib$7 = {}; -var isIdentifierStart_1 = isIdentifierStart; -var isIdentifierChar_1 = isIdentifierChar; -var isIdentifierName_1 = isIdentifierName; +var identifier = {}; + +Object.defineProperty(identifier, "__esModule", { + value: true +}); +identifier.isIdentifierStart = isIdentifierStart; +identifier.isIdentifierChar = isIdentifierChar; +identifier.isIdentifierName = isIdentifierName; let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); @@ -4485,16 +4537,23 @@ function isIdentifierChar(code) { function isIdentifierName(name) { let isFirst = true; - for (let _i = 0, _Array$from = Array.from(name); _i < _Array$from.length; _i++) { - const char = _Array$from[_i]; - const cp = char.codePointAt(0); + for (let i = 0; i < name.length; i++) { + let cp = name.charCodeAt(i); + + if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) { + const trail = name.charCodeAt(++i); + + if ((trail & 0xfc00) === 0xdc00) { + cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); + } + } if (isFirst) { + isFirst = false; + if (!isIdentifierStart(cp)) { return false; } - - isFirst = false; } else if (!isIdentifierChar(cp)) { return false; } @@ -4503,23 +4562,22 @@ function isIdentifierName(name) { return !isFirst; } -var identifier = /*#__PURE__*/Object.defineProperty({ - isIdentifierStart: isIdentifierStart_1, - isIdentifierChar: isIdentifierChar_1, - isIdentifierName: isIdentifierName_1 -}, '__esModule', {value: true}); +var keyword = {}; -var isReservedWord_1 = isReservedWord; -var isStrictReservedWord_1 = isStrictReservedWord; -var isStrictBindOnlyReservedWord_1 = isStrictBindOnlyReservedWord; -var isStrictBindReservedWord_1 = isStrictBindReservedWord; -var isKeyword_1 = isKeyword; +Object.defineProperty(keyword, "__esModule", { + value: true +}); +keyword.isReservedWord = isReservedWord; +keyword.isStrictReservedWord = isStrictReservedWord; +keyword.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; +keyword.isStrictBindReservedWord = isStrictBindReservedWord; +keyword.isKeyword = isKeyword; const reservedWords = { keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], strictBind: ["eval", "arguments"] }; -const keywords = new Set(reservedWords.keyword); +const keywords$1 = new Set(reservedWords.keyword); const reservedWordsStrictSet = new Set(reservedWords.strict); const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); @@ -4540,18 +4598,10 @@ function isStrictBindReservedWord(word, inModule) { } function isKeyword(word) { - return keywords.has(word); + return keywords$1.has(word); } -var keyword = /*#__PURE__*/Object.defineProperty({ - isReservedWord: isReservedWord_1, - isStrictReservedWord: isStrictReservedWord_1, - isStrictBindOnlyReservedWord: isStrictBindOnlyReservedWord_1, - isStrictBindReservedWord: isStrictBindReservedWord_1, - isKeyword: isKeyword_1 -}, '__esModule', {value: true}); - -var lib = createCommonjsModule(function (module, exports) { +(function (exports) { Object.defineProperty(exports, "__esModule", { value: true @@ -4559,56 +4609,62 @@ Object.defineProperty(exports, "__esModule", { Object.defineProperty(exports, "isIdentifierName", { enumerable: true, get: function () { - return identifier.isIdentifierName; + return _identifier.isIdentifierName; } }); Object.defineProperty(exports, "isIdentifierChar", { enumerable: true, get: function () { - return identifier.isIdentifierChar; + return _identifier.isIdentifierChar; } }); Object.defineProperty(exports, "isIdentifierStart", { enumerable: true, get: function () { - return identifier.isIdentifierStart; + return _identifier.isIdentifierStart; } }); Object.defineProperty(exports, "isReservedWord", { enumerable: true, get: function () { - return keyword.isReservedWord; + return _keyword.isReservedWord; } }); Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { enumerable: true, get: function () { - return keyword.isStrictBindOnlyReservedWord; + return _keyword.isStrictBindOnlyReservedWord; } }); Object.defineProperty(exports, "isStrictBindReservedWord", { enumerable: true, get: function () { - return keyword.isStrictBindReservedWord; + return _keyword.isStrictBindReservedWord; } }); Object.defineProperty(exports, "isStrictReservedWord", { enumerable: true, get: function () { - return keyword.isStrictReservedWord; + return _keyword.isStrictReservedWord; } }); Object.defineProperty(exports, "isKeyword", { enumerable: true, get: function () { - return keyword.isKeyword; + return _keyword.isKeyword; } }); -}); + +var _identifier = identifier; + +var _keyword = keyword; +}(lib$7)); + +var chalk$2 = {exports: {}}; var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; -var escapeStringRegexp = function (str) { +var escapeStringRegexp$3 = function (str) { if (typeof str !== 'string') { throw new TypeError('Expected a string'); } @@ -4616,7 +4672,11 @@ var escapeStringRegexp = function (str) { return str.replace(matchOperatorsRe, '\\$&'); }; -var colorName = { +var ansiStyles$2 = {exports: {}}; + +var conversions$5 = {exports: {}}; + +var colorName$1 = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], @@ -4769,19 +4829,20 @@ var colorName = { /* MIT license */ -var conversions = createCommonjsModule(function (module) { +var cssKeywords$1 = colorName$1; + // NOTE: conversions should only return primitive values (i.e. arrays, or // values that give correct `typeof` results). // do not use box values types (i.e. Number(), String(), etc.) -var reverseKeywords = {}; -for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; +var reverseKeywords$1 = {}; +for (var key$1 in cssKeywords$1) { + if (cssKeywords$1.hasOwnProperty(key$1)) { + reverseKeywords$1[cssKeywords$1[key$1]] = key$1; } } -var convert = module.exports = { +var convert$H = conversions$5.exports = { rgb: {channels: 3, labels: 'rgb'}, hsl: {channels: 3, labels: 'hsl'}, hsv: {channels: 3, labels: 'hsv'}, @@ -4800,30 +4861,30 @@ var convert = module.exports = { }; // hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { +for (var model in convert$H) { + if (convert$H.hasOwnProperty(model)) { + if (!('channels' in convert$H[model])) { throw new Error('missing channels property: ' + model); } - if (!('labels' in convert[model])) { + if (!('labels' in convert$H[model])) { throw new Error('missing channel labels property: ' + model); } - if (convert[model].labels.length !== convert[model].channels) { + if (convert$H[model].labels.length !== convert$H[model].channels) { throw new Error('channel and label counts mismatch: ' + model); } - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); + var channels = convert$H[model].channels; + var labels$1 = convert$H[model].labels; + delete convert$H[model].channels; + delete convert$H[model].labels; + Object.defineProperty(convert$H[model], 'channels', {value: channels}); + Object.defineProperty(convert$H[model], 'labels', {value: labels$1}); } } -convert.rgb.hsl = function (rgb) { +convert$H.rgb.hsl = function (rgb) { var r = rgb[0] / 255; var g = rgb[1] / 255; var b = rgb[2] / 255; @@ -4863,7 +4924,7 @@ convert.rgb.hsl = function (rgb) { return [h, s * 100, l * 100]; }; -convert.rgb.hsv = function (rgb) { +convert$H.rgb.hsv = function (rgb) { var rdif; var gdif; var bdif; @@ -4908,11 +4969,11 @@ convert.rgb.hsv = function (rgb) { ]; }; -convert.rgb.hwb = function (rgb) { +convert$H.rgb.hwb = function (rgb) { var r = rgb[0]; var g = rgb[1]; var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; + var h = convert$H.rgb.hsl(rgb)[0]; var w = 1 / 255 * Math.min(r, Math.min(g, b)); b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); @@ -4920,7 +4981,7 @@ convert.rgb.hwb = function (rgb) { return [h, w * 100, b * 100]; }; -convert.rgb.cmyk = function (rgb) { +convert$H.rgb.cmyk = function (rgb) { var r = rgb[0] / 255; var g = rgb[1] / 255; var b = rgb[2] / 255; @@ -4940,7 +5001,7 @@ convert.rgb.cmyk = function (rgb) { /** * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance * */ -function comparativeDistance(x, y) { +function comparativeDistance$1(x, y) { return ( Math.pow(x[0] - y[0], 2) + Math.pow(x[1] - y[1], 2) + @@ -4948,8 +5009,8 @@ function comparativeDistance(x, y) { ); } -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; +convert$H.rgb.keyword = function (rgb) { + var reversed = reverseKeywords$1[rgb]; if (reversed) { return reversed; } @@ -4957,12 +5018,12 @@ convert.rgb.keyword = function (rgb) { var currentClosestDistance = Infinity; var currentClosestKeyword; - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; + for (var keyword in cssKeywords$1) { + if (cssKeywords$1.hasOwnProperty(keyword)) { + var value = cssKeywords$1[keyword]; // Compute comparative distance - var distance = comparativeDistance(rgb, value); + var distance = comparativeDistance$1(rgb, value); // Check if its less, if so set as closest if (distance < currentClosestDistance) { @@ -4975,11 +5036,11 @@ convert.rgb.keyword = function (rgb) { return currentClosestKeyword; }; -convert.keyword.rgb = function (keyword) { - return colorName[keyword]; +convert$H.keyword.rgb = function (keyword) { + return cssKeywords$1[keyword]; }; -convert.rgb.xyz = function (rgb) { +convert$H.rgb.xyz = function (rgb) { var r = rgb[0] / 255; var g = rgb[1] / 255; var b = rgb[2] / 255; @@ -4996,8 +5057,8 @@ convert.rgb.xyz = function (rgb) { return [x * 100, y * 100, z * 100]; }; -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); +convert$H.rgb.lab = function (rgb) { + var xyz = convert$H.rgb.xyz(rgb); var x = xyz[0]; var y = xyz[1]; var z = xyz[2]; @@ -5020,7 +5081,7 @@ convert.rgb.lab = function (rgb) { return [l, a, b]; }; -convert.hsl.rgb = function (hsl) { +convert$H.hsl.rgb = function (hsl) { var h = hsl[0] / 360; var s = hsl[1] / 100; var l = hsl[2] / 100; @@ -5069,7 +5130,7 @@ convert.hsl.rgb = function (hsl) { return rgb; }; -convert.hsl.hsv = function (hsl) { +convert$H.hsl.hsv = function (hsl) { var h = hsl[0]; var s = hsl[1] / 100; var l = hsl[2] / 100; @@ -5087,7 +5148,7 @@ convert.hsl.hsv = function (hsl) { return [h, sv * 100, v * 100]; }; -convert.hsv.rgb = function (hsv) { +convert$H.hsv.rgb = function (hsv) { var h = hsv[0] / 60; var s = hsv[1] / 100; var v = hsv[2] / 100; @@ -5115,7 +5176,7 @@ convert.hsv.rgb = function (hsv) { } }; -convert.hsv.hsl = function (hsv) { +convert$H.hsv.hsl = function (hsv) { var h = hsv[0]; var s = hsv[1] / 100; var v = hsv[2] / 100; @@ -5135,7 +5196,7 @@ convert.hsv.hsl = function (hsv) { }; // http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { +convert$H.hwb.rgb = function (hwb) { var h = hwb[0] / 360; var wh = hwb[1] / 100; var bl = hwb[2] / 100; @@ -5178,7 +5239,7 @@ convert.hwb.rgb = function (hwb) { return [r * 255, g * 255, b * 255]; }; -convert.cmyk.rgb = function (cmyk) { +convert$H.cmyk.rgb = function (cmyk) { var c = cmyk[0] / 100; var m = cmyk[1] / 100; var y = cmyk[2] / 100; @@ -5194,7 +5255,7 @@ convert.cmyk.rgb = function (cmyk) { return [r * 255, g * 255, b * 255]; }; -convert.xyz.rgb = function (xyz) { +convert$H.xyz.rgb = function (xyz) { var x = xyz[0] / 100; var y = xyz[1] / 100; var z = xyz[2] / 100; @@ -5226,7 +5287,7 @@ convert.xyz.rgb = function (xyz) { return [r * 255, g * 255, b * 255]; }; -convert.xyz.lab = function (xyz) { +convert$H.xyz.lab = function (xyz) { var x = xyz[0]; var y = xyz[1]; var z = xyz[2]; @@ -5249,7 +5310,7 @@ convert.xyz.lab = function (xyz) { return [l, a, b]; }; -convert.lab.xyz = function (lab) { +convert$H.lab.xyz = function (lab) { var l = lab[0]; var a = lab[1]; var b = lab[2]; @@ -5275,7 +5336,7 @@ convert.lab.xyz = function (lab) { return [x, y, z]; }; -convert.lab.lch = function (lab) { +convert$H.lab.lch = function (lab) { var l = lab[0]; var a = lab[1]; var b = lab[2]; @@ -5295,7 +5356,7 @@ convert.lab.lch = function (lab) { return [l, c, h]; }; -convert.lch.lab = function (lch) { +convert$H.lch.lab = function (lch) { var l = lch[0]; var c = lch[1]; var h = lch[2]; @@ -5310,11 +5371,11 @@ convert.lch.lab = function (lch) { return [l, a, b]; }; -convert.rgb.ansi16 = function (args) { +convert$H.rgb.ansi16 = function (args) { var r = args[0]; var g = args[1]; var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + var value = 1 in arguments ? arguments[1] : convert$H.rgb.hsv(args)[2]; // hsv -> ansi16 optimization value = Math.round(value / 50); @@ -5334,13 +5395,13 @@ convert.rgb.ansi16 = function (args) { return ansi; }; -convert.hsv.ansi16 = function (args) { +convert$H.hsv.ansi16 = function (args) { // optimization here; we already know the value and don't need to get // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + return convert$H.rgb.ansi16(convert$H.hsv.rgb(args), args[2]); }; -convert.rgb.ansi256 = function (args) { +convert$H.rgb.ansi256 = function (args) { var r = args[0]; var g = args[1]; var b = args[2]; @@ -5367,7 +5428,7 @@ convert.rgb.ansi256 = function (args) { return ansi; }; -convert.ansi16.rgb = function (args) { +convert$H.ansi16.rgb = function (args) { var color = args % 10; // handle greyscale @@ -5389,7 +5450,7 @@ convert.ansi16.rgb = function (args) { return [r, g, b]; }; -convert.ansi256.rgb = function (args) { +convert$H.ansi256.rgb = function (args) { // handle greyscale if (args >= 232) { var c = (args - 232) * 10 + 8; @@ -5406,7 +5467,7 @@ convert.ansi256.rgb = function (args) { return [r, g, b]; }; -convert.rgb.hex = function (args) { +convert$H.rgb.hex = function (args) { var integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF); @@ -5415,7 +5476,7 @@ convert.rgb.hex = function (args) { return '000000'.substring(string.length) + string; }; -convert.hex.rgb = function (args) { +convert$H.hex.rgb = function (args) { var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); if (!match) { return [0, 0, 0]; @@ -5437,7 +5498,7 @@ convert.hex.rgb = function (args) { return [r, g, b]; }; -convert.rgb.hcg = function (rgb) { +convert$H.rgb.hcg = function (rgb) { var r = rgb[0] / 255; var g = rgb[1] / 255; var b = rgb[2] / 255; @@ -5471,7 +5532,7 @@ convert.rgb.hcg = function (rgb) { return [hue * 360, chroma * 100, grayscale * 100]; }; -convert.hsl.hcg = function (hsl) { +convert$H.hsl.hcg = function (hsl) { var s = hsl[1] / 100; var l = hsl[2] / 100; var c = 1; @@ -5490,7 +5551,7 @@ convert.hsl.hcg = function (hsl) { return [hsl[0], c * 100, f * 100]; }; -convert.hsv.hcg = function (hsv) { +convert$H.hsv.hcg = function (hsv) { var s = hsv[1] / 100; var v = hsv[2] / 100; @@ -5504,7 +5565,7 @@ convert.hsv.hcg = function (hsv) { return [hsv[0], c * 100, f * 100]; }; -convert.hcg.rgb = function (hcg) { +convert$H.hcg.rgb = function (hcg) { var h = hcg[0] / 360; var c = hcg[1] / 100; var g = hcg[2] / 100; @@ -5543,7 +5604,7 @@ convert.hcg.rgb = function (hcg) { ]; }; -convert.hcg.hsv = function (hcg) { +convert$H.hcg.hsv = function (hcg) { var c = hcg[1] / 100; var g = hcg[2] / 100; @@ -5557,7 +5618,7 @@ convert.hcg.hsv = function (hcg) { return [hcg[0], f * 100, v * 100]; }; -convert.hcg.hsl = function (hcg) { +convert$H.hcg.hsl = function (hcg) { var c = hcg[1] / 100; var g = hcg[2] / 100; @@ -5574,14 +5635,14 @@ convert.hcg.hsl = function (hcg) { return [hcg[0], s * 100, l * 100]; }; -convert.hcg.hwb = function (hcg) { +convert$H.hcg.hwb = function (hcg) { var c = hcg[1] / 100; var g = hcg[2] / 100; var v = c + g * (1.0 - c); return [hcg[0], (v - c) * 100, (1 - v) * 100]; }; -convert.hwb.hcg = function (hwb) { +convert$H.hwb.hcg = function (hwb) { var w = hwb[1] / 100; var b = hwb[2] / 100; var v = 1 - b; @@ -5595,35 +5656,35 @@ convert.hwb.hcg = function (hwb) { return [hwb[0], c * 100, g * 100]; }; -convert.apple.rgb = function (apple) { +convert$H.apple.rgb = function (apple) { return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; }; -convert.rgb.apple = function (rgb) { +convert$H.rgb.apple = function (rgb) { return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; }; -convert.gray.rgb = function (args) { +convert$H.gray.rgb = function (args) { return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; }; -convert.gray.hsl = convert.gray.hsv = function (args) { +convert$H.gray.hsl = convert$H.gray.hsv = function (args) { return [0, 0, args[0]]; }; -convert.gray.hwb = function (gray) { +convert$H.gray.hwb = function (gray) { return [0, 100, gray[0]]; }; -convert.gray.cmyk = function (gray) { +convert$H.gray.cmyk = function (gray) { return [0, 0, 0, gray[0]]; }; -convert.gray.lab = function (gray) { +convert$H.gray.lab = function (gray) { return [gray[0], 0, 0]; }; -convert.gray.hex = function (gray) { +convert$H.gray.hex = function (gray) { var val = Math.round(gray[0] / 100 * 255) & 0xFF; var integer = (val << 16) + (val << 8) + val; @@ -5631,11 +5692,12 @@ convert.gray.hex = function (gray) { return '000000'.substring(string.length) + string; }; -convert.rgb.gray = function (rgb) { +convert$H.rgb.gray = function (rgb) { var val = (rgb[0] + rgb[1] + rgb[2]) / 3; return [val / 255 * 100]; }; -}); + +var conversions$4 = conversions$5.exports; /* this function routes a model to all other models. @@ -5648,10 +5710,10 @@ convert.rgb.gray = function (rgb) { conversions that are not possible simply are not included. */ -function buildGraph() { +function buildGraph$1() { var graph = {}; // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); + var models = Object.keys(conversions$4); for (var len = models.length, i = 0; i < len; i++) { graph[models[i]] = { @@ -5666,15 +5728,15 @@ function buildGraph() { } // https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); +function deriveBFS$1(fromModel) { + var graph = buildGraph$1(); var queue = [fromModel]; // unshift -> queue -> pop graph[fromModel].distance = 0; while (queue.length) { var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); + var adjacents = Object.keys(conversions$4[current]); for (var len = adjacents.length, i = 0; i < len; i++) { var adjacent = adjacents[i]; @@ -5691,20 +5753,20 @@ function deriveBFS(fromModel) { return graph; } -function link(from, to) { +function link$2(from, to) { return function (args) { return to(from(args)); }; } -function wrapConversion(toModel, graph) { +function wrapConversion$1(toModel, graph) { var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; + var fn = conversions$4[graph[toModel].parent][toModel]; var cur = graph[toModel].parent; while (graph[cur].parent) { path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); + fn = link$2(conversions$4[graph[cur].parent][cur], fn); cur = graph[cur].parent; } @@ -5712,8 +5774,8 @@ function wrapConversion(toModel, graph) { return fn; } -var route = function (fromModel) { - var graph = deriveBFS(fromModel); +var route$3 = function (fromModel) { + var graph = deriveBFS$1(fromModel); var conversion = {}; var models = Object.keys(graph); @@ -5726,17 +5788,20 @@ var route = function (fromModel) { continue; } - conversion[toModel] = wrapConversion(toModel, graph); + conversion[toModel] = wrapConversion$1(toModel, graph); } return conversion; }; -var convert = {}; +var conversions$3 = conversions$5.exports; +var route$2 = route$3; -var models = Object.keys(conversions); +var convert$G = {}; -function wrapRaw(fn) { +var models$4 = Object.keys(conversions$3); + +function wrapRaw$1(fn) { var wrappedFn = function (args) { if (args === undefined || args === null) { return args; @@ -5757,7 +5822,7 @@ function wrapRaw(fn) { return wrappedFn; } -function wrapRounded(fn) { +function wrapRounded$1(fn) { var wrappedFn = function (args) { if (args === undefined || args === null) { return args; @@ -5789,27 +5854,27 @@ function wrapRounded(fn) { return wrappedFn; } -models.forEach(function (fromModel) { - convert[fromModel] = {}; +models$4.forEach(function (fromModel) { + convert$G[fromModel] = {}; - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + Object.defineProperty(convert$G[fromModel], 'channels', {value: conversions$3[fromModel].channels}); + Object.defineProperty(convert$G[fromModel], 'labels', {value: conversions$3[fromModel].labels}); - var routes = route(fromModel); + var routes = route$2(fromModel); var routeModels = Object.keys(routes); routeModels.forEach(function (toModel) { var fn = routes[toModel]; - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); + convert$G[fromModel][toModel] = wrapRounded$1(fn); + convert$G[fromModel][toModel].raw = wrapRaw$1(fn); }); }); -var colorConvert = convert; - -var ansiStyles = createCommonjsModule(function (module) { +var colorConvert$1 = convert$G; +(function (module) { +const colorConvert = colorConvert$1; const wrapAnsi16 = (fn, offset) => function () { const code = fn.apply(colorConvert, arguments); @@ -5973,9 +6038,9 @@ Object.defineProperty(module, 'exports', { enumerable: true, get: assembleStyles }); -}); +}(ansiStyles$2)); -var hasFlag = (flag, argv) => { +var hasFlag$5 = (flag, argv) => { argv = argv || process.argv; const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); const pos = argv.indexOf(prefix + flag); @@ -5983,24 +6048,27 @@ var hasFlag = (flag, argv) => { return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; -const env = process.env; +const os$3 = require$$0__default$1['default']; +const hasFlag$4 = hasFlag$5; -let forceColor; -if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - forceColor = false; -} else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = true; +const env$2 = process.env; + +let forceColor$2; +if (hasFlag$4('no-color') || + hasFlag$4('no-colors') || + hasFlag$4('color=false')) { + forceColor$2 = false; +} else if (hasFlag$4('color') || + hasFlag$4('colors') || + hasFlag$4('color=true') || + hasFlag$4('color=always')) { + forceColor$2 = true; } -if ('FORCE_COLOR' in env) { - forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +if ('FORCE_COLOR' in env$2) { + forceColor$2 = env$2.FORCE_COLOR.length === 0 || parseInt(env$2.FORCE_COLOR, 10) !== 0; } -function translateLevel(level) { +function translateLevel$2(level) { if (level === 0) { return false; } @@ -6013,26 +6081,26 @@ function translateLevel(level) { }; } -function supportsColor(stream) { - if (forceColor === false) { +function supportsColor$2(stream) { + if (forceColor$2 === false) { return 0; } - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { + if (hasFlag$4('color=16m') || + hasFlag$4('color=full') || + hasFlag$4('color=truecolor')) { return 3; } - if (hasFlag('color=256')) { + if (hasFlag$4('color=256')) { return 2; } - if (stream && !stream.isTTY && forceColor !== true) { + if (stream && !stream.isTTY && forceColor$2 !== true) { return 0; } - const min = forceColor ? 1 : 0; + const min = forceColor$2 ? 1 : 0; if (process.platform === 'win32') { // Node.js 7.5.0 is the first version of Node.js to include a patch to @@ -6041,7 +6109,7 @@ function supportsColor(stream) { // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows // release that supports 256 colors. Windows 10 build 14931 is the first release // that supports 16m/TrueColor. - const osRelease = os__default['default'].release().split('.'); + const osRelease = os$3.release().split('.'); if ( Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && @@ -6053,26 +6121,26 @@ function supportsColor(stream) { return 1; } - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + if ('CI' in env$2) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env$2) || env$2.CI_NAME === 'codeship') { return 1; } return min; } - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + if ('TEAMCITY_VERSION' in env$2) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0; } - if (env.COLORTERM === 'truecolor') { + if (env$2.COLORTERM === 'truecolor') { return 3; } - if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + if ('TERM_PROGRAM' in env$2) { + const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - switch (env.TERM_PROGRAM) { + switch (env$2.TERM_PROGRAM) { case 'iTerm.app': return version >= 3 ? 3 : 2; case 'Apple_Terminal': @@ -6081,42 +6149,42 @@ function supportsColor(stream) { } } - if (/-256(color)?$/i.test(env.TERM)) { + if (/-256(color)?$/i.test(env$2.TERM)) { return 2; } - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) { return 1; } - if ('COLORTERM' in env) { + if ('COLORTERM' in env$2) { return 1; } - if (env.TERM === 'dumb') { + if (env$2.TERM === 'dumb') { return min; } return min; } -function getSupportLevel(stream) { - const level = supportsColor(stream); - return translateLevel(level); +function getSupportLevel$2(stream) { + const level = supportsColor$2(stream); + return translateLevel$2(level); } -var supportsColor_1 = { - supportsColor: getSupportLevel, - stdout: getSupportLevel(process.stdout), - stderr: getSupportLevel(process.stderr) +var supportsColor_1$2 = { + supportsColor: getSupportLevel$2, + stdout: getSupportLevel$2(process.stdout), + stderr: getSupportLevel$2(process.stderr) }; -const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; -const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; -const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; +const TEMPLATE_REGEX$1 = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX$1 = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX$1 = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX$1 = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; -const ESCAPES = new Map([ +const ESCAPES$1 = new Map([ ['n', '\n'], ['r', '\r'], ['t', '\t'], @@ -6129,15 +6197,15 @@ const ESCAPES = new Map([ ['a', '\u0007'] ]); -function unescape(c) { +function unescape$1(c) { if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { return String.fromCharCode(parseInt(c.slice(1), 16)); } - return ESCAPES.get(c) || c; + return ESCAPES$1.get(c) || c; } -function parseArguments(name, args) { +function parseArguments$1(name, args) { const results = []; const chunks = args.trim().split(/\s*,\s*/g); let matches; @@ -6145,8 +6213,8 @@ function parseArguments(name, args) { for (const chunk of chunks) { if (!isNaN(chunk)) { results.push(Number(chunk)); - } else if ((matches = chunk.match(STRING_REGEX))) { - results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); + } else if ((matches = chunk.match(STRING_REGEX$1))) { + results.push(matches[2].replace(ESCAPE_REGEX$1, (m, escape, chr) => escape ? unescape$1(escape) : chr)); } else { throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); } @@ -6155,17 +6223,17 @@ function parseArguments(name, args) { return results; } -function parseStyle(style) { - STYLE_REGEX.lastIndex = 0; +function parseStyle$1(style) { + STYLE_REGEX$1.lastIndex = 0; const results = []; let matches; - while ((matches = STYLE_REGEX.exec(style)) !== null) { + while ((matches = STYLE_REGEX$1.exec(style)) !== null) { const name = matches[1]; if (matches[2]) { - const args = parseArguments(name, matches[2]); + const args = parseArguments$1(name, matches[2]); results.push([name].concat(args)); } else { results.push([name]); @@ -6175,7 +6243,7 @@ function parseStyle(style) { return results; } -function buildStyle(chalk, styles) { +function buildStyle$1(chalk, styles) { const enabled = {}; for (const layer of styles) { @@ -6202,26 +6270,26 @@ function buildStyle(chalk, styles) { return current; } -var templates = (chalk, tmp) => { +var templates$1 = (chalk, tmp) => { const styles = []; const chunks = []; let chunk = []; // eslint-disable-next-line max-params - tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { + tmp.replace(TEMPLATE_REGEX$1, (m, escapeChar, inverse, style, close, chr) => { if (escapeChar) { - chunk.push(unescape(escapeChar)); + chunk.push(unescape$1(escapeChar)); } else if (style) { const str = chunk.join(''); chunk = []; - chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); - styles.push({inverse, styles: parseStyle(style)}); + chunks.push(styles.length === 0 ? str : buildStyle$1(chalk, styles)(str)); + styles.push({inverse, styles: parseStyle$1(style)}); } else if (close) { if (styles.length === 0) { throw new Error('Found extraneous } in Chalk template literal'); } - chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunks.push(buildStyle$1(chalk, styles)(chunk.join(''))); chunk = []; styles.pop(); } else { @@ -6239,12 +6307,12 @@ var templates = (chalk, tmp) => { return chunks.join(''); }; -var chalk = createCommonjsModule(function (module) { - - -const stdoutColor = supportsColor_1.stdout; - +(function (module) { +const escapeStringRegexp = escapeStringRegexp$3; +const ansiStyles = ansiStyles$2.exports; +const stdoutColor = supportsColor_1$2.stdout; +const template = templates$1; const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); @@ -6459,7 +6527,7 @@ function chalkTag(chalk, strings) { parts.push(String(strings.raw[i])); } - return templates(chalk, parts.join('')); + return template(chalk, parts.join('')); } Object.defineProperties(Chalk.prototype, styles); @@ -6467,29 +6535,28 @@ Object.defineProperties(Chalk.prototype, styles); module.exports = Chalk(); // eslint-disable-line new-cap module.exports.supportsColor = stdoutColor; module.exports.default = module.exports; // For TypeScript -}); - -var shouldHighlight_1 = shouldHighlight; -var getChalk_1 = getChalk; -var _default$1 = highlight; - -var _jsTokens = _interopRequireWildcard(jsTokens); - +}(chalk$2)); +Object.defineProperty(lib$8, "__esModule", { + value: true +}); +lib$8.shouldHighlight = shouldHighlight; +lib$8.getChalk = getChalk; +lib$8.default = highlight; -var _chalk = _interopRequireDefault(chalk); +var _jsTokens = jsTokens; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _helperValidatorIdentifier = lib$7; -function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } +var _chalk = chalk$2.exports; -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); -function getDefs(chalk) { +function getDefs$1(chalk) { return { keyword: chalk.cyan, capitalized: chalk.yellow, - jsx_tag: chalk.yellow, + jsxIdentifier: chalk.yellow, punctuator: chalk.yellow, number: chalk.magenta, string: chalk.green, @@ -6499,97 +6566,103 @@ function getDefs(chalk) { }; } -const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; -const JSX_TAG = /^[a-z][\w-]*$/i; +const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; const BRACKET = /^[()[\]{}]$/; +let tokenize$3; +{ + const JSX_TAG = /^[a-z][\w-]*$/i; -function getTokenType(match) { - const [offset, text] = match.slice(-2); - const token = (0, _jsTokens.matchToToken)(match); + const getTokenType = function (token, offset, text) { + if (token.type === "name") { + if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) { + return "keyword"; + } - if (token.type === "name") { - if ((0, lib.isKeyword)(token.value) || (0, lib.isReservedWord)(token.value)) { - return "keyword"; + if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == " colorize(str)).join("\n"); + highlighted += value.split(NEWLINE$1).map(str => colorize(str)).join("\n"); } else { - return args[0]; + highlighted += value; } - }); + } + + return highlighted; } function shouldHighlight(options) { - return _chalk.default.supportsColor || options.forceColor; + return !!_chalk.supportsColor || options.forceColor; } function getChalk(options) { - let chalk = _chalk.default; - - if (options.forceColor) { - chalk = new _chalk.default.constructor({ - enabled: true, - level: 1 - }); - } - - return chalk; + return options.forceColor ? new _chalk.constructor({ + enabled: true, + level: 1 + }) : _chalk; } function highlight(code, options = {}) { if (shouldHighlight(options)) { const chalk = getChalk(options); - const defs = getDefs(chalk); + const defs = getDefs$1(chalk); return highlightTokens(defs, code); } else { return code; } } -var lib$1 = /*#__PURE__*/Object.defineProperty({ - shouldHighlight: shouldHighlight_1, - getChalk: getChalk_1, - default: _default$1 -}, '__esModule', {value: true}); - -var codeFrameColumns_1 = codeFrameColumns; -var default_1 = _default$2; - -var _highlight = _interopRequireWildcard$1(lib$1); - -function _getRequireWildcardCache$1() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache$1 = function () { return cache; }; return cache; } +Object.defineProperty(lib$9, "__esModule", { + value: true +}); +lib$9.codeFrameColumns = codeFrameColumns$1; +lib$9.default = _default$1; -function _interopRequireWildcard$1(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache$1(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +var _highlight = lib$8; let deprecationWarningShown = false; -function getDefs$1(chalk) { +function getDefs(chalk) { return { gutter: chalk.grey, marker: chalk.red.bold, @@ -6597,7 +6670,7 @@ function getDefs$1(chalk) { }; } -const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; function getMarkerLines(loc, source, opts) { const startLoc = Object.assign({ @@ -6662,16 +6735,16 @@ function getMarkerLines(loc, source, opts) { }; } -function codeFrameColumns(rawLines, loc, opts = {}) { +function codeFrameColumns$1(rawLines, loc, opts = {}) { const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts); const chalk = (0, _highlight.getChalk)(opts); - const defs = getDefs$1(chalk); + const defs = getDefs(chalk); const maybeHighlight = (chalkFn, string) => { return highlighted ? chalkFn(string) : string; }; - const lines = rawLines.split(NEWLINE$1); + const lines = rawLines.split(NEWLINE); const { start, end, @@ -6680,10 +6753,10 @@ function codeFrameColumns(rawLines, loc, opts = {}) { const hasColumns = loc.start && typeof loc.start.column === "number"; const numberMaxWidth = String(end).length; const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines; - let frame = highlightedLines.split(NEWLINE$1).slice(start, end).map((line, index) => { + let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => { const number = start + 1 + index; const paddedNumber = ` ${number}`.slice(-numberMaxWidth); - const gutter = ` ${paddedNumber} | `; + const gutter = ` ${paddedNumber} |`; const hasMarker = markerLines[number]; const lastMarkerLine = !markerLines[number + 1]; @@ -6693,16 +6766,16 @@ function codeFrameColumns(rawLines, loc, opts = {}) { if (Array.isArray(hasMarker)) { const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); const numberOfMarkers = hasMarker[1] || 1; - markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); + markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); if (lastMarkerLine && opts.message) { markerLine += " " + maybeHighlight(defs.message, opts.message); } } - return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line, markerLine].join(""); + return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); } else { - return ` ${maybeHighlight(defs.gutter, gutter)}${line}`; + return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`; } }).join("\n"); @@ -6717,7 +6790,7 @@ function codeFrameColumns(rawLines, loc, opts = {}) { } } -function _default$2(rawLines, lineNumber, colNumber, opts = {}) { +function _default$1(rawLines, lineNumber, colNumber, opts = {}) { if (!deprecationWarningShown) { deprecationWarningShown = true; const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; @@ -6738,25 +6811,20 @@ function _default$2(rawLines, lineNumber, colNumber, opts = {}) { line: lineNumber } }; - return codeFrameColumns(rawLines, location, opts); + return codeFrameColumns$1(rawLines, location, opts); } -var lib$2 = /*#__PURE__*/Object.defineProperty({ - codeFrameColumns: codeFrameColumns_1, - default: default_1 -}, '__esModule', {value: true}); - -var require$$0 = /*@__PURE__*/getAugmentedNamespace(dist); - -const {default: LinesAndColumns$1} = require$$0; -const {codeFrameColumns: codeFrameColumns$1} = lib$2; +const errorEx = errorEx_1; +const fallback = jsonParseEvenBetterErrors; +const {default: LinesAndColumns} = require$$2; +const {codeFrameColumns} = lib$9; -const JSONError = errorEx_1('JSONError', { - fileName: errorEx_1.append('in %s'), - codeFrame: errorEx_1.append('\n\n%s\n') +const JSONError = errorEx('JSONError', { + fileName: errorEx.append('in %s'), + codeFrame: errorEx.append('\n\n%s\n') }); -var parseJson$1 = (string, reviver, filename) => { +const parseJson = (string, reviver, filename) => { if (typeof reviver === 'string') { filename = reviver; reviver = null; @@ -6766,7 +6834,7 @@ var parseJson$1 = (string, reviver, filename) => { try { return JSON.parse(string, reviver); } catch (error) { - jsonParseEvenBetterErrors(string, reviver); + fallback(string, reviver); throw error; } } catch (error) { @@ -6779,11 +6847,11 @@ var parseJson$1 = (string, reviver, filename) => { } if (indexMatch && indexMatch.length > 0) { - const lines = new LinesAndColumns$1(string); + const lines = new LinesAndColumns(string); const index = Number(indexMatch[1]); const location = lines.locationForIndex(index); - const codeFrame = codeFrameColumns$1( + const codeFrame = codeFrameColumns( string, {start: {line: location.line + 1, column: location.column + 1}}, {highlightCode: true} @@ -6796,9 +6864,18 @@ var parseJson$1 = (string, reviver, filename) => { } }; +parseJson.JSONError = JSONError; + +var parseJson_1 = parseJson; + +var src = {exports: {}}; + +var browser = {exports: {}}; + /** * Helpers. */ + var s = 1000; var m = s * 60; var h = m * 60; @@ -6824,7 +6901,7 @@ var ms = function(val, options) { options = options || {}; var type = typeof val; if (type === 'string' && val.length > 0) { - return parse$1(val); + return parse$c(val); } else if (type === 'number' && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } @@ -6842,7 +6919,7 @@ var ms = function(val, options) { * @api private */ -function parse$1(str) { +function parse$c(str) { str = String(str); if (str.length > 100) { return; @@ -6935,16 +7012,16 @@ function fmtShort(ms) { function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); + return plural$1(ms, msAbs, d, 'day'); } if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); + return plural$1(ms, msAbs, h, 'hour'); } if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); + return plural$1(ms, msAbs, m, 'minute'); } if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); + return plural$1(ms, msAbs, s, 'second'); } return ms + ' ms'; } @@ -6953,7 +7030,7 @@ function fmtLong(ms) { * Pluralization helper. */ -function plural(ms, msAbs, n, name) { +function plural$1(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } @@ -7019,6 +7096,8 @@ function setup(env) { function createDebug(namespace) { let prevTime; let enableOverride = null; + let namespacesCache; + let enabledCache; function debug(...args) { // Disabled? @@ -7079,7 +7158,17 @@ function setup(env) { Object.defineProperty(debug, 'enabled', { enumerable: true, configurable: false, - get: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, set: v => { enableOverride = v; } @@ -7108,6 +7197,7 @@ function setup(env) { */ function enable(namespaces) { createDebug.save(namespaces); + createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; @@ -7217,11 +7307,11 @@ function setup(env) { return createDebug; } -var common$1 = setup; +var common$4 = setup; /* eslint-env browser */ -var browser = createCommonjsModule(function (module, exports) { +(function (module, exports) { /** * This is the web browser implementation of `debug()`. */ @@ -7474,7 +7564,7 @@ function localstorage() { } } -module.exports = common$1(exports); +module.exports = common$4(exports); const {formatters} = module.exports; @@ -7489,27 +7579,33 @@ formatters.j = function (v) { return '[UnexpectedJSONParseError]: ' + error.message; } }; -}); +}(browser, browser.exports)); -var hasFlag$1 = (flag, argv = process.argv) => { +var node = {exports: {}}; + +var hasFlag$3 = (flag, argv = process.argv) => { const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); const position = argv.indexOf(prefix + flag); const terminatorPosition = argv.indexOf('--'); return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); }; +const os$2 = require$$0__default$1['default']; +const tty = require$$1__default['default']; +const hasFlag$2 = hasFlag$3; + const {env: env$1} = process; let forceColor$1; -if (hasFlag$1('no-color') || - hasFlag$1('no-colors') || - hasFlag$1('color=false') || - hasFlag$1('color=never')) { +if (hasFlag$2('no-color') || + hasFlag$2('no-colors') || + hasFlag$2('color=false') || + hasFlag$2('color=never')) { forceColor$1 = 0; -} else if (hasFlag$1('color') || - hasFlag$1('colors') || - hasFlag$1('color=true') || - hasFlag$1('color=always')) { +} else if (hasFlag$2('color') || + hasFlag$2('colors') || + hasFlag$2('color=true') || + hasFlag$2('color=always')) { forceColor$1 = 1; } @@ -7541,13 +7637,13 @@ function supportsColor$1(haveStream, streamIsTTY) { return 0; } - if (hasFlag$1('color=16m') || - hasFlag$1('color=full') || - hasFlag$1('color=truecolor')) { + if (hasFlag$2('color=16m') || + hasFlag$2('color=full') || + hasFlag$2('color=truecolor')) { return 3; } - if (hasFlag$1('color=256')) { + if (hasFlag$2('color=256')) { return 2; } @@ -7564,7 +7660,7 @@ function supportsColor$1(haveStream, streamIsTTY) { if (process.platform === 'win32') { // Windows 10 build 10586 is the first Windows release that supports 256 colors. // Windows 10 build 14931 is the first release that supports 16m/TrueColor. - const osRelease = os__default['default'].release().split('.'); + const osRelease = os$2.release().split('.'); if ( Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586 @@ -7625,15 +7721,18 @@ function getSupportLevel$1(stream) { var supportsColor_1$1 = { supportsColor: getSupportLevel$1, - stdout: translateLevel$1(supportsColor$1(true, tty__default['default'].isatty(1))), - stderr: translateLevel$1(supportsColor$1(true, tty__default['default'].isatty(2))) + stdout: translateLevel$1(supportsColor$1(true, tty.isatty(1))), + stderr: translateLevel$1(supportsColor$1(true, tty.isatty(2))) }; /** * Module dependencies. */ -var node = createCommonjsModule(function (module, exports) { +(function (module, exports) { +const tty = require$$1__default['default']; +const util = require$$0__default['default']; + /** * This is the Node.js implementation of `debug()`. */ @@ -7644,7 +7743,7 @@ exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; -exports.destroy = util__default['default'].deprecate( +exports.destroy = util.deprecate( () => {}, 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' ); @@ -7784,7 +7883,7 @@ exports.inspectOpts = Object.keys(process.env).filter(key => { function useColors() { return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : - tty__default['default'].isatty(process.stderr.fd); + tty.isatty(process.stderr.fd); } /** @@ -7820,7 +7919,7 @@ function getDate() { */ function log(...args) { - return process.stderr.write(util__default['default'].format(...args) + '\n'); + return process.stderr.write(util.format(...args) + '\n'); } /** @@ -7866,7 +7965,7 @@ function init(debug) { } } -module.exports = common$1(exports); +module.exports = common$4(exports); const {formatters} = module.exports; @@ -7876,7 +7975,7 @@ const {formatters} = module.exports; formatters.o = function (v) { this.inspectOpts.colors = this.useColors; - return util__default['default'].inspect(v, this.inspectOpts) + return util.inspect(v, this.inspectOpts) .split('\n') .map(str => str.trim()) .join(' '); @@ -7888,22 +7987,26 @@ formatters.o = function (v) { formatters.O = function (v) { this.inspectOpts.colors = this.useColors; - return util__default['default'].inspect(v, this.inspectOpts); + return util.inspect(v, this.inspectOpts); }; -}); +}(node, node.exports)); /** * Detect Electron renderer / nwjs process, which is node, but we should * treat as a browser. */ -var src = createCommonjsModule(function (module) { if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = browser; + src.exports = browser.exports; } else { - module.exports = node; + src.exports = node.exports; } -}); + +var resolveFrom$1 = {exports: {}}; + +const path$l = require$$0__default$2['default']; +const Module = require$$1__default$1['default']; +const fs$j = require$$0__default$3['default']; const resolveFrom = (fromDirectory, moduleId, silent) => { if (typeof fromDirectory !== 'string') { @@ -7915,10 +8018,10 @@ const resolveFrom = (fromDirectory, moduleId, silent) => { } try { - fromDirectory = fs__default['default'].realpathSync(fromDirectory); + fromDirectory = fs$j.realpathSync(fromDirectory); } catch (error) { if (error.code === 'ENOENT') { - fromDirectory = path__default['default'].resolve(fromDirectory); + fromDirectory = path$l.resolve(fromDirectory); } else if (silent) { return; } else { @@ -7926,12 +8029,12 @@ const resolveFrom = (fromDirectory, moduleId, silent) => { } } - const fromFile = path__default['default'].join(fromDirectory, 'noop.js'); + const fromFile = path$l.join(fromDirectory, 'noop.js'); - const resolveFileName = () => Module__default['default']._resolveFilename(moduleId, { + const resolveFileName = () => Module._resolveFilename(moduleId, { id: fromFile, filename: fromFile, - paths: Module__default['default']._nodeModulePaths(fromDirectory) + paths: Module._nodeModulePaths(fromDirectory) }); if (silent) { @@ -7945,9 +8048,10 @@ const resolveFrom = (fromDirectory, moduleId, silent) => { return resolveFileName(); }; -var resolveFrom_1 = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId); -var silent = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId, true); -resolveFrom_1.silent = silent; +resolveFrom$1.exports = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId); +resolveFrom$1.exports.silent = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId, true); + +var libnpmconfig = {}; class FiggyPudding { constructor (specs, opts, providers) { @@ -8030,7 +8134,7 @@ class FiggyPudding { } } try { - const util = util__default['default']; + const util = require$$0__default['default']; FiggyPudding.prototype[util.inspect.custom] = function (depth, opts) { return ( this[Symbol.toStringTag] + ' ' @@ -8123,8 +8227,8 @@ const proxyHandler = { } }; -var figgyPudding_1 = figgyPudding; -function figgyPudding (specs, opts) { +var figgyPudding_1 = figgyPudding$1; +function figgyPudding$1 (specs, opts) { function factory (...providers) { return new Proxy(new FiggyPudding( specs, @@ -8145,32 +8249,44 @@ function entries (obj) { return Object.keys(obj).map(k => [k, obj[k]]) } -var pathExists = fp => new Promise(resolve => { - fs__default['default'].access(fp, err => { +var findUp$2 = {exports: {}}; + +var locatePath$1 = {exports: {}}; + +var pathExists$1 = {exports: {}}; + +const fs$i = require$$0__default$3['default']; + +pathExists$1.exports = fp => new Promise(resolve => { + fs$i.access(fp, err => { resolve(!err); }); }); -var sync = fp => { +pathExists$1.exports.sync = fp => { try { - fs__default['default'].accessSync(fp); + fs$i.accessSync(fp); return true; } catch (err) { return false; } }; -pathExists.sync = sync; -const pTry = (fn, ...arguments_) => new Promise(resolve => { +var pLimit$2 = {exports: {}}; + +var pTry$2 = {exports: {}}; + +const pTry$1 = (fn, ...arguments_) => new Promise(resolve => { resolve(fn(...arguments_)); }); -var pTry_1 = pTry; +pTry$2.exports = pTry$1; // TODO: remove this in the next major version -var _default$3 = pTry; -pTry_1.default = _default$3; +pTry$2.exports.default = pTry$1; + +const pTry = pTry$2.exports; -const pLimit = concurrency => { +const pLimit$1 = concurrency => { if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up')); } @@ -8189,7 +8305,7 @@ const pLimit = concurrency => { const run = (fn, resolve, ...args) => { activeCount++; - const result = pTry_1(fn, ...args); + const result = pTry(fn, ...args); resolve(result); @@ -8222,9 +8338,10 @@ const pLimit = concurrency => { return generator; }; -var pLimit_1 = pLimit; -var _default$4 = pLimit; -pLimit_1.default = _default$4; +pLimit$2.exports = pLimit$1; +pLimit$2.exports.default = pLimit$1; + +const pLimit = pLimit$2.exports; class EndError extends Error { constructor(value) { @@ -8237,51 +8354,57 @@ class EndError extends Error { const testElement = (el, tester) => Promise.resolve(el).then(tester); // The input can also be a promise, so we `Promise.all()` them both -const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); +const finder$1 = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); -var pLocate = (iterable, tester, opts) => { +var pLocate$1 = (iterable, tester, opts) => { opts = Object.assign({ concurrency: Infinity, preserveOrder: true }, opts); - const limit = pLimit_1(opts.concurrency); + const limit = pLimit(opts.concurrency); // Start all the promises concurrently with optional limit const items = [...iterable].map(el => [el, limit(testElement, el, tester)]); // Check the promises either serially or concurrently - const checkLimit = pLimit_1(opts.preserveOrder ? 1 : Infinity); + const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity); - return Promise.all(items.map(el => checkLimit(finder, el))) + return Promise.all(items.map(el => checkLimit(finder$1, el))) .then(() => {}) .catch(err => err instanceof EndError ? err.value : Promise.reject(err)); }; -var locatePath = (iterable, options) => { +const path$k = require$$0__default$2['default']; +const pathExists = pathExists$1.exports; +const pLocate = pLocate$1; + +locatePath$1.exports = (iterable, options) => { options = Object.assign({ cwd: process.cwd() }, options); - return pLocate(iterable, el => pathExists(path__default['default'].resolve(options.cwd, el)), options); + return pLocate(iterable, el => pathExists(path$k.resolve(options.cwd, el)), options); }; -var sync$1 = (iterable, options) => { +locatePath$1.exports.sync = (iterable, options) => { options = Object.assign({ cwd: process.cwd() }, options); for (const el of iterable) { - if (pathExists.sync(path__default['default'].resolve(options.cwd, el))) { + if (pathExists.sync(path$k.resolve(options.cwd, el))) { return el; } } }; -locatePath.sync = sync$1; -var findUp = (filename, opts = {}) => { - const startDir = path__default['default'].resolve(opts.cwd || ''); - const {root} = path__default['default'].parse(startDir); +const path$j = require$$0__default$2['default']; +const locatePath = locatePath$1.exports; + +findUp$2.exports = (filename, opts = {}) => { + const startDir = path$j.resolve(opts.cwd || ''); + const {root} = path$j.parse(startDir); const filenames = [].concat(filename); @@ -8289,20 +8412,20 @@ var findUp = (filename, opts = {}) => { (function find(dir) { locatePath(filenames, {cwd: dir}).then(file => { if (file) { - resolve(path__default['default'].join(dir, file)); + resolve(path$j.join(dir, file)); } else if (dir === root) { resolve(null); } else { - find(path__default['default'].dirname(dir)); + find(path$j.dirname(dir)); } }); })(startDir); }); }; -var sync$2 = (filename, opts = {}) => { - let dir = path__default['default'].resolve(opts.cwd || ''); - const {root} = path__default['default'].parse(dir); +findUp$2.exports.sync = (filename, opts = {}) => { + let dir = path$j.resolve(opts.cwd || ''); + const {root} = path$j.parse(dir); const filenames = [].concat(filename); @@ -8311,30 +8434,30 @@ var sync$2 = (filename, opts = {}) => { const file = locatePath.sync(filenames, {cwd: dir}); if (file) { - return path__default['default'].join(dir, file); + return path$j.join(dir, file); } if (dir === root) { return null; } - dir = path__default['default'].dirname(dir); + dir = path$j.dirname(dir); } }; -findUp.sync = sync$2; -var ini = createCommonjsModule(function (module, exports) { -exports.parse = exports.decode = decode; +var ini$1 = {}; + +ini$1.parse = ini$1.decode = decode$2; -exports.stringify = exports.encode = encode; +ini$1.stringify = ini$1.encode = encode$1; -exports.safe = safe; -exports.unsafe = unsafe; +ini$1.safe = safe$8; +ini$1.unsafe = unsafe$1; -var eol = typeof process !== 'undefined' && +var eol$2 = typeof process !== 'undefined' && process.platform === 'win32' ? '\r\n' : '\n'; -function encode (obj, opt) { +function encode$1 (obj, opt) { var children = []; var out = ''; @@ -8354,26 +8477,26 @@ function encode (obj, opt) { var val = obj[k]; if (val && Array.isArray(val)) { val.forEach(function (item) { - out += safe(k + '[]') + separator + safe(item) + '\n'; + out += safe$8(k + '[]') + separator + safe$8(item) + '\n'; }); } else if (val && typeof val === 'object') children.push(k); else - out += safe(k) + separator + safe(val) + eol; + out += safe$8(k) + separator + safe$8(val) + eol$2; }); if (opt.section && out.length) - out = '[' + safe(opt.section) + ']' + eol + out; + out = '[' + safe$8(opt.section) + ']' + eol$2 + out; children.forEach(function (k, _, __) { var nk = dotSplit(k).join('\\.'); var section = (opt.section ? opt.section + '.' : '') + nk; - var child = encode(obj[k], { + var child = encode$1(obj[k], { section: section, whitespace: opt.whitespace, }); if (out.length && child.length) - out += eol; + out += eol$2; out += child; }); @@ -8390,7 +8513,7 @@ function dotSplit (str) { }) } -function decode (str) { +function decode$2 (str) { var out = {}; var p = out; var section = null; @@ -8405,7 +8528,7 @@ function decode (str) { if (!match) return if (match[1] !== undefined) { - section = unsafe(match[1]); + section = unsafe$1(match[1]); if (section === '__proto__') { // not allowed // keep parsing the section, but don't attach it. @@ -8415,10 +8538,10 @@ function decode (str) { p = out[section] = out[section] || {}; return } - var key = unsafe(match[2]); + var key = unsafe$1(match[2]); if (key === '__proto__') return - var value = match[3] ? unsafe(match[4]) : true; + var value = match[3] ? unsafe$1(match[4]) : true; switch (value) { case 'true': case 'false': @@ -8482,7 +8605,7 @@ function isQuoted (val) { (val.charAt(0) === "'" && val.slice(-1) === "'") } -function safe (val) { +function safe$8 (val) { return (typeof val !== 'string' || val.match(/[=\r\n]/) || val.match(/^\[/) || @@ -8493,7 +8616,7 @@ function safe (val) { : val.replace(/;/g, '\\;').replace(/#/g, '\\#') } -function unsafe (val, doUnesc) { +function unsafe$1 (val, doUnesc) { val = (val || '').trim(); if (isQuoted(val)) { // remove the single quotes before calling JSON.parse @@ -8530,25 +8653,31 @@ function unsafe (val, doUnesc) { } return val } -}); -const NpmConfig = figgyPudding_1({}, { +const fs$h = require$$0__default$3['default']; +const figgyPudding = figgyPudding_1; +const findUp$1 = findUp$2.exports; +const ini = ini$1; +const os$1 = require$$0__default$1['default']; +const path$i = require$$0__default$2['default']; + +const NpmConfig = figgyPudding({}, { // Open up the pudding object. other () { return true } }); -const ConfigOpts = figgyPudding_1({ - cache: { default: path__default['default'].join(os__default['default'].homedir(), '.npm') }, +const ConfigOpts = figgyPudding({ + cache: { default: path$i.join(os$1.homedir(), '.npm') }, configNames: { default: ['npmrc', '.npmrc'] }, envPrefix: { default: /^npm_config_/i }, cwd: { default: () => process.cwd() }, globalconfig: { - default: () => path__default['default'].join(getGlobalPrefix(), 'etc', 'npmrc') + default: () => path$i.join(getGlobalPrefix(), 'etc', 'npmrc') }, - userconfig: { default: path__default['default'].join(os__default['default'].homedir(), '.npmrc') } + userconfig: { default: path$i.join(os$1.homedir(), '.npmrc') } }); -var read = getNpmConfig; +libnpmconfig.read = getNpmConfig; function getNpmConfig (_opts, _builtin) { const builtin = ConfigOpts(_builtin); const env = {}; @@ -8572,7 +8701,7 @@ function getNpmConfig (_opts, _builtin) { env.globalconfig ); const global = globalConfPath && maybeReadIni(globalConfPath); - const projConfPath = findUp.sync(builtin.configNames, { cwd: builtin.cwd }); + const projConfPath = findUp$1.sync(builtin.configNames, { cwd: builtin.cwd }); let proj = {}; if (projConfPath && projConfPath !== userConfPath) { proj = maybeReadIni(projConfPath); @@ -8580,17 +8709,17 @@ function getNpmConfig (_opts, _builtin) { const newOpts = NpmConfig(builtin, global, user, proj, env, cli); if (newOpts.cache) { return newOpts.concat({ - cache: path__default['default'].resolve( + cache: path$i.resolve( ( (cli.cache || env.cache) ? builtin.cwd : proj.cache - ? path__default['default'].dirname(projConfPath) + ? path$i.dirname(projConfPath) : user.cache - ? path__default['default'].dirname(userConfPath) + ? path$i.dirname(userConfPath) : global.cache - ? path__default['default'].dirname(globalConfPath) - : path__default['default'].dirname(userConfPath) + ? path$i.dirname(globalConfPath) + : path$i.dirname(userConfPath) ), newOpts.cache ) @@ -8603,7 +8732,7 @@ function getNpmConfig (_opts, _builtin) { function maybeReadIni (f) { let txt; try { - txt = fs__default['default'].readFileSync(f, 'utf8'); + txt = fs$h.readFileSync(f, 'utf8'); } catch (err) { if (err.code === 'ENOENT') { return '' @@ -8619,27 +8748,25 @@ function getGlobalPrefix () { return process.env.PREFIX } else if (process.platform === 'win32') { // c:\node\node.exe --> prefix=c:\node\ - return path__default['default'].dirname(process.execPath) + return path$i.dirname(process.execPath) } else { // /usr/local/bin/node --> prefix=/usr/local - let pref = path__default['default'].dirname(path__default['default'].dirname(process.execPath)); + let pref = path$i.dirname(path$i.dirname(process.execPath)); // destdir only is respected on Unix if (process.env.DESTDIR) { - pref = path__default['default'].join(process.env.DESTDIR, pref); + pref = path$i.join(process.env.DESTDIR, pref); } return pref } } -var libnpmconfig = { - read: read -}; - -var resolve = resolveFrom_1.silent; +var fs$g = require$$0__default$3['default']; +var path$h = require$$0__default$2['default']; +var resolve = resolveFrom$1.exports.silent; var readNpmConfig = libnpmconfig.read; -var loadPlugin_1 = loadPlugin; -loadPlugin.resolve = resolvePlugin; +var loadPlugin_1 = loadPlugin$1; +loadPlugin$1.resolve = resolvePlugin; var electron = process.versions.electron !== undefined; var windows = process.platform === 'win32'; @@ -8658,7 +8785,7 @@ var builtinNpmConfig; // pass to `libnpmconfig` explicitly: /* istanbul ignore next */ if (windows && appData) { - builtinNpmConfig = {prefix: path__default['default'].join(appData, 'npm')}; + builtinNpmConfig = {prefix: path$h.join(appData, 'npm')}; } var npmPrefix = readNpmConfig(null, builtinNpmConfig).prefix; @@ -8668,12 +8795,12 @@ var npmPrefix = readNpmConfig(null, builtinNpmConfig).prefix; /* istanbul ignore next */ if (!npmPrefix) { npmPrefix = windows - ? path__default['default'].dirname(process.execPath) - : path__default['default'].resolve(process.execPath, '../..'); + ? path$h.dirname(process.execPath) + : path$h.resolve(process.execPath, '../..'); } var globally = electron || argv.indexOf(npmPrefix) === 0; -var globals = path__default['default'].resolve(npmPrefix, globalsLibrary, 'node_modules'); +var globals = path$h.resolve(npmPrefix, globalsLibrary, 'node_modules'); // If we’re in Electron, we’re running in a modified Node that cannot really // install global node modules. @@ -8684,12 +8811,12 @@ var globals = path__default['default'].resolve(npmPrefix, globalsLibrary, 'node_ // Luckily NVM leaks some environment variables that we can pick up on to try // and detect the actual modules. /* istanbul ignore next */ -if (electron && nvm && !fs__default['default'].existsSync(globals)) { - globals = path__default['default'].resolve(nvm, '..', globalsLibrary, 'node_modules'); +if (electron && nvm && !fs$g.existsSync(globals)) { + globals = path$h.resolve(nvm, '..', globalsLibrary, 'node_modules'); } // Load the plugin found using `resolvePlugin`. -function loadPlugin(name, options) { +function loadPlugin$1(name, options) { return commonjsRequire(resolvePlugin(name, options) || name) } @@ -8773,7 +8900,7 @@ function resolvePlugin(name, options) { return null } -var isPlainObj = value => { +var isPlainObj$1 = value => { if (Object.prototype.toString.call(value) !== '[object Object]') { return false; } @@ -8782,7 +8909,9 @@ var isPlainObj = value => { return prototype === null || prototype === Object.prototype; }; -var format = createCommonjsModule(function (module) { +var format$1 = {exports: {}}; + +(function (module) { (function() { //// Export the API @@ -8894,51 +9023,50 @@ var format = createCommonjsModule(function (module) { } }()); -}); +}(format$1)); + +var formatter = format$1.exports; -var fault = create(Error); +var fault$3 = create$2(Error); -var fault_1 = fault; +var fault_1 = fault$3; -fault.eval = create(EvalError); -fault.range = create(RangeError); -fault.reference = create(ReferenceError); -fault.syntax = create(SyntaxError); -fault.type = create(TypeError); -fault.uri = create(URIError); +fault$3.eval = create$2(EvalError); +fault$3.range = create$2(RangeError); +fault$3.reference = create$2(ReferenceError); +fault$3.syntax = create$2(SyntaxError); +fault$3.type = create$2(TypeError); +fault$3.uri = create$2(URIError); -fault.create = create; +fault$3.create = create$2; // Create a new `EConstructor`, with the formatted `format` as a first argument. -function create(EConstructor) { +function create$2(EConstructor) { FormattedError.displayName = EConstructor.displayName || EConstructor.name; return FormattedError - function FormattedError(format$1) { - if (format$1) { - format$1 = format.apply(null, arguments); + function FormattedError(format) { + if (format) { + format = formatter.apply(null, arguments); } - return new EConstructor(format$1) + return new EConstructor(format) } } -var debug = src('unified-engine:find-up'); +var fs$f = require$$0__default$3['default']; +var path$g = require$$0__default$2['default']; +var fault$2 = fault_1; +var debug$d = src.exports('unified-engine:find-up'); +var wrap$3 = wrap_1$1; -var findUp$1 = FindUp; +var findUp = FindUp$2; -var read$1 = fs__default['default'].readFile; -var resolve$1 = path__default['default'].resolve; -var relative = path__default['default'].relative; -var join = path__default['default'].join; -var dirname = path__default['default'].dirname; +FindUp$2.prototype.load = load$4; -FindUp.prototype.load = load$2; - -function FindUp(options) { +function FindUp$2(options) { var self = this; - var fp = options.filePath; self.cache = {}; self.cwd = options.cwd; @@ -8946,29 +9074,24 @@ function FindUp(options) { self.names = options.names; self.create = options.create; - if (fp) { - self.givenFilePath = resolve$1(options.cwd, fp); + if (options.filePath) { + self.givenFilePath = path$g.resolve(options.cwd, options.filePath); } } -function load$2(filePath, callback) { +function load$4(filePath, callback) { var self = this; - var cache = self.cache; - var givenFilePath = self.givenFilePath; var givenFile = self.givenFile; - var names = self.names; - var create = self.create; - var cwd = self.cwd; var parent; - if (givenFilePath) { + if (self.givenFilePath) { if (givenFile) { apply(callback, givenFile); } else { givenFile = [callback]; self.givenFile = givenFile; - debug('Checking given file `%s`', givenFilePath); - read$1(givenFilePath, loadGiven); + debug$d('Checking given file `%s`', self.givenFilePath); + fs$f.readFile(self.givenFilePath, loadGiven); } return @@ -8978,13 +9101,13 @@ function load$2(filePath, callback) { return callback() } - filePath = resolve$1(cwd, filePath); - parent = dirname(filePath); + filePath = path$g.resolve(self.cwd, filePath); + parent = path$g.dirname(filePath); - if (parent in cache) { - apply(callback, cache[parent]); + if (parent in self.cache) { + apply(callback, self.cache[parent]); } else { - cache[parent] = [callback]; + self.cache[parent] = [callback]; find(parent); } @@ -8993,36 +9116,44 @@ function load$2(filePath, callback) { var result; if (error) { - result = fault_1( + result = fault$2( 'Cannot read given file `%s`\n%s', - relative(cwd, givenFilePath), + path$g.relative(self.cwd, self.givenFilePath), error.stack ); result.code = 'ENOENT'; result.path = error.path; result.syscall = error.syscall; + loaded(result); } else { - try { - result = create(buf, givenFilePath); - debug('Read given file `%s`', givenFilePath); - } catch (error_) { - result = fault_1( - 'Cannot parse given file `%s`\n%s', - relative(cwd, givenFilePath), - error_.stack + wrap$3(self.create, onparse)(buf, self.givenFilePath); + } + + function onparse(error, result) { + if (error) { + debug$d(error.message); + loaded( + fault$2( + 'Cannot parse given file `%s`\n%s', + path$g.relative(self.cwd, self.givenFilePath), + error.stack + ) ); - debug(error_.message); + } else { + debug$d('Read given file `%s`', self.givenFilePath); + loaded(result); } } - givenFile = result; - self.givenFile = result; - applyAll(cbs, result); + function loaded(result) { + givenFile = result; + self.givenFile = result; + applyAll(cbs, result); + } } function find(directory) { var index = -1; - var length = names.length; next(); @@ -9032,27 +9163,25 @@ function load$2(filePath, callback) { // Try to read the next file. // We do not use `readdir` because on huge directories, that could be // *very* slow. - if (++index < length) { - read$1(join(directory, names[index]), done); + if (++index < self.names.length) { + fs$f.readFile(path$g.join(directory, self.names[index]), done); } else { - parent = dirname(directory); + parent = path$g.dirname(directory); if (directory === parent) { - debug('No files found for `%s`', filePath); + debug$d('No files found for `%s`', filePath); found(); - } else if (parent in cache) { - apply(found, cache[parent]); + } else if (parent in self.cache) { + apply(found, self.cache[parent]); } else { - cache[parent] = [found]; + self.cache[parent] = [found]; find(parent); } } } function done(error, buf) { - var name = names[index]; - var fp = join(directory, name); - var contents; + var fp = path$g.join(directory, self.names[index]); /* istanbul ignore if - Hard to test. */ if (error) { @@ -9060,35 +9189,39 @@ function load$2(filePath, callback) { return next() } - error = fault_1( - 'Cannot read file `%s`\n%s', - relative(cwd, fp), - error.message - ); - debug(error.message); - return found(error) - } - - try { - contents = create(buf, fp); - } catch (error_) { + debug$d(error.message); return found( - fault_1('Cannot parse file `%s`\n%s', relative(cwd, fp), error_.message) + fault$2( + 'Cannot read file `%s`\n%s', + path$g.relative(self.cwd, fp), + error.message + ) ) } - /* istanbul ignore else - maybe used in the future. */ - if (contents) { - debug('Read file `%s`', fp); - found(null, contents); - } else { - next(); + wrap$3(self.create, onparse)(buf, fp); + + function onparse(error, result) { + if (error) { + found( + fault$2( + 'Cannot parse file `%s`\n%s', + path$g.relative(self.cwd, fp), + error.message + ) + ); + } else if (result) { + debug$d('Read file `%s`', fp); + found(null, result); + } else { + next(); + } } } function found(error, result) { - var cbs = cache[directory]; - cache[directory] = error || result; + var cbs = self.cache[directory]; + self.cache[directory] = error || result; applyAll(cbs, error || result); } } @@ -9116,40 +9249,33 @@ function load$2(filePath, callback) { } } -var configuration = createCommonjsModule(function (module) { - - - - - -var debug = src('unified-engine:configuration'); -var resolve = loadPlugin_1.resolve; - - +var path$f = require$$0__default$2['default']; +var yaml = jsYaml$1; +var json$2 = parseJson_1; +var debug$c = src.exports('unified-engine:configuration'); +var loadPlugin = loadPlugin_1; +var plain$1 = isPlainObj$1; +var fault$1 = fault_1; +var FindUp$1 = findUp; +var configuration = Config; -module.exports = Config; - -var own = {}.hasOwnProperty; -var extname = path__default['default'].extname; -var basename = path__default['default'].basename; -var dirname = path__default['default'].dirname; -var relative = path__default['default'].relative; +var own$h = {}.hasOwnProperty; var loaders = { '.json': loadJson, - '.js': loadScript, + '.cjs': loadScriptOrModule, + '.mjs': loadScriptOrModule, + '.js': loadScriptOrModule, '.yaml': loadYaml, '.yml': loadYaml }; var defaultLoader = loadJson; -Config.prototype.load = load; +Config.prototype.load = load$3; function Config(options) { - var rcName = options.rcName; - var packageField = options.packageField; var names = []; this.cwd = options.cwd; @@ -9158,20 +9284,28 @@ function Config(options) { this.configTransform = options.configTransform; this.defaultConfig = options.defaultConfig; - if (rcName) { - names.push(rcName, rcName + '.js', rcName + '.yml', rcName + '.yaml'); - debug('Looking for `%s` configuration files', names); + if (options.rcName) { + names.push( + options.rcName, + options.rcName + '.js', + options.rcName + '.yml', + options.rcName + '.yaml' + ); + debug$c('Looking for `%s` configuration files', names); } - if (packageField) { + if (options.packageField) { names.push('package.json'); - debug('Looking for `%s` fields in `package.json` files', packageField); + debug$c( + 'Looking for `%s` fields in `package.json` files', + options.packageField + ); } this.given = {settings: options.settings, plugins: options.plugins}; - this.create = create.bind(this); + this.create = create$1.bind(this); - this.findUp = new findUp$1({ + this.findUp = new FindUp$1({ filePath: options.rcPath, cwd: options.cwd, detect: options.detectConfig, @@ -9180,108 +9314,99 @@ function Config(options) { }); } -function load(filePath, callback) { +function load$3(filePath, callback) { var self = this; - var searchPath = filePath || path__default['default'].resolve(this.cwd, 'stdin.js'); - self.findUp.load(searchPath, done); + self.findUp.load(filePath || path$f.resolve(this.cwd, 'stdin.js'), done); function done(error, file) { if (error || file) { return callback(error, file) } - callback(null, self.create()); + self.create().then(function (result) { + callback(null, result); + }, callback); } } -function create(buf, filePath) { +async function create$1(buf, filePath) { var self = this; - var transform = self.configTransform; - var defaults = self.defaultConfig; - var fn = (filePath && loaders[extname(filePath)]) || defaultLoader; + var fn = (filePath && loaders[path$f.extname(filePath)]) || defaultLoader; var options = {prefix: self.pluginPrefix, cwd: self.cwd}; var result = {settings: {}, plugins: []}; - var contents = buf ? fn.apply(self, arguments) : undefined; + var contents; - if (transform && contents !== undefined) { - contents = transform(contents, filePath); + if (filePath) { + contents = await fn.apply(self, arguments); + } + + if (self.configTransform && contents !== undefined) { + contents = self.configTransform(contents, filePath); } // Exit if we did find a `package.json`, but it does not have configuration. - if (buf && contents === undefined && basename(filePath) === 'package.json') { + if ( + buf && + contents === undefined && + path$f.basename(filePath) === 'package.json' + ) { return } if (contents === undefined) { - if (defaults) { - merge(result, defaults, Object.assign({}, options, {root: self.cwd})); + if (self.defaultConfig) { + await merge$1( + result, + self.defaultConfig, + Object.assign({}, options, {root: self.cwd}) + ); } } else { - merge( + await merge$1( result, contents, - Object.assign({}, options, {root: dirname(filePath)}) + Object.assign({}, options, {root: path$f.dirname(filePath)}) ); } - merge(result, self.given, Object.assign({}, options, {root: self.cwd})); + await merge$1(result, self.given, Object.assign({}, options, {root: self.cwd})); return result } -// Basically `Module.prototype.load`, but for a buffer instead of a file path. -function loadScript(buf, filePath) { - var submodule = Module__default['default']._cache[filePath]; - - if (!submodule) { - submodule = new Module__default['default'](filePath, module); - submodule.filename = filePath; - submodule.paths = Module__default['default']._nodeModulePaths(dirname(filePath)); - submodule._compile(String(buf), filePath); - submodule.loaded = true; - Module__default['default']._cache[filePath] = submodule; - } - - return submodule.exports +function loadScriptOrModule(_, filePath) { + return loadFromAbsolutePath(filePath, this.cwd) } function loadYaml(buf, filePath) { - return jsYaml$1.safeLoad(buf, {filename: basename(filePath)}) + return yaml.safeLoad(buf, {filename: path$f.basename(filePath)}) } function loadJson(buf, filePath) { - var result = parseJson$1(buf, filePath); + var result = json$2(buf, filePath); - if (basename(filePath) === 'package.json') { + if (path$f.basename(filePath) === 'package.json') { result = result[this.packageField]; } return result } -function merge(target, raw, options) { - var root = options.root; - var cwd = options.cwd; - var prefix = options.prefix; - +async function merge$1(target, raw, options) { if (typeof raw === 'object' && raw !== null) { - addPreset(raw); + await addPreset(raw); } else { throw new Error('Expected preset, not `' + raw + '`') } return target - function addPreset(result) { + async function addPreset(result) { var plugins = result.plugins; if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && plugins !== null) { - if ('length' in plugins) { - addEach(plugins); - } else { - addIn(plugins); - } + await ('length' in plugins ? addEach(plugins) : addIn(plugins)); } else { throw new Error( 'Expected a list or object of plugins, not `' + plugins + '`' @@ -9291,70 +9416,67 @@ function merge(target, raw, options) { target.settings = Object.assign({}, target.settings, result.settings); } - function addEach(result) { - var length = result.length; + async function addEach(result) { var index = -1; var value; - while (++index < length) { + while (++index < result.length) { value = result[index]; - if (value !== null && typeof value === 'object' && 'length' in value) { - use.apply(null, value); - } else { - use(value); - } + // Keep order sequential instead of parallel. + // eslint-disable-next-line no-await-in-loop + await (value !== null && typeof value === 'object' && 'length' in value + ? use.apply(null, value) + : use(value)); } } - function addIn(result) { + async function addIn(result) { var key; for (key in result) { - use(key, result[key]); + // Keep order sequential instead of parallel. + // eslint-disable-next-line no-await-in-loop + await use(key, result[key]); } } - function use(usable, value) { + async function use(usable, value) { if (typeof usable === 'string') { - addModule(usable, value); + await addModule(usable, value); } else if (typeof usable === 'function') { addPlugin(usable, value); } else { - merge(target, usable, options); + await merge$1(target, usable, options); } } - function addModule(id, value) { - var fp = resolve(id, {cwd: root, prefix: prefix}); + async function addModule(id, value) { + var fp = loadPlugin.resolve(id, {cwd: options.root, prefix: options.prefix}); var result; if (fp) { - try { - result = commonjsRequire(fp); - } catch (error) { - throw fault_1( - 'Cannot parse script `%s`\n%s', - relative(root, fp), - error.stack - ) - } + result = await loadFromAbsolutePath(fp, options.root); try { if (typeof result === 'function') { addPlugin(result, value); } else { - merge(target, result, Object.assign({}, options, {root: dirname(fp)})); + await merge$1( + target, + result, + Object.assign({}, options, {root: path$f.dirname(fp)}) + ); } } catch (_) { - throw fault_1( + throw fault$1( 'Error: Expected preset or plugin, not %s, at `%s`', result, - relative(root, fp) + path$f.relative(options.root, fp) ) } } else { - fp = relative(cwd, path__default['default'].resolve(root, id)); + fp = path$f.relative(options.cwd, path$f.resolve(options.root, id)); addPlugin( failingModule(fp, new Error('Could not find module `' + id + '`')), value @@ -9363,7 +9485,7 @@ function merge(target, raw, options) { } function addPlugin(result, value) { - var entry = find(target.plugins, result); + var entry = find$2(target.plugins, result); if (entry) { reconfigure(entry, value); @@ -9374,41 +9496,71 @@ function merge(target, raw, options) { } function reconfigure(entry, value) { - if (isPlainObj(entry[1]) && isPlainObj(value)) { + if (plain$1(entry[1]) && plain$1(value)) { value = Object.assign({}, entry[1], value); } entry[1] = value; } -function find(entries, plugin) { - var length = entries.length; +function find$2(entries, plugin) { var index = -1; - var entry; - - while (++index < length) { - entry = entries[index]; - if (entry[0] === plugin) { - return entry + while (++index < entries.length) { + if (entries[index][0] === plugin) { + return entries[index] } } } function failingModule(id, error) { var cache = failingModule.cache || (failingModule.cache = {}); - var submodule = own.call(cache, id) ? cache[id] : (cache[id] = fail); + var submodule = own$h.call(cache, id) ? cache[id] : (cache[id] = fail); return submodule function fail() { throw error } } -}); -var configure_1 = configure; +async function loadFromAbsolutePath(fp, base) { + var ext = path$f.extname(fp); + var result; + + /* istanbul ignore next - To do next major: Tests don’t run on Node 10 */ + if (ext !== '.mjs') { + try { + result = commonjsRequire(fp); + } catch (error) { + if (ext !== '.cjs' && error.code === 'ERR_REQUIRE_ESM') { + ext = '.mjs'; + } else { + throw fault$1( + 'Cannot parse script `%s`\n%s', + path$f.relative(base, fp), + error.stack + ) + } + } + + if (result && typeof result === 'object' && result.__esModule) { + result = result.default; + } + } + + /* istanbul ignore next - To do next major: Tests don’t run on Node 10 */ + if (ext === '.mjs') { + result = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(fp)); })).default; + } + + return result +} + +var Configuration = configuration; + +var configure_1$2 = configure$6; -function configure(context, settings) { - context.configuration = new configuration(settings); +function configure$6(context, settings) { + context.configuration = new Configuration(settings); } // A simple implementation of make-array @@ -9432,7 +9584,7 @@ const REGEX_SPLITALL_CRLF = /\r?\n/g; // .. const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; -const SLASH = '/'; +const SLASH$1 = '/'; const KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol.for('node-ignore') /* istanbul ignore next */ @@ -9809,7 +9961,7 @@ const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path); checkPath.isNotRelative = isNotRelative; checkPath.convert = p => p; -class Ignore { +class Ignore$2 { constructor ({ ignorecase = true } = {}) { @@ -9925,7 +10077,7 @@ class Ignore { if (!slices) { // path/to/a.js // ['path', 'to', 'a.js'] - slices = path.split(SLASH); + slices = path.split(SLASH$1); } slices.pop(); @@ -9936,7 +10088,7 @@ class Ignore { } const parent = this._t( - slices.join(SLASH) + SLASH, + slices.join(SLASH$1) + SLASH$1, cache, checkUnignored, slices @@ -9968,19 +10120,19 @@ class Ignore { } } -const factory = options => new Ignore(options); +const factory$4 = options => new Ignore$2(options); const returnFalse = () => false; const isPathValid = path => checkPath(path && checkPath.convert(path), path, returnFalse); -factory.isPathValid = isPathValid; +factory$4.isPathValid = isPathValid; // Fixes typescript -factory.default = factory; +factory$4.default = factory$4; -var ignore = factory; +var ignore$2 = factory$4; // Windows // -------------------------------------------------------------- @@ -10009,29 +10161,28 @@ if ( || isNotRelative(path); } -var ignore$1 = Ignore$1; +var path$e = require$$0__default$2['default']; +var gitignore$1 = ignore$2; +var FindUp = findUp; -Ignore$1.prototype.check = check; +var ignore$1 = Ignore$1; -var sep = path__default['default'].sep; -var dirname$1 = path__default['default'].dirname; -var relative$1 = path__default['default'].relative; -var resolve$2 = path__default['default'].resolve; +Ignore$1.prototype.check = check$5; function Ignore$1(options) { this.cwd = options.cwd; this.ignorePathResolveFrom = options.ignorePathResolveFrom; - this.findUp = new findUp$1({ + this.findUp = new FindUp({ filePath: options.ignorePath, cwd: options.cwd, detect: options.detectIgnore, names: options.ignoreName ? [options.ignoreName] : [], - create: create$1 + create: create }); } -function check(filePath, callback) { +function check$5(filePath, callback) { var self = this; self.findUp.load(filePath, done); @@ -10042,19 +10193,19 @@ function check(filePath, callback) { if (error) { callback(error); } else if (ignore) { - normal = relative$1( - resolve$2( + normal = path$e.relative( + path$e.resolve( self.cwd, self.ignorePathResolveFrom === 'cwd' ? '.' : ignore.filePath ), - resolve$2(self.cwd, filePath) + path$e.resolve(self.cwd, filePath) ); if ( normal === '' || normal === '..' || - normal.charAt(0) === sep || - normal.slice(0, 3) === '..' + sep + normal.charAt(0) === path$e.sep || + normal.slice(0, 3) === '..' + path$e.sep ) { callback(null, false); } else { @@ -10066,12 +10217,14 @@ function check(filePath, callback) { } } -function create$1(buf, filePath) { - var ignore$1 = ignore().add(String(buf)); - ignore$1.filePath = dirname$1(filePath); - return ignore$1 +function create(buf, filePath) { + var ignore = gitignore$1().add(String(buf)); + ignore.filePath = path$e.dirname(filePath); + return ignore } +var old$1 = {}; + // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -10093,9 +10246,9 @@ function create$1(buf, filePath) { // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. - -var isWindows = process.platform === 'win32'; - +var pathModule = require$$0__default$2['default']; +var isWindows$2 = process.platform === 'win32'; +var fs$e = require$$0__default$3['default']; // JavaScript implementation of realpath, ported from node pre-v6 @@ -10140,26 +10293,26 @@ function maybeCallback(cb) { return typeof cb === 'function' ? cb : rethrow(); } -var normalize = path__default['default'].normalize; +pathModule.normalize; // Regexp that finds the next partion of a (partial) path // result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] -if (isWindows) { +if (isWindows$2) { var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; } else { var nextPartRe = /(.*?)(?:[\/]+|$)/g; } // Regex to find the device root, including trailing slash. E.g. 'c:\\'. -if (isWindows) { +if (isWindows$2) { var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; } else { var splitRootRe = /^[\/]*/; } -var realpathSync = function realpathSync(p, cache) { +old$1.realpathSync = function realpathSync(p, cache) { // make p is absolute - p = path__default['default'].resolve(p); + p = pathModule.resolve(p); if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { return cache[p]; @@ -10189,8 +10342,8 @@ var realpathSync = function realpathSync(p, cache) { previous = ''; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs__default['default'].lstatSync(base); + if (isWindows$2 && !knownHard[base]) { + fs$e.lstatSync(base); knownHard[base] = true; } } @@ -10217,7 +10370,7 @@ var realpathSync = function realpathSync(p, cache) { // some known symbolic link. no need to stat again. resolvedLink = cache[base]; } else { - var stat = fs__default['default'].lstatSync(base); + var stat = fs$e.lstatSync(base); if (!stat.isSymbolicLink()) { knownHard[base] = true; if (cache) cache[base] = base; @@ -10227,24 +10380,24 @@ var realpathSync = function realpathSync(p, cache) { // read the link if it wasn't read before // dev/ino always return 0 on windows, so skip the check. var linkTarget = null; - if (!isWindows) { + if (!isWindows$2) { var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); if (seenLinks.hasOwnProperty(id)) { linkTarget = seenLinks[id]; } } if (linkTarget === null) { - fs__default['default'].statSync(base); - linkTarget = fs__default['default'].readlinkSync(base); + fs$e.statSync(base); + linkTarget = fs$e.readlinkSync(base); } - resolvedLink = path__default['default'].resolve(previous, linkTarget); + resolvedLink = pathModule.resolve(previous, linkTarget); // track this, if given a cache. if (cache) cache[base] = resolvedLink; - if (!isWindows) seenLinks[id] = linkTarget; + if (!isWindows$2) seenLinks[id] = linkTarget; } // resolve the link, then start over - p = path__default['default'].resolve(resolvedLink, p.slice(pos)); + p = pathModule.resolve(resolvedLink, p.slice(pos)); start(); } @@ -10254,14 +10407,14 @@ var realpathSync = function realpathSync(p, cache) { }; -var realpath = function realpath(p, cache, cb) { +old$1.realpath = function realpath(p, cache, cb) { if (typeof cb !== 'function') { cb = maybeCallback(cache); cache = null; } // make p is absolute - p = path__default['default'].resolve(p); + p = pathModule.resolve(p); if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { return process.nextTick(cb.bind(null, null, cache[p])); @@ -10291,8 +10444,8 @@ var realpath = function realpath(p, cache, cb) { previous = ''; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs__default['default'].lstat(base, function(err) { + if (isWindows$2 && !knownHard[base]) { + fs$e.lstat(base, function(err) { if (err) return cb(err); knownHard[base] = true; LOOP(); @@ -10329,7 +10482,7 @@ var realpath = function realpath(p, cache, cb) { return gotResolvedLink(cache[base]); } - return fs__default['default'].lstat(base, gotStat); + return fs$e.lstat(base, gotStat); } function gotStat(err, stat) { @@ -10345,17 +10498,17 @@ var realpath = function realpath(p, cache, cb) { // stat & read the link if not read before // call gotTarget as soon as the link target is known // dev/ino always return 0 on windows, so skip the check. - if (!isWindows) { + if (!isWindows$2) { var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); if (seenLinks.hasOwnProperty(id)) { return gotTarget(null, seenLinks[id], base); } } - fs__default['default'].stat(base, function(err) { + fs$e.stat(base, function(err) { if (err) return cb(err); - fs__default['default'].readlink(base, function(err, target) { - if (!isWindows) seenLinks[id] = target; + fs$e.readlink(base, function(err, target) { + if (!isWindows$2) seenLinks[id] = target; gotTarget(err, target); }); }); @@ -10364,37 +10517,32 @@ var realpath = function realpath(p, cache, cb) { function gotTarget(err, target, base) { if (err) return cb(err); - var resolvedLink = path__default['default'].resolve(previous, target); + var resolvedLink = pathModule.resolve(previous, target); if (cache) cache[base] = resolvedLink; gotResolvedLink(resolvedLink); } function gotResolvedLink(resolvedLink) { // resolve the link, then start over - p = path__default['default'].resolve(resolvedLink, p.slice(pos)); + p = pathModule.resolve(resolvedLink, p.slice(pos)); start(); } }; -var old = { - realpathSync: realpathSync, - realpath: realpath -}; - -var fs_realpath = realpath$1; -realpath$1.realpath = realpath$1; -realpath$1.sync = realpathSync$1; -realpath$1.realpathSync = realpathSync$1; -realpath$1.monkeypatch = monkeypatch; -realpath$1.unmonkeypatch = unmonkeypatch; - +var fs_realpath = realpath$2; +realpath$2.realpath = realpath$2; +realpath$2.sync = realpathSync; +realpath$2.realpathSync = realpathSync; +realpath$2.monkeypatch = monkeypatch; +realpath$2.unmonkeypatch = unmonkeypatch; -var origRealpath = fs__default['default'].realpath; -var origRealpathSync = fs__default['default'].realpathSync; - -var version = process.version; -var ok = /^v[0-5]\./.test(version); +var fs$d = require$$0__default$3['default']; +var origRealpath = fs$d.realpath; +var origRealpathSync = fs$d.realpathSync; +var version$2 = process.version; +var ok$D = /^v[0-5]\./.test(version$2); +var old = old$1; function newError (er) { return er && er.syscall === 'realpath' && ( @@ -10404,8 +10552,8 @@ function newError (er) { ) } -function realpath$1 (p, cache, cb) { - if (ok) { +function realpath$2 (p, cache, cb) { + if (ok$D) { return origRealpath(p, cache, cb) } @@ -10422,8 +10570,8 @@ function realpath$1 (p, cache, cb) { }); } -function realpathSync$1 (p, cache) { - if (ok) { +function realpathSync (p, cache) { + if (ok$D) { return origRealpathSync(p, cache) } @@ -10439,35 +10587,35 @@ function realpathSync$1 (p, cache) { } function monkeypatch () { - fs__default['default'].realpath = realpath$1; - fs__default['default'].realpathSync = realpathSync$1; + fs$d.realpath = realpath$2; + fs$d.realpathSync = realpathSync; } function unmonkeypatch () { - fs__default['default'].realpath = origRealpath; - fs__default['default'].realpathSync = origRealpathSync; + fs$d.realpath = origRealpath; + fs$d.realpathSync = origRealpathSync; } -var concatMap = function (xs, fn) { +var concatMap$1 = function (xs, fn) { var res = []; for (var i = 0; i < xs.length; i++) { var x = fn(xs[i], i); - if (isArray(x)) res.push.apply(res, x); + if (isArray$1(x)) res.push.apply(res, x); else res.push(x); } return res; }; -var isArray = Array.isArray || function (xs) { +var isArray$1 = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; -var balancedMatch = balanced; -function balanced(a, b, str) { +var balancedMatch = balanced$1; +function balanced$1(a, b, str) { if (a instanceof RegExp) a = maybeMatch(a, str); if (b instanceof RegExp) b = maybeMatch(b, str); - var r = range(a, b, str); + var r = range$3(a, b, str); return r && { start: r[0], @@ -10483,8 +10631,8 @@ function maybeMatch(reg, str) { return m ? m[0] : null; } -balanced.range = range; -function range(a, b, str) { +balanced$1.range = range$3; +function range$3(a, b, str) { var begs, beg, left, right, result; var ai = str.indexOf(a); var bi = str.indexOf(b, ai + 1); @@ -10521,6 +10669,9 @@ function range(a, b, str) { return result; } +var concatMap = concatMap$1; +var balanced = balancedMatch; + var braceExpansion = expandTop; var escSlash = '\0SLASH'+Math.random()+'\0'; @@ -10529,7 +10680,7 @@ var escClose = '\0CLOSE'+Math.random()+'\0'; var escComma = '\0COMMA'+Math.random()+'\0'; var escPeriod = '\0PERIOD'+Math.random()+'\0'; -function numeric(str) { +function numeric$1(str) { return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0); @@ -10560,7 +10711,7 @@ function parseCommaParts(str) { return ['']; var parts = []; - var m = balancedMatch('{', '}', str); + var m = balanced('{', '}', str); if (!m) return str.split(','); @@ -10596,7 +10747,7 @@ function expandTop(str) { str = '\\{\\}' + str.substr(2); } - return expand(escapeBraces(str), true).map(unescapeBraces); + return expand$4(escapeBraces(str), true).map(unescapeBraces); } function embrace(str) { @@ -10613,10 +10764,10 @@ function gte(i, y) { return i >= y; } -function expand(str, isTop) { +function expand$4(str, isTop) { var expansions = []; - var m = balancedMatch('{', '}', str); + var m = balanced('{', '}', str); if (!m || /\$$/.test(m.pre)) return [str]; var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); @@ -10627,7 +10778,7 @@ function expand(str, isTop) { // {a},b} if (m.post.match(/,.*\}/)) { str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); + return expand$4(str); } return [str]; } @@ -10639,10 +10790,10 @@ function expand(str, isTop) { n = parseCommaParts(m.body); if (n.length === 1) { // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); + n = expand$4(n[0], false).map(embrace); if (n.length === 1) { var post = m.post.length - ? expand(m.post, false) + ? expand$4(m.post, false) : ['']; return post.map(function(p) { return m.pre + n[0] + p; @@ -10657,17 +10808,17 @@ function expand(str, isTop) { // no need to expand pre, since it is guaranteed to be free of brace-sets var pre = m.pre; var post = m.post.length - ? expand(m.post, false) + ? expand$4(m.post, false) : ['']; var N; if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); + var x = numeric$1(n[0]); + var y = numeric$1(n[1]); var width = Math.max(n[0].length, n[1].length); var incr = n.length == 3 - ? Math.abs(numeric(n[2])) + ? Math.abs(numeric$1(n[2])) : 1; var test = lte; var reverse = y < x; @@ -10701,7 +10852,7 @@ function expand(str, isTop) { N.push(c); } } else { - N = concatMap(n, function(el) { return expand(el, false) }); + N = concatMap(n, function(el) { return expand$4(el, false) }); } for (var j = 0; j < N.length; j++) { @@ -10715,16 +10866,16 @@ function expand(str, isTop) { return expansions; } -var minimatch_1 = minimatch; -minimatch.Minimatch = Minimatch; +var minimatch_1 = minimatch$3; +minimatch$3.Minimatch = Minimatch$1; -var path = { sep: '/' }; +var path$d = { sep: '/' }; try { - path = path__default['default']; + path$d = require$$0__default$2['default']; } catch (er) {} -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}; - +var GLOBSTAR$1 = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {}; +var expand$3 = braceExpansion; var plTypes = { '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, @@ -10739,7 +10890,7 @@ var plTypes = { var qmark = '[^/]'; // * => any number of characters -var star = qmark + '*?'; +var star$3 = qmark + '*?'; // ** when dots are allowed. Anything goes, except .. and . // not (^ or / followed by one or two dots followed by $ or /), @@ -10764,11 +10915,11 @@ function charSet (s) { // normalizes slashes. var slashSplit = /\/+/; -minimatch.filter = filter; +minimatch$3.filter = filter; function filter (pattern, options) { options = options || {}; return function (p, i, list) { - return minimatch(p, pattern, options) + return minimatch$3(p, pattern, options) } } @@ -10785,10 +10936,10 @@ function ext (a, b) { return t } -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch +minimatch$3.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch$3 - var orig = minimatch; + var orig = minimatch$3; var m = function minimatch (p, pattern, options) { return orig.minimatch(p, pattern, ext(def, options)) @@ -10801,12 +10952,12 @@ minimatch.defaults = function (def) { return m }; -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch +Minimatch$1.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch$1 + return minimatch$3.defaults(def).Minimatch }; -function minimatch (p, pattern, options) { +function minimatch$3 (p, pattern, options) { if (typeof pattern !== 'string') { throw new TypeError('glob pattern string required') } @@ -10821,12 +10972,12 @@ function minimatch (p, pattern, options) { // "" only matches "" if (pattern.trim() === '') return p === '' - return new Minimatch(pattern, options).match(p) + return new Minimatch$1(pattern, options).match(p) } -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) +function Minimatch$1 (pattern, options) { + if (!(this instanceof Minimatch$1)) { + return new Minimatch$1(pattern, options) } if (typeof pattern !== 'string') { @@ -10837,8 +10988,8 @@ function Minimatch (pattern, options) { pattern = pattern.trim(); // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/'); + if (path$d.sep !== '/') { + pattern = pattern.split(path$d.sep).join('/'); } this.options = options; @@ -10853,9 +11004,9 @@ function Minimatch (pattern, options) { this.make(); } -Minimatch.prototype.debug = function () {}; +Minimatch$1.prototype.debug = function () {}; -Minimatch.prototype.make = make; +Minimatch$1.prototype.make = make; function make () { // don't do it more than once. if (this._made) return @@ -10911,7 +11062,7 @@ function make () { this.set = set; } -Minimatch.prototype.parseNegate = parseNegate; +Minimatch$1.prototype.parseNegate = parseNegate; function parseNegate () { var pattern = this.pattern; var negate = false; @@ -10941,15 +11092,15 @@ function parseNegate () { // Invalid sets are not expanded. // a{2..}b -> a{2..}b // a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { +minimatch$3.braceExpand = function (pattern, options) { return braceExpand(pattern, options) }; -Minimatch.prototype.braceExpand = braceExpand; +Minimatch$1.prototype.braceExpand = braceExpand; function braceExpand (pattern, options) { if (!options) { - if (this instanceof Minimatch) { + if (this instanceof Minimatch$1) { options = this.options; } else { options = {}; @@ -10969,7 +11120,7 @@ function braceExpand (pattern, options) { return [pattern] } - return braceExpansion(pattern) + return expand$3(pattern) } // parse a component of the expanded set. @@ -10983,9 +11134,9 @@ function braceExpand (pattern, options) { // when it is the *only* thing in a path portion. Otherwise, any series // of * is equivalent to a single *. Globstar behavior is enabled by // default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse$2; +Minimatch$1.prototype.parse = parse$b; var SUBPARSE = {}; -function parse$2 (pattern, isSub) { +function parse$b (pattern, isSub) { if (pattern.length > 1024 * 64) { throw new TypeError('pattern is too long') } @@ -10993,7 +11144,7 @@ function parse$2 (pattern, isSub) { var options = this.options; // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (!options.noglobstar && pattern === '**') return GLOBSTAR$1 if (pattern === '') return '' var re = ''; @@ -11020,7 +11171,7 @@ function parse$2 (pattern, isSub) { // that wasn't consumed by this pass. switch (stateChar) { case '*': - re += star; + re += star$3; hasMagic = true; break case '?': @@ -11254,7 +11405,7 @@ function parse$2 (pattern, isSub) { }); this.debug('tail=%j\n %s', tail, tail, pl, re); - var t = pl.type === '*' ? star + var t = pl.type === '*' ? star$3 : pl.type === '?' ? qmark : '\\' + pl.type; @@ -11351,11 +11502,11 @@ function parse$2 (pattern, isSub) { return regExp } -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() +minimatch$3.makeRe = function (pattern, options) { + return new Minimatch$1(pattern, options || {}).makeRe() }; -Minimatch.prototype.makeRe = makeRe; +Minimatch$1.prototype.makeRe = makeRe; function makeRe () { if (this.regexp || this.regexp === false) return this.regexp @@ -11373,14 +11524,14 @@ function makeRe () { } var options = this.options; - var twoStar = options.noglobstar ? star + var twoStar = options.noglobstar ? star$3 : options.dot ? twoStarDot : twoStarNoDot; var flags = options.nocase ? 'i' : ''; var re = set.map(function (pattern) { return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar + return (p === GLOBSTAR$1) ? twoStar : (typeof p === 'string') ? regExpEscape(p) : p._src }).join('\\\/') @@ -11401,9 +11552,9 @@ function makeRe () { return this.regexp } -minimatch.match = function (list, pattern, options) { +minimatch$3.match = function (list, pattern, options) { options = options || {}; - var mm = new Minimatch(pattern, options); + var mm = new Minimatch$1(pattern, options); list = list.filter(function (f) { return mm.match(f) }); @@ -11413,7 +11564,7 @@ minimatch.match = function (list, pattern, options) { return list }; -Minimatch.prototype.match = match; +Minimatch$1.prototype.match = match; function match (f, partial) { this.debug('match', f, this.pattern); // short-circuit in the case of busted things. @@ -11426,8 +11577,8 @@ function match (f, partial) { var options = this.options; // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/'); + if (path$d.sep !== '/') { + f = f.split(path$d.sep).join('/'); } // treat the test path as a set of pathparts. @@ -11474,7 +11625,7 @@ function match (f, partial) { // Partial means, if you run out of file before you run // out of pattern, then that's fine, as long as all // the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { +Minimatch$1.prototype.matchOne = function (file, pattern, partial) { var options = this.options; this.debug('matchOne', @@ -11498,7 +11649,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { // some invalid regexp stuff in the set. if (p === false) return false - if (p === GLOBSTAR) { + if (p === GLOBSTAR$1) { this.debug('GLOBSTAR', [pattern, p, f]); // "**" @@ -11639,10 +11790,13 @@ function regExpEscape (s) { return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') } -var inherits_browser = createCommonjsModule(function (module) { +var inherits$3 = {exports: {}}; + +var inherits_browser = {exports: {}}; + if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { + inherits_browser.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { @@ -11657,7 +11811,7 @@ if (typeof Object.create === 'function') { }; } else { // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { + inherits_browser.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function () {}; @@ -11667,19 +11821,18 @@ if (typeof Object.create === 'function') { } }; } -}); -var inherits = createCommonjsModule(function (module) { try { - var util = util__default['default']; + var util$3 = require$$0__default['default']; /* istanbul ignore next */ - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; + if (typeof util$3.inherits !== 'function') throw ''; + inherits$3.exports = util$3.inherits; } catch (e) { /* istanbul ignore next */ - module.exports = inherits_browser; + inherits$3.exports = inherits_browser.exports; } -}); + +var pathIsAbsolute = {exports: {}}; function posix(path) { return path.charAt(0) === '/'; @@ -11696,30 +11849,30 @@ function win32(path) { return Boolean(result[2] || isUnc); } -var pathIsAbsolute = process.platform === 'win32' ? win32 : posix; -var posix_1 = posix; -var win32_1 = win32; -pathIsAbsolute.posix = posix_1; -pathIsAbsolute.win32 = win32_1; +pathIsAbsolute.exports = process.platform === 'win32' ? win32 : posix; +pathIsAbsolute.exports.posix = posix; +pathIsAbsolute.exports.win32 = win32; -var alphasort_1 = alphasort; -var alphasorti_1 = alphasorti; -var setopts_1 = setopts; -var ownProp_1 = ownProp; -var makeAbs_1 = makeAbs; -var finish_1 = finish; -var mark_1 = mark$1; -var isIgnored_1 = isIgnored; -var childrenIgnored_1 = childrenIgnored; +var common$3 = {}; -function ownProp (obj, field) { +common$3.alphasort = alphasort; +common$3.alphasorti = alphasorti; +common$3.setopts = setopts$2; +common$3.ownProp = ownProp$2; +common$3.makeAbs = makeAbs; +common$3.finish = finish; +common$3.mark = mark; +common$3.isIgnored = isIgnored$2; +common$3.childrenIgnored = childrenIgnored$2; + +function ownProp$2 (obj, field) { return Object.prototype.hasOwnProperty.call(obj, field) } - - - -var Minimatch$1 = minimatch_1.Minimatch; +var path$c = require$$0__default$2['default']; +var minimatch$2 = minimatch_1; +var isAbsolute$2 = pathIsAbsolute.exports; +var Minimatch = minimatch$2.Minimatch; function alphasorti (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()) @@ -11745,16 +11898,16 @@ function ignoreMap (pattern) { var gmatcher = null; if (pattern.slice(-3) === '/**') { var gpattern = pattern.replace(/(\/\*\*)+$/, ''); - gmatcher = new Minimatch$1(gpattern, { dot: true }); + gmatcher = new Minimatch(gpattern, { dot: true }); } return { - matcher: new Minimatch$1(pattern, { dot: true }), + matcher: new Minimatch(pattern, { dot: true }), gmatcher: gmatcher } } -function setopts (self, pattern, options) { +function setopts$2 (self, pattern, options) { if (!options) options = {}; @@ -11795,21 +11948,21 @@ function setopts (self, pattern, options) { self.changedCwd = false; var cwd = process.cwd(); - if (!ownProp(options, "cwd")) + if (!ownProp$2(options, "cwd")) self.cwd = cwd; else { - self.cwd = path__default['default'].resolve(options.cwd); + self.cwd = path$c.resolve(options.cwd); self.changedCwd = self.cwd !== cwd; } - self.root = options.root || path__default['default'].resolve(self.cwd, "/"); - self.root = path__default['default'].resolve(self.root); + self.root = options.root || path$c.resolve(self.cwd, "/"); + self.root = path$c.resolve(self.root); if (process.platform === "win32") self.root = self.root.replace(/\\/g, "/"); // TODO: is an absolute `cwd` supposed to be resolved against `root`? // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') - self.cwdAbs = pathIsAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd); + self.cwdAbs = isAbsolute$2(self.cwd) ? self.cwd : makeAbs(self, self.cwd); if (process.platform === "win32") self.cwdAbs = self.cwdAbs.replace(/\\/g, "/"); self.nomount = !!options.nomount; @@ -11819,7 +11972,7 @@ function setopts (self, pattern, options) { options.nonegate = true; options.nocomment = true; - self.minimatch = new Minimatch$1(pattern, options); + self.minimatch = new Minimatch(pattern, options); self.options = self.minimatch.options; } @@ -11874,13 +12027,13 @@ function finish (self) { if (self.ignore.length) all = all.filter(function(m) { - return !isIgnored(self, m) + return !isIgnored$2(self, m) }); self.found = all; } -function mark$1 (self, p) { +function mark (self, p) { var abs = makeAbs(self, p); var c = self.cache[abs]; var m = p; @@ -11907,13 +12060,13 @@ function mark$1 (self, p) { function makeAbs (self, f) { var abs = f; if (f.charAt(0) === '/') { - abs = path__default['default'].join(self.root, f); - } else if (pathIsAbsolute(f) || f === '') { + abs = path$c.join(self.root, f); + } else if (isAbsolute$2(f) || f === '') { abs = f; } else if (self.changedCwd) { - abs = path__default['default'].resolve(self.cwd, f); + abs = path$c.resolve(self.cwd, f); } else { - abs = path__default['default'].resolve(f); + abs = path$c.resolve(f); } if (process.platform === 'win32') @@ -11925,7 +12078,7 @@ function makeAbs (self, f) { // Return true, if pattern ends with globstar '**', for the accompanying parent directory. // Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored (self, path) { +function isIgnored$2 (self, path) { if (!self.ignore.length) return false @@ -11934,7 +12087,7 @@ function isIgnored (self, path) { }) } -function childrenIgnored (self, path) { +function childrenIgnored$2 (self, path) { if (!self.ignore.length) return false @@ -11943,34 +12096,32 @@ function childrenIgnored (self, path) { }) } -var common$2 = { - alphasort: alphasort_1, - alphasorti: alphasorti_1, - setopts: setopts_1, - ownProp: ownProp_1, - makeAbs: makeAbs_1, - finish: finish_1, - mark: mark_1, - isIgnored: isIgnored_1, - childrenIgnored: childrenIgnored_1 -}; +var sync$3 = globSync$1; +globSync$1.GlobSync = GlobSync$1; -var sync$3 = globSync; -globSync.GlobSync = GlobSync; +var fs$c = require$$0__default$3['default']; +var rp$1 = fs_realpath; +var minimatch$1 = minimatch_1; +var path$b = require$$0__default$2['default']; +var assert$1 = require$$6__default['default']; +var isAbsolute$1 = pathIsAbsolute.exports; +var common$2 = common$3; +common$2.alphasort; +common$2.alphasorti; var setopts$1 = common$2.setopts; var ownProp$1 = common$2.ownProp; var childrenIgnored$1 = common$2.childrenIgnored; var isIgnored$1 = common$2.isIgnored; -function globSync (pattern, options) { +function globSync$1 (pattern, options) { if (typeof options === 'function' || arguments.length === 3) throw new TypeError('callback provided to sync glob\n'+ 'See: https://github.com/isaacs/node-glob/issues/167') - return new GlobSync(pattern, options).found + return new GlobSync$1(pattern, options).found } -function GlobSync (pattern, options) { +function GlobSync$1 (pattern, options) { if (!pattern) throw new Error('must provide pattern') @@ -11978,8 +12129,8 @@ function GlobSync (pattern, options) { throw new TypeError('callback provided to sync glob\n'+ 'See: https://github.com/isaacs/node-glob/issues/167') - if (!(this instanceof GlobSync)) - return new GlobSync(pattern, options) + if (!(this instanceof GlobSync$1)) + return new GlobSync$1(pattern, options) setopts$1(this, pattern, options); @@ -11994,8 +12145,8 @@ function GlobSync (pattern, options) { this._finish(); } -GlobSync.prototype._finish = function () { - assert__default['default'](this instanceof GlobSync); +GlobSync$1.prototype._finish = function () { + assert$1(this instanceof GlobSync$1); if (this.realpath) { var self = this; this.matches.forEach(function (matchset, index) { @@ -12003,7 +12154,7 @@ GlobSync.prototype._finish = function () { for (var p in matchset) { try { p = self._makeAbs(p); - var real = fs_realpath.realpathSync(p, self.realpathCache); + var real = rp$1.realpathSync(p, self.realpathCache); set[real] = true; } catch (er) { if (er.syscall === 'stat') @@ -12018,8 +12169,8 @@ GlobSync.prototype._finish = function () { }; -GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert__default['default'](this instanceof GlobSync); +GlobSync$1.prototype._process = function (pattern, index, inGlobStar) { + assert$1(this instanceof GlobSync$1); // Get the first [n] parts of pattern that are all strings. var n = 0; @@ -12056,8 +12207,8 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { var read; if (prefix === null) read = '.'; - else if (pathIsAbsolute(prefix) || pathIsAbsolute(pattern.join('/'))) { - if (!prefix || !pathIsAbsolute(prefix)) + else if (isAbsolute$1(prefix) || isAbsolute$1(pattern.join('/'))) { + if (!prefix || !isAbsolute$1(prefix)) prefix = '/' + prefix; read = prefix; } else @@ -12069,7 +12220,7 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { if (childrenIgnored$1(this, read)) return - var isGlobStar = remain[0] === minimatch_1.GLOBSTAR; + var isGlobStar = remain[0] === minimatch$1.GLOBSTAR; if (isGlobStar) this._processGlobStar(prefix, read, abs, remain, index, inGlobStar); else @@ -12077,7 +12228,7 @@ GlobSync.prototype._process = function (pattern, index, inGlobStar) { }; -GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { +GlobSync$1.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { var entries = this._readdir(abs, inGlobStar); // if the abs isn't a dir, then nothing can match! @@ -12130,7 +12281,7 @@ GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, } if (e.charAt(0) === '/' && !this.nomount) { - e = path__default['default'].join(this.root, e); + e = path$b.join(this.root, e); } this._emitMatch(index, e); } @@ -12153,7 +12304,7 @@ GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, }; -GlobSync.prototype._emitMatch = function (index, e) { +GlobSync$1.prototype._emitMatch = function (index, e) { if (isIgnored$1(this, e)) return @@ -12182,7 +12333,7 @@ GlobSync.prototype._emitMatch = function (index, e) { }; -GlobSync.prototype._readdirInGlobStar = function (abs) { +GlobSync$1.prototype._readdirInGlobStar = function (abs) { // follow all symlinked directories forever // just proceed as if this is a non-globstar situation if (this.follow) @@ -12191,7 +12342,7 @@ GlobSync.prototype._readdirInGlobStar = function (abs) { var entries; var lstat; try { - lstat = fs__default['default'].lstatSync(abs); + lstat = fs$c.lstatSync(abs); } catch (er) { if (er.code === 'ENOENT') { // lstat failed, doesn't exist @@ -12212,7 +12363,7 @@ GlobSync.prototype._readdirInGlobStar = function (abs) { return entries }; -GlobSync.prototype._readdir = function (abs, inGlobStar) { +GlobSync$1.prototype._readdir = function (abs, inGlobStar) { if (inGlobStar && !ownProp$1(this.symlinks, abs)) return this._readdirInGlobStar(abs) @@ -12227,14 +12378,14 @@ GlobSync.prototype._readdir = function (abs, inGlobStar) { } try { - return this._readdirEntries(abs, fs__default['default'].readdirSync(abs)) + return this._readdirEntries(abs, fs$c.readdirSync(abs)) } catch (er) { this._readdirError(abs, er); return null } }; -GlobSync.prototype._readdirEntries = function (abs, entries) { +GlobSync$1.prototype._readdirEntries = function (abs, entries) { // if we haven't asked to stat everything, then just // assume that everything in there exists, so we can avoid // having to stat it a second time. @@ -12255,7 +12406,7 @@ GlobSync.prototype._readdirEntries = function (abs, entries) { return entries }; -GlobSync.prototype._readdirError = function (f, er) { +GlobSync$1.prototype._readdirError = function (f, er) { // handle errors, and cache the information switch (er.code) { case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 @@ -12287,7 +12438,7 @@ GlobSync.prototype._readdirError = function (f, er) { } }; -GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { +GlobSync$1.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { var entries = this._readdir(abs, inGlobStar); @@ -12326,7 +12477,7 @@ GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index } }; -GlobSync.prototype._processSimple = function (prefix, index) { +GlobSync$1.prototype._processSimple = function (prefix, index) { // XXX review this. Shouldn't it be doing the mounting etc // before doing stat? kinda weird? var exists = this._stat(prefix); @@ -12338,12 +12489,12 @@ GlobSync.prototype._processSimple = function (prefix, index) { if (!exists) return - if (prefix && pathIsAbsolute(prefix) && !this.nomount) { + if (prefix && isAbsolute$1(prefix) && !this.nomount) { var trail = /[\/\\]$/.test(prefix); if (prefix.charAt(0) === '/') { - prefix = path__default['default'].join(this.root, prefix); + prefix = path$b.join(this.root, prefix); } else { - prefix = path__default['default'].resolve(this.root, prefix); + prefix = path$b.resolve(this.root, prefix); if (trail) prefix += '/'; } @@ -12357,7 +12508,7 @@ GlobSync.prototype._processSimple = function (prefix, index) { }; // Returns either 'DIR', 'FILE', or false -GlobSync.prototype._stat = function (f) { +GlobSync$1.prototype._stat = function (f) { var abs = this._makeAbs(f); var needDir = f.slice(-1) === '/'; @@ -12384,7 +12535,7 @@ GlobSync.prototype._stat = function (f) { if (!stat) { var lstat; try { - lstat = fs__default['default'].lstatSync(abs); + lstat = fs$c.lstatSync(abs); } catch (er) { if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { this.statCache[abs] = false; @@ -12394,7 +12545,7 @@ GlobSync.prototype._stat = function (f) { if (lstat && lstat.isSymbolicLink()) { try { - stat = fs__default['default'].statSync(abs); + stat = fs$c.statSync(abs); } catch (er) { stat = lstat; } @@ -12417,11 +12568,11 @@ GlobSync.prototype._stat = function (f) { return c }; -GlobSync.prototype._mark = function (p) { +GlobSync$1.prototype._mark = function (p) { return common$2.mark(this, p) }; -GlobSync.prototype._makeAbs = function (f) { +GlobSync$1.prototype._makeAbs = function (f) { return common$2.makeAbs(this, f) }; @@ -12430,9 +12581,9 @@ GlobSync.prototype._makeAbs = function (f) { // presumably different callback function. // This makes sure that own properties are retained, so that // decorations and such are not lost along the way. -var wrappy_1 = wrappy; -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) +var wrappy_1 = wrappy$2; +function wrappy$2 (fn, cb) { + if (fn && cb) return wrappy$2(fn)(cb) if (typeof fn !== 'function') throw new TypeError('need wrapper function') @@ -12459,13 +12610,16 @@ function wrappy (fn, cb) { } } -var once_1 = wrappy_1(once); -var strict = wrappy_1(onceStrict); +var once$3 = {exports: {}}; + +var wrappy$1 = wrappy_1; +once$3.exports = wrappy$1(once$2); +once$3.exports.strict = wrappy$1(onceStrict); -once.proto = once(function () { +once$2.proto = once$2(function () { Object.defineProperty(Function.prototype, 'once', { value: function () { - return once(this) + return once$2(this) }, configurable: true }); @@ -12478,7 +12632,7 @@ once.proto = once(function () { }); }); -function once (fn) { +function once$2 (fn) { var f = function () { if (f.called) return f.value f.called = true; @@ -12500,14 +12654,14 @@ function onceStrict (fn) { f.called = false; return f } -once_1.strict = strict; +var wrappy = wrappy_1; var reqs = Object.create(null); +var once$1 = once$3.exports; +var inflight_1 = wrappy(inflight$1); -var inflight_1 = wrappy_1(inflight); - -function inflight (key, cb) { +function inflight$1 (key, cb) { if (reqs[key]) { reqs[key].push(cb); return null @@ -12518,10 +12672,10 @@ function inflight (key, cb) { } function makeres (key) { - return once_1(function RES () { + return once$1(function RES () { var cbs = reqs[key]; var len = cbs.length; - var args = slice$2(arguments); + var args = slice$4(arguments); // XXX It's somewhat ambiguous whether a new callback added in this // pass should be queued for later execution if something in the @@ -12548,7 +12702,7 @@ function makeres (key) { }) } -function slice$2 (args) { +function slice$4 (args) { var length = args.length; var array = []; @@ -12596,38 +12750,48 @@ function slice$2 (args) { // `true` for files, and [children,...] for directories, or `false` for // things that don't exist. -var glob_1 = glob; - -var EE = events__default['default'].EventEmitter; -var setopts$2 = common$2.setopts; -var ownProp$2 = common$2.ownProp; - - -var childrenIgnored$2 = common$2.childrenIgnored; -var isIgnored$2 = common$2.isIgnored; - - - -function glob (pattern, options, cb) { +var glob_1 = glob$1; + +var fs$b = require$$0__default$3['default']; +var rp = fs_realpath; +var minimatch = minimatch_1; +var inherits$2 = inherits$3.exports; +var EE = require$$0__default$4['default'].EventEmitter; +var path$a = require$$0__default$2['default']; +var assert = require$$6__default['default']; +var isAbsolute = pathIsAbsolute.exports; +var globSync = sync$3; +var common$1 = common$3; +common$1.alphasort; +common$1.alphasorti; +var setopts = common$1.setopts; +var ownProp = common$1.ownProp; +var inflight = inflight_1; +var childrenIgnored = common$1.childrenIgnored; +var isIgnored = common$1.isIgnored; + +var once = once$3.exports; + +function glob$1 (pattern, options, cb) { if (typeof options === 'function') cb = options, options = {}; if (!options) options = {}; if (options.sync) { if (cb) throw new TypeError('callback provided to sync glob') - return sync$3(pattern, options) + return globSync(pattern, options) } return new Glob(pattern, options, cb) } -glob.sync = sync$3; -var GlobSync$1 = glob.GlobSync = sync$3.GlobSync; +glob$1.sync = globSync; +var GlobSync = glob$1.GlobSync = globSync.GlobSync; // old api surface -glob.glob = glob; +glob$1.glob = glob$1; -function extend$1 (origin, add) { +function extend$3 (origin, add) { if (add === null || typeof add !== 'object') { return origin } @@ -12640,8 +12804,8 @@ function extend$1 (origin, add) { return origin } -glob.hasMagic = function (pattern, options_) { - var options = extend$1({}, options_); +glob$1.hasMagic = function (pattern, options_) { + var options = extend$3({}, options_); options.noprocess = true; var g = new Glob(pattern, options); @@ -12661,8 +12825,8 @@ glob.hasMagic = function (pattern, options_) { return false }; -glob.Glob = Glob; -inherits(Glob, EE); +glob$1.Glob = Glob; +inherits$2(Glob, EE); function Glob (pattern, options, cb) { if (typeof options === 'function') { cb = options; @@ -12672,13 +12836,13 @@ function Glob (pattern, options, cb) { if (options && options.sync) { if (cb) throw new TypeError('callback provided to sync glob') - return new GlobSync$1(pattern, options) + return new GlobSync(pattern, options) } if (!(this instanceof Glob)) return new Glob(pattern, options, cb) - setopts$2(this, pattern, options); + setopts(this, pattern, options); this._didRealPath = false; // process each pattern in the minimatch set @@ -12691,7 +12855,7 @@ function Glob (pattern, options, cb) { this.matches = new Array(n); if (typeof cb === 'function') { - cb = once_1(cb); + cb = once(cb); this.on('error', cb); this.on('end', function (matches) { cb(null, matches); @@ -12732,14 +12896,14 @@ function Glob (pattern, options, cb) { } Glob.prototype._finish = function () { - assert__default['default'](this instanceof Glob); + assert(this instanceof Glob); if (this.aborted) return if (this.realpath && !this._didRealpath) return this._realpath() - common$2.finish(this); + common$1.finish(this); this.emit('end', this.found); }; @@ -12781,7 +12945,7 @@ Glob.prototype._realpathSet = function (index, cb) { // one or more of the links in the realpath couldn't be // resolved. just return the abs value in that case. p = self._makeAbs(p); - fs_realpath.realpath(p, self.realpathCache, function (er, real) { + rp.realpath(p, self.realpathCache, function (er, real) { if (!er) set[real] = true; else if (er.syscall === 'stat') @@ -12798,11 +12962,11 @@ Glob.prototype._realpathSet = function (index, cb) { }; Glob.prototype._mark = function (p) { - return common$2.mark(this, p) + return common$1.mark(this, p) }; Glob.prototype._makeAbs = function (f) { - return common$2.makeAbs(this, f) + return common$1.makeAbs(this, f) }; Glob.prototype.abort = function () { @@ -12842,8 +13006,8 @@ Glob.prototype.resume = function () { }; Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert__default['default'](this instanceof Glob); - assert__default['default'](typeof cb === 'function'); + assert(this instanceof Glob); + assert(typeof cb === 'function'); if (this.aborted) return @@ -12891,8 +13055,8 @@ Glob.prototype._process = function (pattern, index, inGlobStar, cb) { var read; if (prefix === null) read = '.'; - else if (pathIsAbsolute(prefix) || pathIsAbsolute(pattern.join('/'))) { - if (!prefix || !pathIsAbsolute(prefix)) + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix; read = prefix; } else @@ -12901,10 +13065,10 @@ Glob.prototype._process = function (pattern, index, inGlobStar, cb) { var abs = this._makeAbs(read); //if ignored, skip _processing - if (childrenIgnored$2(this, read)) + if (childrenIgnored(this, read)) return cb() - var isGlobStar = remain[0] === minimatch_1.GLOBSTAR; + var isGlobStar = remain[0] === minimatch.GLOBSTAR; if (isGlobStar) this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb); else @@ -12972,7 +13136,7 @@ Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, in } if (e.charAt(0) === '/' && !this.nomount) { - e = path__default['default'].join(this.root, e); + e = path$a.join(this.root, e); } this._emitMatch(index, e); } @@ -13000,7 +13164,7 @@ Glob.prototype._emitMatch = function (index, e) { if (this.aborted) return - if (isIgnored$2(this, e)) + if (isIgnored(this, e)) return if (this.paused) { @@ -13008,7 +13172,7 @@ Glob.prototype._emitMatch = function (index, e) { return } - var abs = pathIsAbsolute(e) ? e : this._makeAbs(e); + var abs = isAbsolute(e) ? e : this._makeAbs(e); if (this.mark) e = this._mark(e); @@ -13045,10 +13209,10 @@ Glob.prototype._readdirInGlobStar = function (abs, cb) { var lstatkey = 'lstat\0' + abs; var self = this; - var lstatcb = inflight_1(lstatkey, lstatcb_); + var lstatcb = inflight(lstatkey, lstatcb_); if (lstatcb) - fs__default['default'].lstat(abs, lstatcb); + fs$b.lstat(abs, lstatcb); function lstatcb_ (er, lstat) { if (er && er.code === 'ENOENT') @@ -13071,15 +13235,15 @@ Glob.prototype._readdir = function (abs, inGlobStar, cb) { if (this.aborted) return - cb = inflight_1('readdir\0'+abs+'\0'+inGlobStar, cb); + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb); if (!cb) return //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp$2(this.symlinks, abs)) + if (inGlobStar && !ownProp(this.symlinks, abs)) return this._readdirInGlobStar(abs, cb) - if (ownProp$2(this.cache, abs)) { + if (ownProp(this.cache, abs)) { var c = this.cache[abs]; if (!c || c === 'FILE') return cb() @@ -13087,7 +13251,7 @@ Glob.prototype._readdir = function (abs, inGlobStar, cb) { if (Array.isArray(c)) return cb(null, c) } - fs__default['default'].readdir(abs, readdirCb(this, abs, cb)); + fs$b.readdir(abs, readdirCb(this, abs, cb)); }; function readdirCb (self, abs, cb) { @@ -13230,12 +13394,12 @@ Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { if (!exists) return cb() - if (prefix && pathIsAbsolute(prefix) && !this.nomount) { + if (prefix && isAbsolute(prefix) && !this.nomount) { var trail = /[\/\\]$/.test(prefix); if (prefix.charAt(0) === '/') { - prefix = path__default['default'].join(this.root, prefix); + prefix = path$a.join(this.root, prefix); } else { - prefix = path__default['default'].resolve(this.root, prefix); + prefix = path$a.resolve(this.root, prefix); if (trail) prefix += '/'; } @@ -13257,7 +13421,7 @@ Glob.prototype._stat = function (f, cb) { if (f.length > this.maxLength) return cb() - if (!this.stat && ownProp$2(this.cache, abs)) { + if (!this.stat && ownProp(this.cache, abs)) { var c = this.cache[abs]; if (Array.isArray(c)) @@ -13287,15 +13451,15 @@ Glob.prototype._stat = function (f, cb) { } var self = this; - var statcb = inflight_1('stat\0' + abs, lstatcb_); + var statcb = inflight('stat\0' + abs, lstatcb_); if (statcb) - fs__default['default'].lstat(abs, statcb); + fs$b.lstat(abs, statcb); function lstatcb_ (er, lstat) { if (lstat && lstat.isSymbolicLink()) { // If it's a symlink, then treat it as the target, unless // the target does not exist, then treat it as a file. - return fs__default['default'].stat(abs, function (er, stat) { + return fs$b.stat(abs, function (er, stat) { if (er) self._stat2(f, abs, null, lstat, cb); else @@ -13336,85 +13500,88 @@ Glob.prototype._stat2 = function (f, abs, er, stat, cb) { * @author Feross Aboukhadijeh * @license MIT */ + var isBuffer = function isBuffer (obj) { return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) }; -var own = {}.hasOwnProperty; +var own$g = {}.hasOwnProperty; -var unistUtilStringifyPosition = stringify; +var unistUtilStringifyPosition$3 = stringify$h; -function stringify(value) { +function stringify$h(value) { // Nothing. if (!value || typeof value !== 'object') { return '' } // Node. - if (own.call(value, 'position') || own.call(value, 'type')) { - return position(value.position) + if (own$g.call(value, 'position') || own$g.call(value, 'type')) { + return position$6(value.position) } // Position. - if (own.call(value, 'start') || own.call(value, 'end')) { - return position(value) + if (own$g.call(value, 'start') || own$g.call(value, 'end')) { + return position$6(value) } // Point. - if (own.call(value, 'line') || own.call(value, 'column')) { - return point(value) + if (own$g.call(value, 'line') || own$g.call(value, 'column')) { + return point$v(value) } // ? return '' } -function point(point) { +function point$v(point) { if (!point || typeof point !== 'object') { point = {}; } - return index(point.line) + ':' + index(point.column) + return index$4(point.line) + ':' + index$4(point.column) } -function position(pos) { +function position$6(pos) { if (!pos || typeof pos !== 'object') { pos = {}; } - return point(pos.start) + '-' + point(pos.end) + return point$v(pos.start) + '-' + point$v(pos.end) } -function index(value) { +function index$4(value) { return value && typeof value === 'number' ? value : 1 } -var vfileMessage = VMessage; +var stringify$g = unistUtilStringifyPosition$3; + +var vfileMessage$1 = VMessage$3; // Inherit from `Error#`. -function VMessagePrototype() {} -VMessagePrototype.prototype = Error.prototype; -VMessage.prototype = new VMessagePrototype(); +function VMessagePrototype$1() {} +VMessagePrototype$1.prototype = Error.prototype; +VMessage$3.prototype = new VMessagePrototype$1(); // Message properties. -var proto = VMessage.prototype; +var proto$2 = VMessage$3.prototype; -proto.file = ''; -proto.name = ''; -proto.reason = ''; -proto.message = ''; -proto.stack = ''; -proto.fatal = null; -proto.column = null; -proto.line = null; +proto$2.file = ''; +proto$2.name = ''; +proto$2.reason = ''; +proto$2.message = ''; +proto$2.stack = ''; +proto$2.fatal = null; +proto$2.column = null; +proto$2.line = null; // Construct a new VMessage. // // Note: We cannot invoke `Error` on the created context, as that adds readonly // `line` and `column` attributes on Safari 9, thus throwing and failing the // data. -function VMessage(reason, position, origin) { +function VMessage$3(reason, position, origin) { var parts; var range; var location; @@ -13424,8 +13591,8 @@ function VMessage(reason, position, origin) { position = null; } - parts = parseOrigin(origin); - range = unistUtilStringifyPosition(position) || '1:1'; + parts = parseOrigin$1(origin); + range = stringify$g(position) || '1:1'; location = { start: {line: null, column: null}, @@ -13463,7 +13630,7 @@ function VMessage(reason, position, origin) { this.ruleId = parts[1]; } -function parseOrigin(origin) { +function parseOrigin$1(origin) { var result = [null, null]; var index; @@ -13481,124 +13648,128 @@ function parseOrigin(origin) { return result } -var minpath = path__default['default']; +var minpath$1 = require$$0__default$2['default']; -var minproc = process; +var minproc$1 = process; + +var p$1 = minpath$1; +var proc$2 = minproc$1; +var buffer$5 = isBuffer; -var core$1 = VFile; +var core$3 = VFile$3; -var own$1 = {}.hasOwnProperty; +var own$f = {}.hasOwnProperty; // Order of setting (least specific to most), we need this because otherwise // `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a // stem can be set. -var order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; +var order$4 = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; -VFile.prototype.toString = toString; +VFile$3.prototype.toString = toString$9; // Access full path (`~/index.min.js`). -Object.defineProperty(VFile.prototype, 'path', {get: getPath, set: setPath}); +Object.defineProperty(VFile$3.prototype, 'path', {get: getPath$1, set: setPath$1}); // Access parent path (`~`). -Object.defineProperty(VFile.prototype, 'dirname', { - get: getDirname, - set: setDirname +Object.defineProperty(VFile$3.prototype, 'dirname', { + get: getDirname$1, + set: setDirname$1 }); // Access basename (`index.min.js`). -Object.defineProperty(VFile.prototype, 'basename', { - get: getBasename, - set: setBasename +Object.defineProperty(VFile$3.prototype, 'basename', { + get: getBasename$1, + set: setBasename$1 }); // Access extname (`.js`). -Object.defineProperty(VFile.prototype, 'extname', { - get: getExtname, - set: setExtname +Object.defineProperty(VFile$3.prototype, 'extname', { + get: getExtname$1, + set: setExtname$1 }); // Access stem (`index.min`). -Object.defineProperty(VFile.prototype, 'stem', {get: getStem, set: setStem}); +Object.defineProperty(VFile$3.prototype, 'stem', {get: getStem$1, set: setStem$1}); // Construct a new file. -function VFile(options) { +function VFile$3(options) { var prop; var index; if (!options) { options = {}; - } else if (typeof options === 'string' || isBuffer(options)) { + } else if (typeof options === 'string' || buffer$5(options)) { options = {contents: options}; } else if ('message' in options && 'messages' in options) { return options } - if (!(this instanceof VFile)) { - return new VFile(options) + if (!(this instanceof VFile$3)) { + return new VFile$3(options) } this.data = {}; this.messages = []; this.history = []; - this.cwd = minproc.cwd(); + this.cwd = proc$2.cwd(); // Set path related properties in the correct order. index = -1; - while (++index < order.length) { - prop = order[index]; + while (++index < order$4.length) { + prop = order$4[index]; - if (own$1.call(options, prop)) { + if (own$f.call(options, prop)) { this[prop] = options[prop]; } } // Set non-path related properties. for (prop in options) { - if (order.indexOf(prop) < 0) { + if (order$4.indexOf(prop) < 0) { this[prop] = options[prop]; } } } -function getPath() { +function getPath$1() { return this.history[this.history.length - 1] } -function setPath(path) { - assertNonEmpty(path, 'path'); +function setPath$1(path) { + assertNonEmpty$1(path, 'path'); if (this.path !== path) { this.history.push(path); } } -function getDirname() { - return typeof this.path === 'string' ? minpath.dirname(this.path) : undefined +function getDirname$1() { + return typeof this.path === 'string' ? p$1.dirname(this.path) : undefined } -function setDirname(dirname) { - assertPath(this.path, 'dirname'); - this.path = minpath.join(dirname || '', this.basename); +function setDirname$1(dirname) { + assertPath$1(this.path, 'dirname'); + this.path = p$1.join(dirname || '', this.basename); } -function getBasename() { - return typeof this.path === 'string' ? minpath.basename(this.path) : undefined +function getBasename$1() { + return typeof this.path === 'string' ? p$1.basename(this.path) : undefined } -function setBasename(basename) { - assertNonEmpty(basename, 'basename'); - assertPart(basename, 'basename'); - this.path = minpath.join(this.dirname || '', basename); +function setBasename$1(basename) { + assertNonEmpty$1(basename, 'basename'); + assertPart$1(basename, 'basename'); + this.path = p$1.join(this.dirname || '', basename); } -function getExtname() { - return typeof this.path === 'string' ? minpath.extname(this.path) : undefined +function getExtname$1() { + return typeof this.path === 'string' ? p$1.extname(this.path) : undefined } -function setExtname(extname) { - assertPart(extname, 'extname'); - assertPath(this.path, 'extname'); +function setExtname$1(extname) { + assertPart$1(extname, 'extname'); + assertPath$1(this.path, 'extname'); if (extname) { if (extname.charCodeAt(0) !== 46 /* `.` */) { @@ -13610,59 +13781,62 @@ function setExtname(extname) { } } - this.path = minpath.join(this.dirname, this.stem + (extname || '')); + this.path = p$1.join(this.dirname, this.stem + (extname || '')); } -function getStem() { +function getStem$1() { return typeof this.path === 'string' - ? minpath.basename(this.path, this.extname) + ? p$1.basename(this.path, this.extname) : undefined } -function setStem(stem) { - assertNonEmpty(stem, 'stem'); - assertPart(stem, 'stem'); - this.path = minpath.join(this.dirname || '', stem + (this.extname || '')); +function setStem$1(stem) { + assertNonEmpty$1(stem, 'stem'); + assertPart$1(stem, 'stem'); + this.path = p$1.join(this.dirname || '', stem + (this.extname || '')); } // Get the value of the file. -function toString(encoding) { +function toString$9(encoding) { return (this.contents || '').toString(encoding) } // Assert that `part` is not a path (i.e., does not contain `p.sep`). -function assertPart(part, name) { - if (part && part.indexOf(minpath.sep) > -1) { +function assertPart$1(part, name) { + if (part && part.indexOf(p$1.sep) > -1) { throw new Error( - '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`' + '`' + name + '` cannot be a path: did not expect `' + p$1.sep + '`' ) } } // Assert that `part` is not empty. -function assertNonEmpty(part, name) { +function assertNonEmpty$1(part, name) { if (!part) { throw new Error('`' + name + '` cannot be empty') } } // Assert `path` exists. -function assertPath(path, name) { +function assertPath$1(path, name) { if (!path) { throw new Error('Setting `' + name + '` requires `path` to be set too') } } -var lib$3 = core$1; +var VMessage$2 = vfileMessage$1; +var VFile$2 = core$3; -core$1.prototype.message = message; -core$1.prototype.info = info; -core$1.prototype.fail = fail; +var lib$6 = VFile$2; + +VFile$2.prototype.message = message$1; +VFile$2.prototype.info = info$1; +VFile$2.prototype.fail = fail$2; // Create a message with `reason` at `position`. // When an error is passed in as `reason`, copies the stack. -function message(reason, position, origin) { - var message = new vfileMessage(reason, position, origin); +function message$1(reason, position, origin) { + var message = new VMessage$2(reason, position, origin); if (this.path) { message.name = this.path + ':' + message.name; @@ -13677,7 +13851,7 @@ function message(reason, position, origin) { } // Fail: creates a vmessage, associates it with the file, and throws it. -function fail() { +function fail$2() { var message = this.message.apply(this, arguments); message.fatal = true; @@ -13687,7 +13861,7 @@ function fail() { // Info: creates a vmessage, associates it with the file, and marks the fatality // as null. -function info() { +function info$1() { var message = this.message.apply(this, arguments); message.fatal = null; @@ -13695,7 +13869,10 @@ function info() { return message } -var vfile = lib$3; +var vfile$9 = lib$6; + +var buffer$4 = isBuffer; +var vfile$8 = vfile$9; var core$2 = toVFile; @@ -13703,45 +13880,52 @@ var core$2 = toVFile; // buffer, it’s used as the path. In all other cases, the options are passed // through to `vfile()`. function toVFile(options) { - if (typeof options === 'string' || isBuffer(options)) { + if (typeof options === 'string' || buffer$4(options)) { options = {path: String(options)}; } - return vfile(options) + return vfile$8(options) } -var read$2 = readSync; -var write = writeSync; +var sync$2 = {}; + +var fs$a = require$$0__default$3['default']; +var path$9 = require$$0__default$2['default']; +var vfile$7 = core$2; + +sync$2.read = readSync; +sync$2.write = writeSync; // Create a virtual file and read it in, synchronously. function readSync(description, options) { - var file = core$2(description); - file.contents = fs__default['default'].readFileSync(path__default['default'].resolve(file.cwd, file.path), options); + var file = vfile$7(description); + file.contents = fs$a.readFileSync(path$9.resolve(file.cwd, file.path), options); return file } // Create a virtual file and write it out, synchronously. function writeSync(description, options) { - var file = core$2(description); - fs__default['default'].writeFileSync( - path__default['default'].resolve(file.cwd, file.path), + var file = vfile$7(description); + fs$a.writeFileSync( + path$9.resolve(file.cwd, file.path), file.contents || '', options ); return file } -var sync$4 = { - read: read$2, - write: write -}; +var async$1 = {}; -var read_1 = read$3; -var write_1 = write$1; +var fs$9 = require$$0__default$3['default']; +var path$8 = require$$0__default$2['default']; +var vfile$6 = core$2; + +async$1.read = read$3; +async$1.write = write; // Create a virtual file and read it in, asynchronously. function read$3(description, options, callback) { - var file = core$2(description); + var file = vfile$6(description); if (!callback && typeof options === 'function') { callback = options; @@ -13762,12 +13946,12 @@ function read$3(description, options, callback) { var fp; try { - fp = path__default['default'].resolve(file.cwd, file.path); + fp = path$8.resolve(file.cwd, file.path); } catch (error) { return reject(error) } - fs__default['default'].readFile(fp, options, done); + fs$9.readFile(fp, options, done); function done(error, res) { if (error) { @@ -13781,8 +13965,8 @@ function read$3(description, options, callback) { } // Create a virtual file and write it out, asynchronously. -function write$1(description, options, callback) { - var file = core$2(description); +function write(description, options, callback) { + var file = vfile$6(description); // Weird, right? Otherwise `fs` doesn’t accept it. if (!callback && typeof options === 'function') { @@ -13804,12 +13988,12 @@ function write$1(description, options, callback) { var fp; try { - fp = path__default['default'].resolve(file.cwd, file.path); + fp = path$8.resolve(file.cwd, file.path); } catch (error) { return reject(error) } - fs__default['default'].writeFile(fp, file.contents || '', options, done); + fs$9.writeFile(fp, file.contents || '', options, done); function done(error) { if (error) { @@ -13821,35 +14005,30 @@ function write$1(description, options, callback) { } } -var async = { - read: read_1, - write: write_1 -}; +var vfile$5 = core$2; +var sync$1 = sync$2; +var async = async$1; -var fs = core$2; +var fs$8 = vfile$5; -core$2.read = async.read; -core$2.readSync = sync$4.read; -core$2.write = async.write; -core$2.writeSync = sync$4.write; +vfile$5.read = async.read; +vfile$5.readSync = sync$1.read; +vfile$5.write = async.write; +vfile$5.writeSync = sync$1.write; -var toVfile = fs; +var toVfile = fs$8; -var readdir = fs__default['default'].readdir; -var stat = fs__default['default'].stat; -var sep$1 = path__default['default'].sep; -var join$1 = path__default['default'].join; -var relative$2 = path__default['default'].relative; -var resolve$3 = path__default['default'].resolve; -var basename = path__default['default'].basename; -var extname = path__default['default'].extname; -var magic = glob_1.hasMagic; +var path$7 = require$$0__default$2['default']; +var fs$7 = require$$0__default$3['default']; +var gitignore = ignore$2; +var glob = glob_1; +var vfile$4 = toVfile; -var finder$1 = find; +var finder = find$1; // Search `patterns`, a mix of globs, paths, and files. -function find(input, options, callback) { - expand$1(input, options, done); +function find$1(input, options, callback) { + expand$2(input, options, done); function done(error, result) { /* istanbul ignore if - glob errors are unusual. @@ -13864,8 +14043,7 @@ function find(input, options, callback) { // Expand the given glob patterns, search given and found directories, and map // to vfiles. -function expand$1(input, options, next) { - var cwd = options.cwd; +function expand$2(input, options, next) { var paths = []; var actual = 0; var expected = 0; @@ -13874,22 +14052,23 @@ function expand$1(input, options, next) { input.forEach(each); if (!expected) { - search(paths, options, done); + search$1(paths, options, done); } function each(file) { if (typeof file === 'string') { - if (magic(file)) { + if (glob.hasMagic(file)) { expected++; - glob_1(file, {cwd: cwd}, one); + glob(file, {cwd: options.cwd}, one); } else { // `relative` to make the paths canonical. - file = relative$2(cwd, resolve$3(cwd, file)) || '.'; + file = + path$7.relative(options.cwd, path$7.resolve(options.cwd, file)) || '.'; paths.push(file); } } else { - file.cwd = cwd; - file.path = relative$2(cwd, file.path); + file.cwd = options.cwd; + file.path = path$7.relative(options.cwd, file.path); file.history = [file.path]; paths.push(file); } @@ -13910,7 +14089,7 @@ function expand$1(input, options, next) { paths = paths.concat(files); if (actual === expected) { - search(paths, options, done); + search$1(paths, options, done); } } } @@ -13926,12 +14105,8 @@ function expand$1(input, options, next) { } // Search `paths`. -function search(input, options, next) { - var cwd = options.cwd; - var silent = options.silentlyIgnore; - var nested = options.nested; - var extensions = options.extensions; - var extraIgnore = ignore().add(options.ignorePatterns); +function search$1(input, options, next) { + var extraIgnore = gitignore().add(options.ignorePatterns); var files = []; var expected = 0; var actual = 0; @@ -13945,17 +14120,17 @@ function search(input, options, next) { return each function each(file) { - var ext = typeof file === 'string' ? extname(file) : file.extname; + var ext = typeof file === 'string' ? path$7.extname(file) : file.extname; var part; // Normalise globs. if (typeof file === 'string') { - file = file.split('/').join(path__default['default'].sep); + file = file.split('/').join(path$7.sep); } part = base(file); - if (nested && (part.charAt(0) === '.' || part === 'node_modules')) { + if (options.nested && (part.charAt(0) === '.' || part === 'node_modules')) { return } @@ -13971,25 +14146,25 @@ function search(input, options, next) { var ignored = result && result.ignored; var dir = result && result.stats && result.stats.isDirectory(); - if (ignored && (nested || silent)) { + if (ignored && (options.nested || options.silentlyIgnore)) { return one(null, []) } if (!ignored && dir) { - return readdir(resolve$3(cwd, filePath(file)), directory) + return fs$7.readdir(path$7.resolve(options.cwd, filePath(file)), directory) } if ( - nested && !dir && - extensions.length !== 0 && - extensions.indexOf(ext) === -1 + options.nested && + options.extensions.length > 0 && + options.extensions.indexOf(ext) === -1 ) { return one(null, []) } - file = toVfile(file); - file.cwd = cwd; + file = vfile$4(file); + file.cwd = options.cwd; if (ignored) { try { @@ -14014,8 +14189,8 @@ function search(input, options, next) { /* istanbul ignore if - Should not happen often: the directory is `stat`ed * first, which was ok, but reading it is not. */ if (error) { - file = toVfile(filePath(file)); - file.cwd = cwd; + file = vfile$4(filePath(file)); + file.cwd = options.cwd; try { file.fail('Cannot read directory'); @@ -14023,7 +14198,7 @@ function search(input, options, next) { one(null, [file]); } else { - search( + search$1( basenames.map(concat), Object.assign({}, options, {nested: true}), one @@ -14046,17 +14221,14 @@ function search(input, options, next) { } function concat(value) { - return join$1(filePath(file), value) + return path$7.join(filePath(file), value) } } } function statAndIgnore(file, options, callback) { - var ignore = options.ignore; - var extraIgnore = options.extraIgnore; - var cwd = options.cwd; - var fp = resolve$3(cwd, filePath(file)); - var normal = relative$2(cwd, fp); + var fp = path$7.resolve(options.cwd, filePath(file)); + var normal = path$7.relative(options.cwd, fp); var expected = 1; var actual = 0; var stats; @@ -14064,10 +14236,10 @@ function statAndIgnore(file, options, callback) { if (!file.contents) { expected++; - stat(fp, handleStat); + fs$7.stat(fp, handleStat); } - ignore.check(fp, handleIgnore); + options.ignore.check(fp, handleIgnore); function handleStat(error, value) { stats = value; @@ -14092,17 +14264,17 @@ function statAndIgnore(file, options, callback) { ignored || (normal === '' || normal === '..' || - normal.charAt(0) === sep$1 || - normal.slice(0, 3) === '..' + sep$1 + normal.charAt(0) === path$7.sep || + normal.slice(0, 3) === '..' + path$7.sep ? false - : extraIgnore.ignores(normal)) + : options.extraIgnore.ignores(normal)) }); } } } function base(file) { - return typeof file === 'string' ? basename(file) : file.basename + return typeof file === 'string' ? path$7.basename(file) : file.basename } function filePath(file) { @@ -14117,23 +14289,24 @@ function oneFileMode(result) { ) } -var fileSystem_1 = fileSystem; +var Ignore = ignore$1; +var find = finder; -// Find files from the file-system. -function fileSystem(context, settings, next) { - var input = context.files; +var fileSystem_1$1 = fileSystem$3; - if (input.length === 0) { +// Find files from the file-system. +function fileSystem$3(context, settings, next) { + if (context.files.length === 0) { next(); } else { - finder$1( - input, + find( + context.files, { cwd: settings.cwd, extensions: settings.extensions, silentlyIgnore: settings.silentlyIgnore, ignorePatterns: settings.ignorePatterns, - ignore: new ignore$1({ + ignore: new Ignore({ cwd: settings.cwd, detectIgnore: settings.detectIgnore, ignoreName: settings.ignoreName, @@ -14177,16 +14350,19 @@ function fileSystem(context, settings, next) { } } -var toString$1 = Object.prototype.toString; +/* eslint-disable node/no-deprecated-api */ + +var toString$8 = Object.prototype.toString; var isModern = ( + typeof Buffer !== 'undefined' && typeof Buffer.alloc === 'function' && typeof Buffer.allocUnsafe === 'function' && typeof Buffer.from === 'function' ); function isArrayBuffer (input) { - return toString$1.call(input).slice(8, -1) === 'ArrayBuffer' + return toString$8.call(input).slice(8, -1) === 'ArrayBuffer' } function fromArrayBuffer (obj, byteOffset, length) { @@ -14227,7 +14403,7 @@ function fromString (string, encoding) { : new Buffer(string, encoding) } -function bufferFrom (value, encodingOrOffset, length) { +function bufferFrom$1 (value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } @@ -14245,9 +14421,11 @@ function bufferFrom (value, encodingOrOffset, length) { : new Buffer(value) } -var bufferFrom_1 = bufferFrom; +var bufferFrom_1 = bufferFrom$1; -var typedarray = createCommonjsModule(function (module, exports) { +var typedarray = {}; + +(function (exports) { var undefined$1 = (void 0); // Paranoia // Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to @@ -14877,11 +15055,11 @@ function packF32(v) { return packIEEE754(v, 8, 23); } exports.DataView = exports.DataView || DataView; }()); -}); - -var Writable = require$$0__default['default'].Writable; - +}(typedarray)); +var Writable = require$$0__default$5['default'].Writable; +var inherits$1 = inherits$3.exports; +var bufferFrom = bufferFrom_1; if (typeof Uint8Array === 'undefined') { var U8 = typedarray.Uint8Array; @@ -14920,7 +15098,7 @@ function ConcatStream(opts, cb) { } var concatStream = ConcatStream; -inherits(ConcatStream, Writable); +inherits$1(ConcatStream, Writable); ConcatStream.prototype._write = function(chunk, enc, next) { this.body.push(chunk); @@ -14947,12 +15125,12 @@ ConcatStream.prototype.getBody = function () { return this.body }; -function isArrayish$1 (arr) { +function isArrayish (arr) { return /Array\]$/.test(Object.prototype.toString.call(arr)) } function isBufferish (p) { - return typeof p === 'string' || isArrayish$1(p) || (p && typeof p.subarray === 'function') + return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function') } function stringConcat (parts) { @@ -14964,9 +15142,9 @@ function stringConcat (parts) { } else if (Buffer.isBuffer(p)) { strings.push(p); } else if (isBufferish(p)) { - strings.push(bufferFrom_1(p)); + strings.push(bufferFrom(p)); } else { - strings.push(bufferFrom_1(String(p))); + strings.push(bufferFrom(String(p))); } } if (Buffer.isBuffer(parts[0])) { @@ -14985,9 +15163,9 @@ function bufferConcat (parts) { if (Buffer.isBuffer(p)) { bufs.push(p); } else if (isBufferish(p)) { - bufs.push(bufferFrom_1(p)); + bufs.push(bufferFrom(p)); } else { - bufs.push(bufferFrom_1(String(p))); + bufs.push(bufferFrom(String(p))); } } return Buffer.concat(bufs) @@ -15005,7 +15183,7 @@ function u8Concat (parts) { var len = 0; for (var i = 0; i < parts.length; i++) { if (typeof parts[i] === 'string') { - parts[i] = bufferFrom_1(parts[i]); + parts[i] = bufferFrom(parts[i]); } len += parts[i].length; } @@ -15019,18 +15197,17 @@ function u8Concat (parts) { return u8 } -var debug$1 = src('unified-engine:file-set-pipeline:stdin'); +var debug$b = src.exports('unified-engine:file-set-pipeline:stdin'); +var vfile$3 = toVfile; +var concat = concatStream; +var stdin_1 = stdin$1; - -var stdin_1 = stdin; - -function stdin(context, settings, next) { - var streamIn = settings.streamIn; +function stdin$1(context, settings, next) { var error; - if (settings.files && settings.files.length !== 0) { - debug$1('Ignoring `streamIn`'); + if (settings.files && settings.files.length > 0) { + debug$b('Ignoring `streamIn`'); if (settings.filePath) { error = new Error( @@ -15043,21 +15220,21 @@ function stdin(context, settings, next) { return } - if (streamIn.isTTY) { - debug$1('Cannot read from `tty` stream'); + if (settings.streamIn.isTTY) { + debug$b('Cannot read from `tty` stream'); next(new Error('No input')); return } - debug$1('Reading from `streamIn`'); + debug$b('Reading from `streamIn`'); - streamIn.pipe(concatStream({encoding: 'string'}, read)); + settings.streamIn.pipe(concat({encoding: 'string'}, read)); function read(value) { - var file = toVfile(settings.filePath || undefined); + var file = vfile$3(settings.filePath || undefined); - debug$1('Read from `streamIn`'); + debug$b('Read from `streamIn`'); file.cwd = settings.cwd; file.contents = value; @@ -15074,14 +15251,15 @@ function stdin(context, settings, next) { } } -var inherits$1 = util__default['default'].inherits; - - +var events = require$$0__default$4['default']; +var inherits = require$$0__default['default'].inherits; +var trough$4 = trough_1$1; +var vfile$2 = toVfile; -var fileSet = FileSet; +var fileSet = FileSet$1; // FileSet constructor. -function FileSet() { +function FileSet$1() { var self = this; self.files = []; @@ -15090,21 +15268,21 @@ function FileSet() { self.expected = 0; self.actual = 0; - self.pipeline = trough_1(); + self.pipeline = trough$4(); self.plugins = []; - events__default['default'].init.call(self); + events.init.call(self); - self.on('one', one.bind(self)); + self.on('one', one$1.bind(self)); } // Events. -inherits$1(FileSet, events__default['default'].EventEmitter); +inherits(FileSet$1, events.EventEmitter); // Expose methods. -FileSet.prototype.valueOf = valueOf; -FileSet.prototype.use = use; -FileSet.prototype.add = add; +FileSet$1.prototype.valueOf = valueOf; +FileSet$1.prototype.use = use; +FileSet$1.prototype.add = add; // Create an array representation of `fileSet`. function valueOf() { @@ -15142,20 +15320,17 @@ function use(plugin) { // Only runs `file-pipeline` on files which have not `failed` before addition. function add(file) { var self = this; - var origin; if (typeof file === 'string') { - file = toVfile(file); + file = vfile$2(file); } // Prevent files from being added multiple times. - origin = file.history[0]; - - if (self.origins.indexOf(origin) !== -1) { + if (self.origins.indexOf(file.history[0]) !== -1) { return self } - self.origins.push(origin); + self.origins.push(file.history[0]); // Add. self.valueOf().push(file); @@ -15175,7 +15350,7 @@ function add(file) { // Utility invoked when a single file has completed it's pipeline, triggering // `done` when all files are complete. -function one() { +function one$1() { var self = this; self.actual++; @@ -15185,33 +15360,32 @@ function one() { } } -var debug$2 = src('unified-engine:file-pipeline:read'); - +var fs$6 = require$$0__default$3['default']; +var path$6 = require$$0__default$2['default']; +var debug$a = src.exports('unified-engine:file-pipeline:read'); +var stats$7 = vfileStatistics; -var read_1$1 = read$4; - -var resolve$4 = path__default['default'].resolve; -var readFile = fs__default['default'].readFile; +var read_1 = read$2; // Fill a file with its contents when not already filled. -function read$4(context, file, fileSet, next) { +function read$2(context, file, fileSet, next) { var filePath = file.path; if (file.contents || file.data.unifiedEngineStreamIn) { - debug$2('Not reading file `%s` with contents', filePath); + debug$a('Not reading file `%s` with contents', filePath); next(); - } else if (vfileStatistics(file).fatal) { - debug$2('Not reading failed file `%s`', filePath); + } else if (stats$7(file).fatal) { + debug$a('Not reading failed file `%s`', filePath); next(); } else { - filePath = resolve$4(context.cwd, filePath); + filePath = path$6.resolve(context.cwd, filePath); - debug$2('Reading `%s` in `%s`', filePath, 'utf8'); - readFile(filePath, 'utf8', onread); + debug$a('Reading `%s` in `%s`', filePath, 'utf8'); + fs$6.readFile(filePath, 'utf8', onread); } function onread(error, contents) { - debug$2('Read `%s` (error: %s)', filePath, error); + debug$a('Read `%s` (error: %s)', filePath, error); file.contents = contents || ''; @@ -15233,7 +15407,7 @@ var has = Object.prototype.hasOwnProperty; * @type {Function} */ -var toString$2 = Object.prototype.toString; +var toString$7 = Object.prototype.toString; /** * Test whether a value is "empty". @@ -15242,7 +15416,7 @@ var toString$2 = Object.prototype.toString; * @return {Boolean} */ -function isEmpty(val) { +function isEmpty$1(val) { // Null and Undefined... if (val == null) return true @@ -15265,7 +15439,7 @@ function isEmpty(val) { if (val instanceof Error) return val.message === '' // Objects... - if (val.toString == toString$2) { + if (val.toString == toString$7) { switch (val.toString()) { // Maps, Sets, Files and Errors... @@ -15296,65 +15470,58 @@ function isEmpty(val) { * @type {Function} */ -var lib$4 = isEmpty; - -var debug$3 = src('unified-engine:file-pipeline:configure'); +var lib$5 = isEmpty$1; +var debug$9 = src.exports('unified-engine:file-pipeline:configure'); +var stats$6 = vfileStatistics; +var empty$3 = lib$5; - -var configure_1$1 = configure$1; +var configure_1$1 = configure$5; // Collect configuration for a file based on the context. -function configure$1(context, file, fileSet, next) { - var config = context.configuration; - var processor = context.processor; - - if (vfileStatistics(file).fatal) { +function configure$5(context, file, fileSet, next) { + if (stats$6(file).fatal) { return next() } - config.load(file.path, handleConfiguration); + context.configuration.load(file.path, handleConfiguration); function handleConfiguration(error, configuration) { - var plugins; - var options; + var index = -1; var plugin; - var length; - var index; - var name; + var options; if (error) { return next(error) } // Store configuration on the context object. - debug$3('Using settings `%j`', configuration.settings); - processor.data('settings', configuration.settings); - - plugins = configuration.plugins; - length = plugins.length; - index = -1; + debug$9('Using settings `%j`', configuration.settings); + context.processor.data('settings', configuration.settings); - debug$3('Using `%d` plugins', length); + debug$9('Using `%d` plugins', configuration.plugins.length); - while (++index < length) { - plugin = plugins[index][0]; - options = plugins[index][1]; + while (++index < configuration.plugins.length) { + plugin = configuration.plugins[index][0]; + options = configuration.plugins[index][1]; if (options === false) { continue } // Allow for default arguments in es2020. - if (options === null || (typeof options === 'object' && lib$4(options))) { + if (options === null || (typeof options === 'object' && empty$3(options))) { options = undefined; } - name = plugin.displayName || plugin.name || 'function'; - debug$3('Using plugin `%s`, with options `%j`', name, options); + debug$9( + 'Using plugin `%s`, with options `%j`', + plugin.displayName || plugin.name || 'function', + options + ); try { - processor.use(plugin, options, fileSet); + context.processor.use(plugin, options, fileSet); } catch (error_) { /* istanbul ignore next - Should not happen anymore! */ return next(error_) @@ -15365,25 +15532,25 @@ function configure$1(context, file, fileSet, next) { } } -var debug$4 = src('unified-engine:file-pipeline:parse'); - - +var debug$8 = src.exports('unified-engine:file-pipeline:parse'); +var stats$5 = vfileStatistics; +var json$1 = parseJson_1; -var parse_1 = parse$3; +var parse_1$4 = parse$a; // Fill a file with a tree. -function parse$3(context, file) { +function parse$a(context, file) { var message; - if (vfileStatistics(file).fatal) { + if (stats$5(file).fatal) { return } if (context.treeIn) { - debug$4('Not parsing already parsed document'); + debug$8('Not parsing already parsed document'); try { - context.tree = parseJson$1(file.toString()); + context.tree = json$1(file.toString()); } catch (error) { message = file.message( new Error('Cannot read file as JSON\n' + error.message) @@ -15403,42 +15570,42 @@ function parse$3(context, file) { return } - debug$4('Parsing `%s`', file.path); + debug$8('Parsing `%s`', file.path); context.tree = context.processor.parse(file); - debug$4('Parsed document'); + debug$8('Parsed document'); } -var debug$5 = src('unified-engine:file-pipeline:transform'); +var debug$7 = src.exports('unified-engine:file-pipeline:transform'); +var stats$4 = vfileStatistics; - -var transform_1 = transform; +var transform_1$1 = transform$5; // Transform the tree associated with a file with configured plugins. -function transform(context, file, fileSet, next) { - if (vfileStatistics(file).fatal) { +function transform$5(context, file, fileSet, next) { + if (stats$4(file).fatal) { next(); } else { - debug$5('Transforming document `%s`', file.path); + debug$7('Transforming document `%s`', file.path); context.processor.run(context.tree, file, onrun); } function onrun(error, node) { - debug$5('Transformed document (error: %s)', error); + debug$7('Transformed document (error: %s)', error); context.tree = node; next(error); } } -var debug$6 = src('unified-engine:file-pipeline:queue'); - +var debug$6 = src.exports('unified-engine:file-pipeline:queue'); +var stats$3 = vfileStatistics; -var queue_1 = queue; +var queue_1 = queue$1; // Queue all files which came this far. // When the last file gets here, run the file-set pipeline and flush the queue. -function queue(context, file, fileSet, next) { +function queue$1(context, file, fileSet, next) { var origin = file.history[0]; var map = fileSet.complete; var complete = true; @@ -15466,7 +15633,7 @@ function queue(context, file, fileSet, next) { function each(file) { var key = file.history[0]; - if (vfileStatistics(file).fatal) { + if (stats$3(file).fatal) { return } @@ -15488,21 +15655,23 @@ function queue(context, file, fileSet, next) { } } +var isEmpty = lib$5; + // Detect color support. -var color = true; +var color$E = true; try { - color = 'inspect' in util__default['default']; + color$E = 'inspect' in require$$0__default['default']; } catch (_) { /* istanbul ignore next - browser */ - color = false; + color$E = false; } -var unistUtilInspect = color ? inspect : /* istanbul ignore next */ noColor; +var unistUtilInspect = color$E ? inspect$2 : /* istanbul ignore next */ noColor; -inspect.color = inspect; -noColor.color = inspect; -inspect.noColor = noColor; +inspect$2.color = inspect$2; +noColor.color = inspect$2; +inspect$2.noColor = noColor; noColor.noColor = noColor; var dim = ansiColor(2, 22); @@ -15524,15 +15693,15 @@ var colorExpression = new RegExp( // Standard keys defined by unist: https://github.com/syntax-tree/unist. // We don’t ignore `data` though. -var ignore$2 = ['type', 'value', 'children', 'position']; +var ignore = ['type', 'value', 'children', 'position']; // Inspects a node, without using color. function noColor(node, pad) { - return stripColor(inspect(node, pad)) + return stripColor(inspect$2(node, pad)) } // Inspects a node. -function inspect(node, pad) { +function inspect$2(node, pad) { var result; var children; var index; @@ -15544,7 +15713,7 @@ function inspect(node, pad) { result = []; while (++index < length) { - result[index] = inspect(node[index]); + result[index] = inspect$2(node[index]); } return result.join('\n') @@ -15571,9 +15740,9 @@ function inspect(node, pad) { node = children[index]; if (index === length - 1) { - result.push(formatNesting(pad + '└─ ') + inspect(node, pad + ' ')); + result.push(formatNesting(pad + '└─ ') + inspect$2(node, pad + ' ')); } else { - result.push(formatNesting(pad + '├─ ') + inspect(node, pad + '│ ')); + result.push(formatNesting(pad + '├─ ') + inspect$2(node, pad + '│ ')); } } @@ -15586,7 +15755,7 @@ function formatNesting(value) { } // Compile a single position. -function compile(pos) { +function compile$2(pos) { var values = []; if (!pos) { @@ -15603,7 +15772,7 @@ function compile(pos) { } // Compile a location. -function stringify$1(start, end) { +function stringify$f(start, end) { var values = []; var positions = []; var offsets = []; @@ -15623,7 +15792,7 @@ function stringify$1(start, end) { // Add a position. function add(position) { - var tuple = compile(position); + var tuple = compile$2(position); if (tuple) { positions.push(tuple[0]); @@ -15639,7 +15808,7 @@ function stringify$1(start, end) { function formatNode(node) { var log = node.type; var location = node.position || {}; - var position = stringify$1(location.start, location.end); + var position = stringify$f(location.start, location.end); var key; var values = []; var value; @@ -15658,10 +15827,10 @@ function formatNode(node) { value = node[key]; if ( - ignore$2.indexOf(key) !== -1 || + ignore.indexOf(key) !== -1 || value === null || value === undefined || - (typeof value === 'object' && lib$4(value)) + (typeof value === 'object' && isEmpty(value)) ) { continue } @@ -15690,30 +15859,28 @@ function ansiColor(open, close) { } } -var debug$7 = src('unified-engine:file-pipeline:stringify'); - +var debug$5 = src.exports('unified-engine:file-pipeline:stringify'); +var buffer$3 = isBuffer; +var stats$2 = vfileStatistics; +var inspect$1 = unistUtilInspect; - - -var stringify_1 = stringify$2; +var stringify_1 = stringify$e; // Stringify a tree. -function stringify$2(context, file) { - var processor = context.processor; - var tree = context.tree; +function stringify$e(context, file) { var value; - if (vfileStatistics(file).fatal) { - debug$7('Not compiling failed document'); + if (stats$2(file).fatal) { + debug$5('Not compiling failed document'); return } if (!context.output && !context.out && !context.alwaysStringify) { - debug$7('Not compiling document without output settings'); + debug$5('Not compiling document without output settings'); return } - debug$7('Compiling `%s`', file.path); + debug$5('Compiling `%s`', file.path); if (context.inspect) { // Add a `txt` extension if there is a path. @@ -15721,7 +15888,7 @@ function stringify$2(context, file) { file.extname = '.txt'; } - value = unistUtilInspect[context.color ? 'color' : 'noColor'](tree) + '\n'; + value = inspect$1[context.color ? 'color' : 'noColor'](context.tree) + '\n'; } else if (context.treeOut) { // Add a `json` extension to ensure the file is correctly seen as JSON. // Only add it if there is a path — not if the file is for example stdin. @@ -15730,59 +15897,55 @@ function stringify$2(context, file) { } // Add the line feed to create a valid UNIX file. - value = JSON.stringify(tree, null, 2) + '\n'; + value = JSON.stringify(context.tree, null, 2) + '\n'; } else { - value = processor.stringify(tree, file); + value = context.processor.stringify(context.tree, file); } - if (value === undefined || value === null) ; else if (typeof value === 'string' || isBuffer(value)) { + if (value === undefined || value === null) ; else if (typeof value === 'string' || buffer$3(value)) { file.contents = value; } else { file.result = value; } - debug$7('Serialized document'); + debug$5('Serialized document'); } -var debug$8 = src('unified-engine:file-pipeline:copy'); +var fs$5 = require$$0__default$3['default']; +var path$5 = require$$0__default$2['default']; +var debug$4 = src.exports('unified-engine:file-pipeline:copy'); -var copy_1 = copy; - -var stat$1 = fs__default['default'].stat; -var dirname$2 = path__default['default'].dirname; -var resolve$5 = path__default['default'].resolve; -var relative$3 = path__default['default'].relative; +var copy_1 = copy$4; // Move a file. -function copy(context, file, fileSet, next) { +function copy$4(context, file, fileSet, next) { var output = context.output; - var multi = fileSet.expected > 1; var outpath = output; var currentPath = file.path; if (typeof outpath !== 'string') { - debug$8('Not copying'); + debug$4('Not copying'); return next() } - outpath = resolve$5(context.cwd, outpath); + outpath = path$5.resolve(context.cwd, outpath); - debug$8('Copying `%s`', currentPath); + debug$4('Copying `%s`', currentPath); - stat$1(outpath, onstatfile); + fs$5.stat(outpath, onstatfile); function onstatfile(error, stats) { if (error) { if ( error.code !== 'ENOENT' || - output.charAt(output.length - 1) === path__default['default'].sep + output.charAt(output.length - 1) === path$5.sep ) { return next( new Error('Cannot read output directory. Error:\n' + error.message) ) } - stat$1(dirname$2(outpath), onstatparent); + fs$5.stat(path$5.dirname(outpath), onstatparent); } else { done(stats.isDirectory()); } @@ -15799,90 +15962,100 @@ function copy(context, file, fileSet, next) { } function done(directory) { - if (!directory && multi) { + if (!directory && fileSet.expected > 1) { return next( new Error('Cannot write multiple files to single output: ' + outpath) ) } - file[directory ? 'dirname' : 'path'] = relative$3(file.cwd, outpath); + file[directory ? 'dirname' : 'path'] = path$5.relative(file.cwd, outpath); - debug$8('Copying document from %s to %s', currentPath, file.path); + debug$4('Copying document from %s to %s', currentPath, file.path); next(); } } -var debug$9 = src('unified-engine:file-pipeline:stdout'); - +var debug$3 = src.exports('unified-engine:file-pipeline:stdout'); +var stats$1 = vfileStatistics; -var stdout_1 = stdout; +var stdout_1 = stdout$1; // Write a virtual file to `streamOut`. // Ignored when `output` is given, more than one file was processed, or `out` // is false. -function stdout(context, file, fileSet, next) { +function stdout$1(context, file, fileSet, next) { if (!file.data.unifiedEngineGiven) { - debug$9('Ignoring programmatically added file'); + debug$3('Ignoring programmatically added file'); next(); - } else if (vfileStatistics(file).fatal || context.output || !context.out) { - debug$9('Ignoring writing to `streamOut`'); + } else if (stats$1(file).fatal || context.output || !context.out) { + debug$3('Ignoring writing to `streamOut`'); next(); } else { - debug$9('Writing document to `streamOut`'); + debug$3('Writing document to `streamOut`'); context.streamOut.write(file.toString(), next); } } -var debug$a = src('unified-engine:file-pipeline:file-system'); +var fs$4 = require$$0__default$3['default']; +var path$4 = require$$0__default$2['default']; +var debug$2 = src.exports('unified-engine:file-pipeline:file-system'); +var stats = vfileStatistics; - -var fileSystem_1$1 = fileSystem$1; - -var writeFile = fs__default['default'].writeFile; -var resolve$6 = path__default['default'].resolve; +var fileSystem_1 = fileSystem$2; // Write a virtual file to the file-system. // Ignored when `output` is not given. -function fileSystem$1(context, file, fileSet, next) { +function fileSystem$2(context, file, fileSet, next) { var destinationPath; if (!context.output) { - debug$a('Ignoring writing to file-system'); + debug$2('Ignoring writing to file-system'); return next() } if (!file.data.unifiedEngineGiven) { - debug$a('Ignoring programmatically added file'); + debug$2('Ignoring programmatically added file'); return next() } destinationPath = file.path; if (!destinationPath) { - debug$a('Cannot write file without a `destinationPath`'); + debug$2('Cannot write file without a `destinationPath`'); return next(new Error('Cannot write file without an output path')) } - if (vfileStatistics(file).fatal) { - debug$a('Cannot write file with a fatal error'); + if (stats(file).fatal) { + debug$2('Cannot write file with a fatal error'); return next() } - destinationPath = resolve$6(context.cwd, destinationPath); - debug$a('Writing document to `%s`', destinationPath); + destinationPath = path$4.resolve(context.cwd, destinationPath); + debug$2('Writing document to `%s`', destinationPath); file.stored = true; - writeFile(destinationPath, file.toString(), next); + fs$4.writeFile(destinationPath, file.toString(), next); } +var trough$3 = trough_1$1; +var read$1 = read_1; +var configure$4 = configure_1$1; +var parse$9 = parse_1$4; +var transform$4 = transform_1$1; +var queue = queue_1; +var stringify$d = stringify_1; +var copy$3 = copy_1; +var stdout = stdout_1; +var fileSystem$1 = fileSystem_1; + // This pipeline ensures each of the pipes always runs: even if the read pipe // fails, queue and write run. -var filePipeline = trough_1() - .use(chunk(trough_1().use(read_1$1).use(configure_1$1).use(parse_1).use(transform_1))) - .use(chunk(trough_1().use(queue_1))) - .use(chunk(trough_1().use(stringify_1).use(copy_1).use(stdout_1).use(fileSystem_1$1))); +var filePipeline$1 = trough$3() + .use(chunk(trough$3().use(read$1).use(configure$4).use(parse$9).use(transform$4))) + .use(chunk(trough$3().use(queue))) + .use(chunk(trough$3().use(stringify$d).use(copy$3).use(stdout).use(fileSystem$1))); // Factory to run a pipe. // Wraps a pipe to trigger an error on the `file` in `context`, but still call @@ -15914,20 +16087,23 @@ function chunk(pipe) { } } -var transform_1$1 = transform$1; +var FileSet = fileSet; +var filePipeline = filePipeline$1; + +var transform_1 = transform$3; // Transform all files. -function transform$1(context, settings, next) { - var fileSet$1 = new fileSet(); +function transform$3(context, settings, next) { + var fileSet = new FileSet(); - context.fileSet = fileSet$1; + context.fileSet = fileSet; - fileSet$1.on('add', add).on('done', next); + fileSet.on('add', add).on('done', next); if (context.files.length === 0) { next(); } else { - context.files.forEach(fileSet$1.add, fileSet$1); + context.files.forEach(fileSet.add, fileSet); } function add(file) { @@ -15948,7 +16124,7 @@ function transform$1(context, settings, next) { alwaysStringify: settings.alwaysStringify }, file, - fileSet$1, + fileSet, done ); @@ -15962,12 +16138,12 @@ function transform$1(context, settings, next) { error.fatal = true; } - fileSet$1.emit('one', file); + fileSet.emit('one', file); } } } -var hasFlag$2 = (flag, argv) => { +var hasFlag$1 = (flag, argv) => { argv = argv || process.argv; const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); const pos = argv.indexOf(prefix + flag); @@ -15975,31 +16151,34 @@ var hasFlag$2 = (flag, argv) => { return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; -const {env: env$2} = process; +const os = require$$0__default$1['default']; +const hasFlag = hasFlag$1; -let forceColor$2; -if (hasFlag$2('no-color') || - hasFlag$2('no-colors') || - hasFlag$2('color=false') || - hasFlag$2('color=never')) { - forceColor$2 = 0; -} else if (hasFlag$2('color') || - hasFlag$2('colors') || - hasFlag$2('color=true') || - hasFlag$2('color=always')) { - forceColor$2 = 1; +const {env} = process; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; } -if ('FORCE_COLOR' in env$2) { - if (env$2.FORCE_COLOR === true || env$2.FORCE_COLOR === 'true') { - forceColor$2 = 1; - } else if (env$2.FORCE_COLOR === false || env$2.FORCE_COLOR === 'false') { - forceColor$2 = 0; +if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === true || env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === false || env.FORCE_COLOR === 'false') { + forceColor = 0; } else { - forceColor$2 = env$2.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env$2.FORCE_COLOR, 10), 3); + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); } } -function translateLevel$2(level) { +function translateLevel(level) { if (level === 0) { return false; } @@ -16012,28 +16191,28 @@ function translateLevel$2(level) { }; } -function supportsColor$2(stream) { - if (forceColor$2 === 0) { +function supportsColor(stream) { + if (forceColor === 0) { return 0; } - if (hasFlag$2('color=16m') || - hasFlag$2('color=full') || - hasFlag$2('color=truecolor')) { + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { return 3; } - if (hasFlag$2('color=256')) { + if (hasFlag('color=256')) { return 2; } - if (stream && !stream.isTTY && forceColor$2 === undefined) { + if (stream && !stream.isTTY && forceColor === undefined) { return 0; } - const min = forceColor$2 || 0; + const min = forceColor || 0; - if (env$2.TERM === 'dumb') { + if (env.TERM === 'dumb') { return min; } @@ -16044,7 +16223,7 @@ function supportsColor$2(stream) { // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows // release that supports 256 colors. Windows 10 build 14931 is the first release // that supports 16m/TrueColor. - const osRelease = os__default['default'].release().split('.'); + const osRelease = os.release().split('.'); if ( Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && @@ -16056,26 +16235,26 @@ function supportsColor$2(stream) { return 1; } - if ('CI' in env$2) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env$2) || env$2.CI_NAME === 'codeship') { + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { return 1; } return min; } - if ('TEAMCITY_VERSION' in env$2) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0; + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; } - if (env$2.COLORTERM === 'truecolor') { + if (env.COLORTERM === 'truecolor') { return 3; } - if ('TERM_PROGRAM' in env$2) { - const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - switch (env$2.TERM_PROGRAM) { + switch (env.TERM_PROGRAM) { case 'iTerm.app': return version >= 3 ? 3 : 2; case 'Apple_Terminal': @@ -16084,33 +16263,35 @@ function supportsColor$2(stream) { } } - if (/-256(color)?$/i.test(env$2.TERM)) { + if (/-256(color)?$/i.test(env.TERM)) { return 2; } - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) { + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { return 1; } - if ('COLORTERM' in env$2) { + if ('COLORTERM' in env) { return 1; } return min; } -function getSupportLevel$2(stream) { - const level = supportsColor$2(stream); - return translateLevel$2(level); +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); } -var supportsColor_1$2 = { - supportsColor: getSupportLevel$2, - stdout: getSupportLevel$2(process.stdout), - stderr: getSupportLevel$2(process.stderr) +var supportsColor_1 = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) }; -var ansiRegex = ({onlyFirst = false} = {}) => { +var stringWidth$1 = {exports: {}}; + +var ansiRegex$1 = ({onlyFirst = false} = {}) => { const pattern = [ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' @@ -16119,11 +16300,15 @@ var ansiRegex = ({onlyFirst = false} = {}) => { return new RegExp(pattern, onlyFirst ? undefined : 'g'); }; -var stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; +const ansiRegex = ansiRegex$1; + +var stripAnsi$1 = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +var isFullwidthCodePoint$2 = {exports: {}}; /* eslint-disable yoda */ -const isFullwidthCodePoint = codePoint => { +const isFullwidthCodePoint$1 = codePoint => { if (Number.isNaN(codePoint)) { return false; } @@ -16168,24 +16353,31 @@ const isFullwidthCodePoint = codePoint => { return false; }; -var isFullwidthCodePoint_1 = isFullwidthCodePoint; -var _default$5 = isFullwidthCodePoint; -isFullwidthCodePoint_1.default = _default$5; +isFullwidthCodePoint$2.exports = isFullwidthCodePoint$1; +isFullwidthCodePoint$2.exports.default = isFullwidthCodePoint$1; -var emojiRegex = function () { +var emojiRegex$1 = function () { // https://mths.be/emoji return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; }; -const stringWidth = string => { - string = string.replace(emojiRegex(), ' '); +const stripAnsi = stripAnsi$1; +const isFullwidthCodePoint = isFullwidthCodePoint$2.exports; +const emojiRegex = emojiRegex$1; +const stringWidth = string => { if (typeof string !== 'string' || string.length === 0) { return 0; } string = stripAnsi(string); + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + let width = 0; for (let i = 0; i < string.length; i++) { @@ -16206,16 +16398,64 @@ const stringWidth = string => { i++; } - width += isFullwidthCodePoint_1(code) ? 2 : 1; + width += isFullwidthCodePoint(code) ? 2 : 1; } return width; }; -var stringWidth_1 = stringWidth; +stringWidth$1.exports = stringWidth; // TODO: remove this in the next major version -var _default$6 = stringWidth; -stringWidth_1.default = _default$6; +stringWidth$1.exports.default = stringWidth; + +var own$e = {}.hasOwnProperty; + +var unistUtilStringifyPosition$2 = stringify$c; + +function stringify$c(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if (own$e.call(value, 'position') || own$e.call(value, 'type')) { + return position$5(value.position) + } + + // Position. + if (own$e.call(value, 'start') || own$e.call(value, 'end')) { + return position$5(value) + } + + // Point. + if (own$e.call(value, 'line') || own$e.call(value, 'column')) { + return point$u(value) + } + + // ? + return '' +} + +function point$u(point) { + if (!point || typeof point !== 'object') { + point = {}; + } + + return index$3(point.line) + ':' + index$3(point.column) +} + +function position$5(pos) { + if (!pos || typeof pos !== 'object') { + pos = {}; + } + + return point$u(pos.start) + '-' + point$u(pos.end) +} + +function index$3(value) { + return value && typeof value === 'number' ? value : 1 +} /*! * repeat-string @@ -16235,7 +16475,7 @@ var cache; * Expose `repeat` */ -var repeatString = repeat$1; +var repeatString = repeat$7; /** * Repeat the given `string` the specified `number` @@ -16255,7 +16495,7 @@ var repeatString = repeat$1; * @api public */ -function repeat$1(str, num) { +function repeat$7(str, num) { if (typeof str !== 'string') { throw new TypeError('expected a string'); } @@ -16286,7 +16526,7 @@ function repeat$1(str, num) { return res; } -var vfileSort = sort; +var vfileSort = sort$1; var severities = { true: 2, @@ -16295,45 +16535,45 @@ var severities = { undefined: 0 }; -function sort(file) { +function sort$1(file) { file.messages.sort(comparator); return file } function comparator(a, b) { return ( - check$1(a, b, 'line') || - check$1(a, b, 'column') || + check$4(a, b, 'line') || + check$4(a, b, 'column') || severities[b.fatal] - severities[a.fatal] || - compare(a, b, 'source') || - compare(a, b, 'ruleId') || - compare(a, b, 'reason') || + compare$3(a, b, 'source') || + compare$3(a, b, 'ruleId') || + compare$3(a, b, 'reason') || 0 ) } -function check$1(a, b, property) { +function check$4(a, b, property) { return (a[property] || 0) - (b[property] || 0) } -function compare(a, b, property) { +function compare$3(a, b, property) { return (a[property] || '').localeCompare(b[property] || '') } -var supported = supportsColor_1$2.stderr.hasBasic; - - - +var supported = supportsColor_1.stderr.hasBasic; +var width = stringWidth$1.exports; +var stringify$b = unistUtilStringifyPosition$2; +var repeat$6 = repeatString; +var statistics$1 = vfileStatistics; +var sort = vfileSort; +var vfileReporter = reporter$1; - -var vfileReporter = reporter; - -var push = [].push; +var push$1 = [].push; // `log-symbols` without chalk: /* istanbul ignore next - Windows. */ -var chars = +var chars$1 = process.platform === 'win32' ? {error: '×', warning: '‼'} : {error: '✖', warning: '⚠'}; @@ -16346,7 +16586,7 @@ var labels = { }; // Report a file’s messages. -function reporter(files, options) { +function reporter$1(files, options) { var settings = options || {}; var one; @@ -16365,7 +16605,7 @@ function reporter(files, options) { files = [files]; } - return format$1(transform$2(files, settings), one, settings) + return format(transform$2(files, settings), one, settings) } function transform$2(files, options) { @@ -16381,7 +16621,7 @@ function transform$2(files, options) { var key; while (++index < files.length) { - messages = vfileSort({messages: files[index].messages.concat()}).messages; + messages = sort({messages: files[index].messages.concat()}).messages; messageRows = []; offset = -1; @@ -16392,7 +16632,7 @@ function transform$2(files, options) { all.push(message); row = { - location: unistUtilStringifyPosition( + location: stringify$b( message.location.end.line && message.location.end.column ? message.location : message.location.start @@ -16406,7 +16646,7 @@ function transform$2(files, options) { }; for (key in row) { - sizes[key] = Math.max(size(row[key]), sizes[key] || 0); + sizes[key] = Math.max(size$1(row[key]), sizes[key] || 0); } messageRows.push(row); @@ -16414,15 +16654,15 @@ function transform$2(files, options) { } if ((!options.quiet && !options.silent) || messageRows.length) { - rows.push({type: 'file', file: files[index], stats: vfileStatistics(messages)}); - push.apply(rows, messageRows); + rows.push({type: 'file', file: files[index], stats: statistics$1(messages)}); + push$1.apply(rows, messageRows); } } - return {rows: rows, stats: vfileStatistics(all), sizes: sizes} + return {rows: rows, stats: statistics$1(all), sizes: sizes} } -function format$1(map, one, options) { +function format(map, one, options) { var enabled = options.color == null ? supported : options.color; var lines = []; var index = -1; @@ -16488,7 +16728,7 @@ function format$1(map, one, options) { lines.push( ( ' ' + - repeatString(' ', map.sizes.location - size(row.location)) + + repeat$6(' ', map.sizes.location - size$1(row.location)) + row.location + ' ' + (enabled @@ -16498,13 +16738,13 @@ function format$1(map, one, options) { row.label + '\x1b[39m' : row.label) + - repeatString(' ', map.sizes.label - size(row.label)) + + repeat$6(' ', map.sizes.label - size$1(row.label)) + ' ' + reason + - repeatString(' ', map.sizes.reason - size(reason)) + + repeat$6(' ', map.sizes.reason - size$1(reason)) + ' ' + row.ruleId + - repeatString(' ', map.sizes.ruleId - size(row.ruleId)) + + repeat$6(' ', map.sizes.ruleId - size$1(row.ruleId)) + ' ' + (row.source || '') ).replace(/ +$/, '') + rest @@ -16520,8 +16760,8 @@ function format$1(map, one, options) { if (stats.fatal) { line = (enabled - ? '\x1b[31m' /* Red. */ + chars.error + '\x1b[39m' - : chars.error) + + ? '\x1b[31m' /* Red. */ + chars$1.error + '\x1b[39m' + : chars$1.error) + ' ' + stats.fatal + ' ' + @@ -16532,8 +16772,8 @@ function format$1(map, one, options) { line = (line ? line + ', ' : '') + (enabled - ? '\x1b[33m' /* Yellow. */ + chars.warning + '\x1b[39m' - : chars.warning) + + ? '\x1b[33m' /* Yellow. */ + chars$1.warning + '\x1b[39m' + : chars$1.warning) + ' ' + stats.warn + ' ' + @@ -16551,22 +16791,23 @@ function format$1(map, one, options) { } // Get the length of `value`, ignoring ANSI sequences. -function size(value) { +function size$1(value) { var match = /\r?\n|\r/.exec(value); - return stringWidth_1(match ? value.slice(0, match.index) : value) + return width(match ? value.slice(0, match.index) : value) } -var log_1 = log; +var load$2 = loadPlugin_1; +var report = vfileReporter; -var prefix = 'vfile-reporter'; +var log_1 = log$1; -function log(context, settings, next) { - var reporter = settings.reporter || vfileReporter; +function log$1(context, settings, next) { + var reporter = settings.reporter || report; var diagnostics; if (typeof reporter === 'string') { try { - reporter = loadPlugin_1(reporter, {cwd: settings.cwd, prefix: prefix}); + reporter = load$2(reporter, {cwd: settings.cwd, prefix: 'vfile-reporter'}); } catch (_) { next(new Error('Could not find reporter `' + reporter + '`')); return @@ -16597,18 +16838,25 @@ function given(file) { return file.data.unifiedEngineGiven } -var fileSetPipeline = trough_1() - .use(configure_1) - .use(fileSystem_1) - .use(stdin_1) - .use(transform_1$1) - .use(log_1); +var trough$2 = trough_1$1; +var configure$3 = configure_1$2; +var fileSystem = fileSystem_1$1; +var stdin = stdin_1; +var transform$1 = transform_1; +var log = log_1; -var PassThrough = require$$0__default['default'].PassThrough; +var fileSetPipeline$1 = trough$2() + .use(configure$3) + .use(fileSystem) + .use(stdin) + .use(transform$1) + .use(log); +var PassThrough = require$$0__default$5['default'].PassThrough; +var statistics = vfileStatistics; +var fileSetPipeline = fileSetPipeline$1; - -var lib$5 = run; +var lib$4 = run; // Run the file set pipeline once. // `callback` is invoked with a fatal error, or with a status code (`0` on @@ -16646,7 +16894,7 @@ function run(options, callback) { // Input. settings.files = options.files || []; - settings.extensions = (options.extensions || []).map(extension); + settings.extensions = (options.extensions || []).map(extension$2); settings.filePath = options.filePath || null; settings.streamIn = options.streamIn || stdin; @@ -16737,7 +16985,7 @@ function run(options, callback) { fileSetPipeline.run({files: options.files || []}, settings, next); function next(error, context) { - var stats = vfileStatistics((context || {}).files); + var stats = statistics((context || {}).files); var failed = Boolean( settings.frail ? stats.fatal || stats.warn : stats.fatal ); @@ -16750,11 +16998,13 @@ function run(options, callback) { } } -function extension(ext) { +function extension$2(ext) { return ext.charAt(0) === '.' ? ext : '.' + ext } -var colorName$1 = { +var ansiStyles$1 = {exports: {}}; + +var colorName = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], @@ -16908,18 +17158,18 @@ var colorName$1 = { /* MIT license */ /* eslint-disable no-mixed-operators */ - +const cssKeywords = colorName; // NOTE: conversions should only return primitive values (i.e. arrays, or // values that give correct `typeof` results). // do not use box values types (i.e. Number(), String(), etc.) const reverseKeywords = {}; -for (const key of Object.keys(colorName$1)) { - reverseKeywords[colorName$1[key]] = key; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; } -const convert$1 = { +const convert$F = { rgb: {channels: 3, labels: 'rgb'}, hsl: {channels: 3, labels: 'hsl'}, hsv: {channels: 3, labels: 'hsv'}, @@ -16937,30 +17187,30 @@ const convert$1 = { gray: {channels: 1, labels: ['gray']} }; -var conversions$1 = convert$1; +var conversions$2 = convert$F; // Hide .channels and .labels properties -for (const model of Object.keys(convert$1)) { - if (!('channels' in convert$1[model])) { +for (const model of Object.keys(convert$F)) { + if (!('channels' in convert$F[model])) { throw new Error('missing channels property: ' + model); } - if (!('labels' in convert$1[model])) { + if (!('labels' in convert$F[model])) { throw new Error('missing channel labels property: ' + model); } - if (convert$1[model].labels.length !== convert$1[model].channels) { + if (convert$F[model].labels.length !== convert$F[model].channels) { throw new Error('channel and label counts mismatch: ' + model); } - const {channels, labels} = convert$1[model]; - delete convert$1[model].channels; - delete convert$1[model].labels; - Object.defineProperty(convert$1[model], 'channels', {value: channels}); - Object.defineProperty(convert$1[model], 'labels', {value: labels}); + const {channels, labels} = convert$F[model]; + delete convert$F[model].channels; + delete convert$F[model].labels; + Object.defineProperty(convert$F[model], 'channels', {value: channels}); + Object.defineProperty(convert$F[model], 'labels', {value: labels}); } -convert$1.rgb.hsl = function (rgb) { +convert$F.rgb.hsl = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; @@ -16999,7 +17249,7 @@ convert$1.rgb.hsl = function (rgb) { return [h, s * 100, l * 100]; }; -convert$1.rgb.hsv = function (rgb) { +convert$F.rgb.hsv = function (rgb) { let rdif; let gdif; let bdif; @@ -17046,11 +17296,11 @@ convert$1.rgb.hsv = function (rgb) { ]; }; -convert$1.rgb.hwb = function (rgb) { +convert$F.rgb.hwb = function (rgb) { const r = rgb[0]; const g = rgb[1]; let b = rgb[2]; - const h = convert$1.rgb.hsl(rgb)[0]; + const h = convert$F.rgb.hsl(rgb)[0]; const w = 1 / 255 * Math.min(r, Math.min(g, b)); b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); @@ -17058,7 +17308,7 @@ convert$1.rgb.hwb = function (rgb) { return [h, w * 100, b * 100]; }; -convert$1.rgb.cmyk = function (rgb) { +convert$F.rgb.cmyk = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; @@ -17082,7 +17332,7 @@ function comparativeDistance(x, y) { ); } -convert$1.rgb.keyword = function (rgb) { +convert$F.rgb.keyword = function (rgb) { const reversed = reverseKeywords[rgb]; if (reversed) { return reversed; @@ -17091,8 +17341,8 @@ convert$1.rgb.keyword = function (rgb) { let currentClosestDistance = Infinity; let currentClosestKeyword; - for (const keyword of Object.keys(colorName$1)) { - const value = colorName$1[keyword]; + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; // Compute comparative distance const distance = comparativeDistance(rgb, value); @@ -17107,11 +17357,11 @@ convert$1.rgb.keyword = function (rgb) { return currentClosestKeyword; }; -convert$1.keyword.rgb = function (keyword) { - return colorName$1[keyword]; +convert$F.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; }; -convert$1.rgb.xyz = function (rgb) { +convert$F.rgb.xyz = function (rgb) { let r = rgb[0] / 255; let g = rgb[1] / 255; let b = rgb[2] / 255; @@ -17128,8 +17378,8 @@ convert$1.rgb.xyz = function (rgb) { return [x * 100, y * 100, z * 100]; }; -convert$1.rgb.lab = function (rgb) { - const xyz = convert$1.rgb.xyz(rgb); +convert$F.rgb.lab = function (rgb) { + const xyz = convert$F.rgb.xyz(rgb); let x = xyz[0]; let y = xyz[1]; let z = xyz[2]; @@ -17149,7 +17399,7 @@ convert$1.rgb.lab = function (rgb) { return [l, a, b]; }; -convert$1.hsl.rgb = function (hsl) { +convert$F.hsl.rgb = function (hsl) { const h = hsl[0] / 360; const s = hsl[1] / 100; const l = hsl[2] / 100; @@ -17197,7 +17447,7 @@ convert$1.hsl.rgb = function (hsl) { return rgb; }; -convert$1.hsl.hsv = function (hsl) { +convert$F.hsl.hsv = function (hsl) { const h = hsl[0]; let s = hsl[1] / 100; let l = hsl[2] / 100; @@ -17213,7 +17463,7 @@ convert$1.hsl.hsv = function (hsl) { return [h, sv * 100, v * 100]; }; -convert$1.hsv.rgb = function (hsv) { +convert$F.hsv.rgb = function (hsv) { const h = hsv[0] / 60; const s = hsv[1] / 100; let v = hsv[2] / 100; @@ -17241,7 +17491,7 @@ convert$1.hsv.rgb = function (hsv) { } }; -convert$1.hsv.hsl = function (hsv) { +convert$F.hsv.hsl = function (hsv) { const h = hsv[0]; const s = hsv[1] / 100; const v = hsv[2] / 100; @@ -17260,7 +17510,7 @@ convert$1.hsv.hsl = function (hsv) { }; // http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert$1.hwb.rgb = function (hwb) { +convert$F.hwb.rgb = function (hwb) { const h = hwb[0] / 360; let wh = hwb[1] / 100; let bl = hwb[2] / 100; @@ -17302,7 +17552,7 @@ convert$1.hwb.rgb = function (hwb) { return [r * 255, g * 255, b * 255]; }; -convert$1.cmyk.rgb = function (cmyk) { +convert$F.cmyk.rgb = function (cmyk) { const c = cmyk[0] / 100; const m = cmyk[1] / 100; const y = cmyk[2] / 100; @@ -17315,7 +17565,7 @@ convert$1.cmyk.rgb = function (cmyk) { return [r * 255, g * 255, b * 255]; }; -convert$1.xyz.rgb = function (xyz) { +convert$F.xyz.rgb = function (xyz) { const x = xyz[0] / 100; const y = xyz[1] / 100; const z = xyz[2] / 100; @@ -17347,7 +17597,7 @@ convert$1.xyz.rgb = function (xyz) { return [r * 255, g * 255, b * 255]; }; -convert$1.xyz.lab = function (xyz) { +convert$F.xyz.lab = function (xyz) { let x = xyz[0]; let y = xyz[1]; let z = xyz[2]; @@ -17367,7 +17617,7 @@ convert$1.xyz.lab = function (xyz) { return [l, a, b]; }; -convert$1.lab.xyz = function (lab) { +convert$F.lab.xyz = function (lab) { const l = lab[0]; const a = lab[1]; const b = lab[2]; @@ -17393,7 +17643,7 @@ convert$1.lab.xyz = function (lab) { return [x, y, z]; }; -convert$1.lab.lch = function (lab) { +convert$F.lab.lch = function (lab) { const l = lab[0]; const a = lab[1]; const b = lab[2]; @@ -17411,7 +17661,7 @@ convert$1.lab.lch = function (lab) { return [l, c, h]; }; -convert$1.lch.lab = function (lch) { +convert$F.lch.lab = function (lch) { const l = lch[0]; const c = lch[1]; const h = lch[2]; @@ -17423,9 +17673,9 @@ convert$1.lch.lab = function (lch) { return [l, a, b]; }; -convert$1.rgb.ansi16 = function (args, saturation = null) { +convert$F.rgb.ansi16 = function (args, saturation = null) { const [r, g, b] = args; - let value = saturation === null ? convert$1.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + let value = saturation === null ? convert$F.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization value = Math.round(value / 50); @@ -17445,13 +17695,13 @@ convert$1.rgb.ansi16 = function (args, saturation = null) { return ansi; }; -convert$1.hsv.ansi16 = function (args) { +convert$F.hsv.ansi16 = function (args) { // Optimization here; we already know the value and don't need to get // it converted for us. - return convert$1.rgb.ansi16(convert$1.hsv.rgb(args), args[2]); + return convert$F.rgb.ansi16(convert$F.hsv.rgb(args), args[2]); }; -convert$1.rgb.ansi256 = function (args) { +convert$F.rgb.ansi256 = function (args) { const r = args[0]; const g = args[1]; const b = args[2]; @@ -17478,7 +17728,7 @@ convert$1.rgb.ansi256 = function (args) { return ansi; }; -convert$1.ansi16.rgb = function (args) { +convert$F.ansi16.rgb = function (args) { let color = args % 10; // Handle greyscale @@ -17500,7 +17750,7 @@ convert$1.ansi16.rgb = function (args) { return [r, g, b]; }; -convert$1.ansi256.rgb = function (args) { +convert$F.ansi256.rgb = function (args) { // Handle greyscale if (args >= 232) { const c = (args - 232) * 10 + 8; @@ -17517,7 +17767,7 @@ convert$1.ansi256.rgb = function (args) { return [r, g, b]; }; -convert$1.rgb.hex = function (args) { +convert$F.rgb.hex = function (args) { const integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF); @@ -17526,7 +17776,7 @@ convert$1.rgb.hex = function (args) { return '000000'.substring(string.length) + string; }; -convert$1.hex.rgb = function (args) { +convert$F.hex.rgb = function (args) { const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); if (!match) { return [0, 0, 0]; @@ -17548,7 +17798,7 @@ convert$1.hex.rgb = function (args) { return [r, g, b]; }; -convert$1.rgb.hcg = function (rgb) { +convert$F.rgb.hcg = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; @@ -17582,7 +17832,7 @@ convert$1.rgb.hcg = function (rgb) { return [hue * 360, chroma * 100, grayscale * 100]; }; -convert$1.hsl.hcg = function (hsl) { +convert$F.hsl.hcg = function (hsl) { const s = hsl[1] / 100; const l = hsl[2] / 100; @@ -17596,7 +17846,7 @@ convert$1.hsl.hcg = function (hsl) { return [hsl[0], c * 100, f * 100]; }; -convert$1.hsv.hcg = function (hsv) { +convert$F.hsv.hcg = function (hsv) { const s = hsv[1] / 100; const v = hsv[2] / 100; @@ -17610,7 +17860,7 @@ convert$1.hsv.hcg = function (hsv) { return [hsv[0], c * 100, f * 100]; }; -convert$1.hcg.rgb = function (hcg) { +convert$F.hcg.rgb = function (hcg) { const h = hcg[0] / 360; const c = hcg[1] / 100; const g = hcg[2] / 100; @@ -17651,7 +17901,7 @@ convert$1.hcg.rgb = function (hcg) { ]; }; -convert$1.hcg.hsv = function (hcg) { +convert$F.hcg.hsv = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; @@ -17665,7 +17915,7 @@ convert$1.hcg.hsv = function (hcg) { return [hcg[0], f * 100, v * 100]; }; -convert$1.hcg.hsl = function (hcg) { +convert$F.hcg.hsl = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; @@ -17682,14 +17932,14 @@ convert$1.hcg.hsl = function (hcg) { return [hcg[0], s * 100, l * 100]; }; -convert$1.hcg.hwb = function (hcg) { +convert$F.hcg.hwb = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; const v = c + g * (1.0 - c); return [hcg[0], (v - c) * 100, (1 - v) * 100]; }; -convert$1.hwb.hcg = function (hwb) { +convert$F.hwb.hcg = function (hwb) { const w = hwb[1] / 100; const b = hwb[2] / 100; const v = 1 - b; @@ -17703,37 +17953,37 @@ convert$1.hwb.hcg = function (hwb) { return [hwb[0], c * 100, g * 100]; }; -convert$1.apple.rgb = function (apple) { +convert$F.apple.rgb = function (apple) { return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; }; -convert$1.rgb.apple = function (rgb) { +convert$F.rgb.apple = function (rgb) { return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; }; -convert$1.gray.rgb = function (args) { +convert$F.gray.rgb = function (args) { return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; }; -convert$1.gray.hsl = function (args) { +convert$F.gray.hsl = function (args) { return [0, 0, args[0]]; }; -convert$1.gray.hsv = convert$1.gray.hsl; +convert$F.gray.hsv = convert$F.gray.hsl; -convert$1.gray.hwb = function (gray) { +convert$F.gray.hwb = function (gray) { return [0, 100, gray[0]]; }; -convert$1.gray.cmyk = function (gray) { +convert$F.gray.cmyk = function (gray) { return [0, 0, 0, gray[0]]; }; -convert$1.gray.lab = function (gray) { +convert$F.gray.lab = function (gray) { return [gray[0], 0, 0]; }; -convert$1.gray.hex = function (gray) { +convert$F.gray.hex = function (gray) { const val = Math.round(gray[0] / 100 * 255) & 0xFF; const integer = (val << 16) + (val << 8) + val; @@ -17741,11 +17991,13 @@ convert$1.gray.hex = function (gray) { return '000000'.substring(string.length) + string; }; -convert$1.rgb.gray = function (rgb) { +convert$F.rgb.gray = function (rgb) { const val = (rgb[0] + rgb[1] + rgb[2]) / 3; return [val / 255 * 100]; }; +const conversions$1 = conversions$2; + /* This function routes a model to all other models. @@ -17757,7 +18009,7 @@ convert$1.rgb.gray = function (rgb) { conversions that are not possible simply are not included. */ -function buildGraph$1() { +function buildGraph() { const graph = {}; // https://jsperf.com/object-keys-vs-for-in-with-closure/3 const models = Object.keys(conversions$1); @@ -17775,8 +18027,8 @@ function buildGraph$1() { } // https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS$1(fromModel) { - const graph = buildGraph$1(); +function deriveBFS(fromModel) { + const graph = buildGraph(); const queue = [fromModel]; // Unshift -> queue -> pop graph[fromModel].distance = 0; @@ -17806,7 +18058,7 @@ function link$1(from, to) { }; } -function wrapConversion$1(toModel, graph) { +function wrapConversion(toModel, graph) { const path = [graph[toModel].parent, toModel]; let fn = conversions$1[graph[toModel].parent][toModel]; @@ -17822,7 +18074,7 @@ function wrapConversion$1(toModel, graph) { } var route$1 = function (fromModel) { - const graph = deriveBFS$1(fromModel); + const graph = deriveBFS(fromModel); const conversion = {}; const models = Object.keys(graph); @@ -17835,17 +18087,20 @@ var route$1 = function (fromModel) { continue; } - conversion[toModel] = wrapConversion$1(toModel, graph); + conversion[toModel] = wrapConversion(toModel, graph); } return conversion; }; -const convert$2 = {}; +const conversions = conversions$2; +const route = route$1; -const models$1 = Object.keys(conversions$1); +const convert$E = {}; -function wrapRaw$1(fn) { +const models$3 = Object.keys(conversions); + +function wrapRaw(fn) { const wrappedFn = function (...args) { const arg0 = args[0]; if (arg0 === undefined || arg0 === null) { @@ -17867,7 +18122,7 @@ function wrapRaw$1(fn) { return wrappedFn; } -function wrapRounded$1(fn) { +function wrapRounded(fn) { const wrappedFn = function (...args) { const arg0 = args[0]; @@ -17901,26 +18156,26 @@ function wrapRounded$1(fn) { return wrappedFn; } -models$1.forEach(fromModel => { - convert$2[fromModel] = {}; +models$3.forEach(fromModel => { + convert$E[fromModel] = {}; - Object.defineProperty(convert$2[fromModel], 'channels', {value: conversions$1[fromModel].channels}); - Object.defineProperty(convert$2[fromModel], 'labels', {value: conversions$1[fromModel].labels}); + Object.defineProperty(convert$E[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$E[fromModel], 'labels', {value: conversions[fromModel].labels}); - const routes = route$1(fromModel); + const routes = route(fromModel); const routeModels = Object.keys(routes); routeModels.forEach(toModel => { const fn = routes[toModel]; - convert$2[fromModel][toModel] = wrapRounded$1(fn); - convert$2[fromModel][toModel].raw = wrapRaw$1(fn); + convert$E[fromModel][toModel] = wrapRounded(fn); + convert$E[fromModel][toModel].raw = wrapRaw(fn); }); }); -var colorConvert$1 = convert$2; +var colorConvert = convert$E; -var ansiStyles$1 = createCommonjsModule(function (module) { +(function (module) { const wrapAnsi16 = (fn, offset) => (...args) => { const code = fn(...args); @@ -17959,16 +18214,16 @@ const setLazyProperty = (object, property, get) => { }; /** @type {typeof import('color-convert')} */ -let colorConvert; +let colorConvert$1; const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert === undefined) { - colorConvert = colorConvert$1; + if (colorConvert$1 === undefined) { + colorConvert$1 = colorConvert; } const offset = isBackground ? 10 : 0; const styles = {}; - for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + for (const [sourceSpace, suite] of Object.entries(colorConvert$1)) { const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; if (sourceSpace === targetSpace) { styles[name] = wrap(identity, offset); @@ -18083,9 +18338,9 @@ Object.defineProperty(module, 'exports', { enumerable: true, get: assembleStyles }); -}); +}(ansiStyles$1)); -const stringReplaceAll = (string, substring, replacer) => { +const stringReplaceAll$1 = (string, substring, replacer) => { let index = string.indexOf(substring); if (index === -1) { return string; @@ -18104,7 +18359,7 @@ const stringReplaceAll = (string, substring, replacer) => { return returnValue; }; -const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => { +const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => { let endIndex = 0; let returnValue = ''; do { @@ -18118,17 +18373,17 @@ const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => { return returnValue; }; -var util = { - stringReplaceAll, - stringEncaseCRLFWithFirstIndex +var util$2 = { + stringReplaceAll: stringReplaceAll$1, + stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 }; -const TEMPLATE_REGEX$1 = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; -const STYLE_REGEX$1 = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; -const STRING_REGEX$1 = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX$1 = /\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi; +const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi; -const ESCAPES$1 = new Map([ +const ESCAPES = new Map([ ['n', '\n'], ['r', '\r'], ['t', '\t'], @@ -18141,7 +18396,7 @@ const ESCAPES$1 = new Map([ ['a', '\u0007'] ]); -function unescape$1(c) { +function unescape(c) { const u = c[0] === 'u'; const bracket = c[1] === '{'; @@ -18153,10 +18408,10 @@ function unescape$1(c) { return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); } - return ESCAPES$1.get(c) || c; + return ESCAPES.get(c) || c; } -function parseArguments$1(name, arguments_) { +function parseArguments(name, arguments_) { const results = []; const chunks = arguments_.trim().split(/\s*,\s*/g); let matches; @@ -18165,8 +18420,8 @@ function parseArguments$1(name, arguments_) { const number = Number(chunk); if (!Number.isNaN(number)) { results.push(number); - } else if ((matches = chunk.match(STRING_REGEX$1))) { - results.push(matches[2].replace(ESCAPE_REGEX$1, (m, escape, character) => escape ? unescape$1(escape) : character)); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); } else { throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); } @@ -18175,17 +18430,17 @@ function parseArguments$1(name, arguments_) { return results; } -function parseStyle$1(style) { - STYLE_REGEX$1.lastIndex = 0; +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; const results = []; let matches; - while ((matches = STYLE_REGEX$1.exec(style)) !== null) { + while ((matches = STYLE_REGEX.exec(style)) !== null) { const name = matches[1]; if (matches[2]) { - const args = parseArguments$1(name, matches[2]); + const args = parseArguments(name, matches[2]); results.push([name].concat(args)); } else { results.push([name]); @@ -18195,7 +18450,7 @@ function parseStyle$1(style) { return results; } -function buildStyle$1(chalk, styles) { +function buildStyle(chalk, styles) { const enabled = {}; for (const layer of styles) { @@ -18220,26 +18475,26 @@ function buildStyle$1(chalk, styles) { return current; } -var templates$1 = (chalk, temporary) => { +var templates = (chalk, temporary) => { const styles = []; const chunks = []; let chunk = []; // eslint-disable-next-line max-params - temporary.replace(TEMPLATE_REGEX$1, (m, escapeCharacter, inverse, style, close, character) => { + temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { if (escapeCharacter) { - chunk.push(unescape$1(escapeCharacter)); + chunk.push(unescape(escapeCharacter)); } else if (style) { const string = chunk.join(''); chunk = []; - chunks.push(styles.length === 0 ? string : buildStyle$1(chalk, styles)(string)); - styles.push({inverse, styles: parseStyle$1(style)}); + chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); + styles.push({inverse, styles: parseStyle(style)}); } else if (close) { if (styles.length === 0) { throw new Error('Found extraneous } in Chalk template literal'); } - chunks.push(buildStyle$1(chalk, styles)(chunk.join(''))); + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); chunk = []; styles.pop(); } else { @@ -18257,11 +18512,12 @@ var templates$1 = (chalk, temporary) => { return chunks.join(''); }; +const ansiStyles = ansiStyles$1.exports; const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1; const { - stringReplaceAll: stringReplaceAll$1, - stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 -} = util; + stringReplaceAll, + stringEncaseCRLFWithFirstIndex +} = util$2; // `supportsColor.level` → `ansiStyles.color[name]` mapping const levelMapping = [ @@ -18311,7 +18567,7 @@ function Chalk(options) { return chalkFactory(options); } -for (const [styleName, style] of Object.entries(ansiStyles$1)) { +for (const [styleName, style] of Object.entries(ansiStyles)) { styles[styleName] = { get() { const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty); @@ -18336,7 +18592,7 @@ for (const model of usedModels) { get() { const {level} = this; return function (...arguments_) { - const styler = createStyler(ansiStyles$1.color[levelMapping[level]][model](...arguments_), ansiStyles$1.color.close, this._styler); + const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler); return createBuilder(this, styler, this._isEmpty); }; } @@ -18349,7 +18605,7 @@ for (const model of usedModels) { get() { const {level} = this; return function (...arguments_) { - const styler = createStyler(ansiStyles$1.bgColor[levelMapping[level]][model](...arguments_), ansiStyles$1.bgColor.close, this._styler); + const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler); return createBuilder(this, styler, this._isEmpty); }; } @@ -18424,7 +18680,7 @@ const applyStyle = (self, string) => { // Replace any instances already present with a re-opening code // otherwise only the part of the string until said closing code // will be colored, and the rest will simply be 'plain'. - string = stringReplaceAll$1(string, styler.close, styler.open); + string = stringReplaceAll(string, styler.close, styler.open); styler = styler.parent; } @@ -18435,7 +18691,7 @@ const applyStyle = (self, string) => { // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92 const lfIndex = string.indexOf('\n'); if (lfIndex !== -1) { - string = stringEncaseCRLFWithFirstIndex$1(string, closeAll, openAll, lfIndex); + string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex); } return openAll + string + closeAll; @@ -18462,7 +18718,7 @@ const chalkTag = (chalk, ...strings) => { } if (template === undefined) { - template = templates$1; + template = templates; } return template(chalk, parts.join('')); @@ -18487,8 +18743,13 @@ chalk$1.Level = { 3: 'TrueColor' }; -var source = chalk$1; +var source$1 = chalk$1; + +var chokidar$1 = {}; +var utils$7 = {}; + +const path$3 = require$$0__default$2['default']; const WIN_SLASH = '\\\\/'; const WIN_NO_SLASH = `[^${WIN_SLASH}]`; @@ -18510,7 +18771,7 @@ const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; -const STAR = `${QMARK}*?`; +const STAR$1 = `${QMARK}*?`; const POSIX_CHARS = { DOT_LITERAL, @@ -18526,7 +18787,7 @@ const POSIX_CHARS = { NO_DOT_SLASH, NO_DOTS_SLASH, QMARK_NO_DOT, - STAR, + STAR: STAR$1, START_ANCHOR }; @@ -18554,7 +18815,7 @@ const WINDOWS_CHARS = { * POSIX Bracket Regex */ -const POSIX_REGEX_SOURCE = { +const POSIX_REGEX_SOURCE$1 = { alnum: 'a-zA-Z0-9', alpha: 'a-zA-Z', ascii: '\\x00-\\x7F', @@ -18571,9 +18832,9 @@ const POSIX_REGEX_SOURCE = { xdigit: 'A-Fa-f0-9' }; -var constants = { +var constants$5 = { MAX_LENGTH: 1024 * 64, - POSIX_REGEX_SOURCE, + POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1, // regular expressions REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, @@ -18641,7 +18902,7 @@ var constants = { CHAR_VERTICAL_LINE: 124, /* | */ CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ - SEP: path__default['default'].sep, + SEP: path$3.sep, /** * Create EXTGLOB_CHARS @@ -18666,16 +18927,16 @@ var constants = { } }; -var utils = createCommonjsModule(function (module, exports) { - +(function (exports) { +const path = require$$0__default$2['default']; const win32 = process.platform === 'win32'; const { REGEX_BACKSLASH, REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL -} = constants; +} = constants$5; exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); @@ -18701,7 +18962,7 @@ exports.isWindows = options => { if (options && typeof options.windows === 'boolean') { return options.windows; } - return win32 === true || path__default['default'].sep === '\\'; + return win32 === true || path.sep === '\\'; }; exports.escapeLast = (input, char, lastIdx) => { @@ -18730,25 +18991,26 @@ exports.wrapOutput = (input, state = {}, options = {}) => { } return output; }; -}); +}(utils$7)); +const utils$6 = utils$7; const { CHAR_ASTERISK: CHAR_ASTERISK$1, /* * */ CHAR_AT, /* @ */ CHAR_BACKWARD_SLASH, /* \ */ - CHAR_COMMA: CHAR_COMMA$1, /* , */ - CHAR_DOT, /* . */ + CHAR_COMMA: CHAR_COMMA$2, /* , */ + CHAR_DOT: CHAR_DOT$1, /* . */ CHAR_EXCLAMATION_MARK, /* ! */ CHAR_FORWARD_SLASH, /* / */ - CHAR_LEFT_CURLY_BRACE, /* { */ - CHAR_LEFT_PARENTHESES, /* ( */ - CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */ + CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */ + CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */ + CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$2, /* [ */ CHAR_PLUS, /* + */ CHAR_QUESTION_MARK, /* ? */ - CHAR_RIGHT_CURLY_BRACE, /* } */ - CHAR_RIGHT_PARENTHESES, /* ) */ - CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1 /* ] */ -} = constants; + CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */ + CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$2 /* ] */ +} = constants$5; const isPathSeparator = code => { return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; @@ -18818,13 +19080,13 @@ const scan$1 = (input, options) => { backslashes = token.backslashes = true; code = advance(); - if (code === CHAR_LEFT_CURLY_BRACE) { + if (code === CHAR_LEFT_CURLY_BRACE$1) { braceEscaped = true; } continue; } - if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE$1) { braces++; while (eos() !== true && (code = advance())) { @@ -18834,12 +19096,12 @@ const scan$1 = (input, options) => { continue; } - if (code === CHAR_LEFT_CURLY_BRACE) { + if (code === CHAR_LEFT_CURLY_BRACE$1) { braces++; continue; } - if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + if (braceEscaped !== true && code === CHAR_DOT$1 && (code = advance()) === CHAR_DOT$1) { isBrace = token.isBrace = true; isGlob = token.isGlob = true; finished = true; @@ -18851,7 +19113,7 @@ const scan$1 = (input, options) => { break; } - if (braceEscaped !== true && code === CHAR_COMMA$1) { + if (braceEscaped !== true && code === CHAR_COMMA$2) { isBrace = token.isBrace = true; isGlob = token.isGlob = true; finished = true; @@ -18863,7 +19125,7 @@ const scan$1 = (input, options) => { break; } - if (code === CHAR_RIGHT_CURLY_BRACE) { + if (code === CHAR_RIGHT_CURLY_BRACE$1) { braces--; if (braces === 0) { @@ -18888,7 +19150,7 @@ const scan$1 = (input, options) => { token = { value: '', depth: 0, isGlob: false }; if (finished === true) continue; - if (prev === CHAR_DOT && index === (start + 1)) { + if (prev === CHAR_DOT$1 && index === (start + 1)) { start += 2; continue; } @@ -18904,7 +19166,7 @@ const scan$1 = (input, options) => { || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK; - if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES$1) { isGlob = token.isGlob = true; isExtglob = token.isExtglob = true; finished = true; @@ -18917,7 +19179,7 @@ const scan$1 = (input, options) => { continue; } - if (code === CHAR_RIGHT_PARENTHESES) { + if (code === CHAR_RIGHT_PARENTHESES$1) { isGlob = token.isGlob = true; finished = true; break; @@ -18950,7 +19212,7 @@ const scan$1 = (input, options) => { break; } - if (code === CHAR_LEFT_SQUARE_BRACKET$1) { + if (code === CHAR_LEFT_SQUARE_BRACKET$2) { while (eos() !== true && (next = advance())) { if (next === CHAR_BACKWARD_SLASH) { backslashes = token.backslashes = true; @@ -18958,7 +19220,7 @@ const scan$1 = (input, options) => { continue; } - if (next === CHAR_RIGHT_SQUARE_BRACKET$1) { + if (next === CHAR_RIGHT_SQUARE_BRACKET$2) { isBracket = token.isBracket = true; isGlob = token.isGlob = true; finished = true; @@ -18977,18 +19239,18 @@ const scan$1 = (input, options) => { continue; } - if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES$1) { isGlob = token.isGlob = true; if (scanToEnd === true) { while (eos() !== true && (code = advance())) { - if (code === CHAR_LEFT_PARENTHESES) { + if (code === CHAR_LEFT_PARENTHESES$1) { backslashes = token.backslashes = true; code = advance(); continue; } - if (code === CHAR_RIGHT_PARENTHESES) { + if (code === CHAR_RIGHT_PARENTHESES$1) { finished = true; break; } @@ -19041,10 +19303,10 @@ const scan$1 = (input, options) => { } if (opts.unescape === true) { - if (glob) glob = utils.removeBackslashes(glob); + if (glob) glob = utils$6.removeBackslashes(glob); if (base && backslashes === true) { - base = utils.removeBackslashes(base); + base = utils$6.removeBackslashes(base); } } @@ -19113,17 +19375,20 @@ const scan$1 = (input, options) => { var scan_1 = scan$1; +const constants$4 = constants$5; +const utils$5 = utils$7; + /** * Constants */ const { - MAX_LENGTH, - POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1, + MAX_LENGTH: MAX_LENGTH$4, + POSIX_REGEX_SOURCE, REGEX_NON_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_BACKREF, REPLACEMENTS -} = constants; +} = constants$4; /** * Helpers @@ -19141,7 +19406,7 @@ const expandRange = (args, options) => { /* eslint-disable-next-line no-new */ new RegExp(value); } catch (ex) { - return args.map(v => utils.escapeRegex(v)).join('..'); + return args.map(v => utils$5.escapeRegex(v)).join('..'); } return value; @@ -19151,7 +19416,7 @@ const expandRange = (args, options) => { * Create the message for a syntax error */ -const syntaxError = (type, char) => { +const syntaxError$1 = (type, char) => { return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; }; @@ -19162,7 +19427,7 @@ const syntaxError = (type, char) => { * @return {Object} */ -const parse$4 = (input, options) => { +const parse$8 = (input, options) => { if (typeof input !== 'string') { throw new TypeError('Expected a string'); } @@ -19170,7 +19435,7 @@ const parse$4 = (input, options) => { input = REPLACEMENTS[input] || input; const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; let len = input.length; if (len > max) { @@ -19181,11 +19446,11 @@ const parse$4 = (input, options) => { const tokens = [bos]; const capture = opts.capture ? '' : '?:'; - const win32 = utils.isWindows(options); + const win32 = utils$5.isWindows(options); // create constants based on platform, for windows or posix - const PLATFORM_CHARS = constants.globChars(win32); - const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + const PLATFORM_CHARS = constants$4.globChars(win32); + const EXTGLOB_CHARS = constants$4.extglobChars(PLATFORM_CHARS); const { DOT_LITERAL, @@ -19237,7 +19502,7 @@ const parse$4 = (input, options) => { tokens }; - input = utils.removePrefix(input, state); + input = utils$5.removePrefix(input, state); len = input.length; const extglobs = []; @@ -19417,7 +19682,7 @@ const parse$4 = (input, options) => { return state; } - state.output = utils.wrapOutput(output, state, options); + state.output = utils$5.wrapOutput(output, state, options); return state; } @@ -19492,7 +19757,7 @@ const parse$4 = (input, options) => { const idx = prev.value.lastIndexOf('['); const pre = prev.value.slice(0, idx); const rest = prev.value.slice(idx + 2); - const posix = POSIX_REGEX_SOURCE$1[rest]; + const posix = POSIX_REGEX_SOURCE[rest]; if (posix) { prev.value = pre + posix; state.backtrack = true; @@ -19530,7 +19795,7 @@ const parse$4 = (input, options) => { */ if (state.quotes === 1 && value !== '"') { - value = utils.escapeRegex(value); + value = utils$5.escapeRegex(value); prev.value += value; append({ value }); continue; @@ -19560,7 +19825,7 @@ const parse$4 = (input, options) => { if (value === ')') { if (state.parens === 0 && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('opening', '(')); + throw new SyntaxError(syntaxError$1('opening', '(')); } const extglob = extglobs[extglobs.length - 1]; @@ -19581,7 +19846,7 @@ const parse$4 = (input, options) => { if (value === '[') { if (opts.nobracket === true || !remaining().includes(']')) { if (opts.nobracket !== true && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('closing', ']')); + throw new SyntaxError(syntaxError$1('closing', ']')); } value = `\\${value}`; @@ -19601,7 +19866,7 @@ const parse$4 = (input, options) => { if (state.brackets === 0) { if (opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('opening', '[')); + throw new SyntaxError(syntaxError$1('opening', '[')); } push({ type: 'text', value, output: `\\${value}` }); @@ -19620,11 +19885,11 @@ const parse$4 = (input, options) => { // when literal brackets are explicitly disabled // assume we should match with a regex character class - if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + if (opts.literalBrackets === false || utils$5.hasRegexChars(prevValue)) { continue; } - const escaped = utils.escapeRegex(prev.value); + const escaped = utils$5.escapeRegex(prev.value); state.output = state.output.slice(0, -prev.value.length); // when literal brackets are explicitly enabled @@ -19796,7 +20061,7 @@ const parse$4 = (input, options) => { const next = peek(); let output = value; - if (next === '<' && !utils.supportsLookbehinds()) { + if (next === '<' && !utils$5.supportsLookbehinds()) { throw new Error('Node.js v10 or higher is required for regex lookbehinds'); } @@ -20055,20 +20320,20 @@ const parse$4 = (input, options) => { } while (state.brackets > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); - state.output = utils.escapeLast(state.output, '['); + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ']')); + state.output = utils$5.escapeLast(state.output, '['); decrement('brackets'); } while (state.parens > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); - state.output = utils.escapeLast(state.output, '('); + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ')')); + state.output = utils$5.escapeLast(state.output, '('); decrement('parens'); } while (state.braces > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); - state.output = utils.escapeLast(state.output, '{'); + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', '}')); + state.output = utils$5.escapeLast(state.output, '{'); decrement('braces'); } @@ -20098,16 +20363,16 @@ const parse$4 = (input, options) => { * impact when none of the fast paths match. */ -parse$4.fastpaths = (input, options) => { +parse$8.fastpaths = (input, options) => { const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; const len = input.length; if (len > max) { throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); } input = REPLACEMENTS[input] || input; - const win32 = utils.isWindows(options); + const win32 = utils$5.isWindows(options); // create constants based on platform, for windows or posix const { @@ -20120,7 +20385,7 @@ parse$4.fastpaths = (input, options) => { NO_DOTS_SLASH, STAR, START_ANCHOR - } = constants.globChars(win32); + } = constants$4.globChars(win32); const nodot = opts.dot ? NO_DOTS : NO_DOT; const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; @@ -20175,7 +20440,7 @@ parse$4.fastpaths = (input, options) => { } }; - const output = utils.removePrefix(input, state); + const output = utils$5.removePrefix(input, state); let source = create(output); if (source && opts.strictSlashes !== true) { @@ -20185,9 +20450,14 @@ parse$4.fastpaths = (input, options) => { return source; }; -var parse_1$1 = parse$4; +var parse_1$3 = parse$8; -const isObject$1 = val => val && typeof val === 'object' && !Array.isArray(val); +const path$2 = require$$0__default$2['default']; +const scan = scan_1; +const parse$7 = parse_1$3; +const utils$4 = utils$7; +const constants$3 = constants$5; +const isObject$3 = val => val && typeof val === 'object' && !Array.isArray(val); /** * Creates a matcher function from one or more glob patterns. The @@ -20211,9 +20481,9 @@ const isObject$1 = val => val && typeof val === 'object' && !Array.isArray(val); * @api public */ -const picomatch = (glob, options, returnState = false) => { +const picomatch$3 = (glob, options, returnState = false) => { if (Array.isArray(glob)) { - const fns = glob.map(input => picomatch(input, options, returnState)); + const fns = glob.map(input => picomatch$3(input, options, returnState)); const arrayMatcher = str => { for (const isMatch of fns) { const state = isMatch(str); @@ -20224,17 +20494,17 @@ const picomatch = (glob, options, returnState = false) => { return arrayMatcher; } - const isState = isObject$1(glob) && glob.tokens && glob.input; + const isState = isObject$3(glob) && glob.tokens && glob.input; if (glob === '' || (typeof glob !== 'string' && !isState)) { throw new TypeError('Expected pattern to be a non-empty string'); } const opts = options || {}; - const posix = utils.isWindows(options); + const posix = utils$4.isWindows(options); const regex = isState - ? picomatch.compileRe(glob, options) - : picomatch.makeRe(glob, options, false, true); + ? picomatch$3.compileRe(glob, options) + : picomatch$3.makeRe(glob, options, false, true); const state = regex.state; delete regex.state; @@ -20242,11 +20512,11 @@ const picomatch = (glob, options, returnState = false) => { let isIgnored = () => false; if (opts.ignore) { const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; - isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + isIgnored = picomatch$3(opts.ignore, ignoreOpts, returnState); } const matcher = (input, returnObject = false) => { - const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const { isMatch, match, output } = picomatch$3.test(input, regex, options, { glob, posix }); const result = { glob, state, regex, posix, input, output, match, isMatch }; if (typeof opts.onResult === 'function') { @@ -20296,7 +20566,7 @@ const picomatch = (glob, options, returnState = false) => { * @api public */ -picomatch.test = (input, regex, options, { glob, posix } = {}) => { +picomatch$3.test = (input, regex, options, { glob, posix } = {}) => { if (typeof input !== 'string') { throw new TypeError('Expected input to be a string'); } @@ -20306,7 +20576,7 @@ picomatch.test = (input, regex, options, { glob, posix } = {}) => { } const opts = options || {}; - const format = opts.format || (posix ? utils.toPosixSlashes : null); + const format = opts.format || (posix ? utils$4.toPosixSlashes : null); let match = input === glob; let output = (match && format) ? format(input) : input; @@ -20317,7 +20587,7 @@ picomatch.test = (input, regex, options, { glob, posix } = {}) => { if (match === false || opts.capture === true) { if (opts.matchBase === true || opts.basename === true) { - match = picomatch.matchBase(input, regex, options, posix); + match = picomatch$3.matchBase(input, regex, options, posix); } else { match = regex.exec(output); } @@ -20340,9 +20610,9 @@ picomatch.test = (input, regex, options, { glob, posix } = {}) => { * @api public */ -picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { - const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); - return regex.test(path__default['default'].basename(input)); +picomatch$3.matchBase = (input, glob, options, posix = utils$4.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch$3.makeRe(glob, options); + return regex.test(path$2.basename(input)); }; /** @@ -20362,7 +20632,7 @@ picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) = * @api public */ -picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); +picomatch$3.isMatch = (str, patterns, options) => picomatch$3(patterns, options)(str); /** * Parse a glob pattern to create the source string for a regular @@ -20378,9 +20648,9 @@ picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str * @api public */ -picomatch.parse = (pattern, options) => { - if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); - return parse_1$1(pattern, { ...options, fastpaths: false }); +picomatch$3.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch$3.parse(p, options)); + return parse$7(pattern, { ...options, fastpaths: false }); }; /** @@ -20410,7 +20680,7 @@ picomatch.parse = (pattern, options) => { * @api public */ -picomatch.scan = (input, options) => scan_1(input, options); +picomatch$3.scan = (input, options) => scan(input, options); /** * Create a regular expression from a parsed glob pattern. @@ -20429,7 +20699,7 @@ picomatch.scan = (input, options) => scan_1(input, options); * @api public */ -picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => { +picomatch$3.compileRe = (parsed, options, returnOutput = false, returnState = false) => { if (returnOutput === true) { return parsed.output; } @@ -20443,7 +20713,7 @@ picomatch.compileRe = (parsed, options, returnOutput = false, returnState = fals source = `^(?!${source}).*$`; } - const regex = picomatch.toRegex(source, options); + const regex = picomatch$3.toRegex(source, options); if (returnState === true) { regex.state = parsed; } @@ -20451,7 +20721,7 @@ picomatch.compileRe = (parsed, options, returnOutput = false, returnState = fals return regex; }; -picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => { +picomatch$3.makeRe = (input, options, returnOutput = false, returnState = false) => { if (!input || typeof input !== 'string') { throw new TypeError('Expected a non-empty string'); } @@ -20467,17 +20737,17 @@ picomatch.makeRe = (input, options, returnOutput = false, returnState = false) = } if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { - output = parse_1$1.fastpaths(input, options); + output = parse$7.fastpaths(input, options); } if (output === undefined) { - parsed = parse_1$1(input, options); + parsed = parse$7(input, options); parsed.prefix = prefix + (parsed.prefix || ''); } else { parsed.output = output; } - return picomatch.compileRe(parsed, options, returnOutput, returnState); + return picomatch$3.compileRe(parsed, options, returnOutput, returnState); }; /** @@ -20497,7 +20767,7 @@ picomatch.makeRe = (input, options, returnOutput = false, returnState = false) = * @api public */ -picomatch.toRegex = (source, options) => { +picomatch$3.toRegex = (source, options) => { try { const opts = options || {}; return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); @@ -20512,25 +20782,26 @@ picomatch.toRegex = (source, options) => { * @return {Object} */ -picomatch.constants = constants; +picomatch$3.constants = constants$3; /** * Expose "picomatch" */ -var picomatch_1 = picomatch; - -var picomatch$1 = picomatch_1; +var picomatch_1 = picomatch$3; -const { Readable } = require$$0__default['default']; +var picomatch$2 = picomatch_1; -const { promisify } = util__default['default']; +const fs$3 = require$$0__default$3['default']; +const { Readable } = require$$0__default$5['default']; +const sysPath$3 = require$$0__default$2['default']; +const { promisify: promisify$3 } = require$$0__default['default']; +const picomatch$1 = picomatch$2; - -const readdir$1 = promisify(fs__default['default'].readdir); -const stat$2 = promisify(fs__default['default'].stat); -const lstat = promisify(fs__default['default'].lstat); -const realpath$2 = promisify(fs__default['default'].realpath); +const readdir$1 = promisify$3(fs$3.readdir); +const stat$3 = promisify$3(fs$3.stat); +const lstat$2 = promisify$3(fs$3.lstat); +const realpath$1 = promisify$3(fs$3.realpath); /** * @typedef {Object} EntryInfo @@ -20541,8 +20812,9 @@ const realpath$2 = promisify(fs__default['default'].realpath); * @property {String} basename */ -const BANG = '!'; -const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP']); +const BANG$2 = '!'; +const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); const FILE_TYPE = 'files'; const DIR_TYPE = 'directories'; const FILE_DIR_TYPE = 'files_directories'; @@ -20550,6 +20822,8 @@ const EVERYTHING_TYPE = 'all'; const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); +const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); +const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); const normalizeFilter = filter => { if (filter === undefined) return; @@ -20565,7 +20839,7 @@ const normalizeFilter = filter => { const negative = []; for (const item of filter) { const trimmed = item.trim(); - if (trimmed.charAt(0) === BANG) { + if (trimmed.charAt(0) === BANG$2) { negative.push(picomatch$1(trimmed.slice(1))); } else { positive.push(picomatch$1(trimmed)); @@ -20610,9 +20884,9 @@ class ReaddirpStream extends Readable { this._fileFilter = normalizeFilter(opts.fileFilter); this._directoryFilter = normalizeFilter(opts.directoryFilter); - const statMethod = opts.lstat ? lstat : stat$2; + const statMethod = opts.lstat ? lstat$2 : stat$3; // Use bigint stats if it's windows and stat() supports options (node 10+). - if (process.platform === 'win32' && stat$2.length === 3) { + if (wantBigintFsStats) { this._stat = path => statMethod(path, { bigint: true }); } else { this._stat = statMethod; @@ -20622,8 +20896,8 @@ class ReaddirpStream extends Readable { this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); this._wantsEverything = type === EVERYTHING_TYPE; - this._root = path__default['default'].resolve(root); - this._isDirent = ('Dirent' in fs__default['default']) && !opts.alwaysStat; + this._root = sysPath$3.resolve(root); + this._isDirent = ('Dirent' in fs$3) && !opts.alwaysStat; this._statsProp = this._isDirent ? 'dirent' : 'stats'; this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; @@ -20687,15 +20961,15 @@ class ReaddirpStream extends Readable { } catch (error) { this._onError(error); } - return {files, depth, path}; + return { files, depth, path }; } async _formatEntry(dirent, path) { let entry; try { const basename = this._isDirent ? dirent.name : dirent; - const fullPath = path__default['default'].resolve(path__default['default'].join(path, basename)); - entry = {path: path__default['default'].relative(this._root, fullPath), fullPath, basename}; + const fullPath = sysPath$3.resolve(sysPath$3.join(path, basename)); + entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename }; entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); } catch (err) { this._onError(err); @@ -20727,17 +21001,19 @@ class ReaddirpStream extends Readable { if (stats && stats.isSymbolicLink()) { const full = entry.fullPath; try { - const entryRealPath = await realpath$2(full); - const entryRealPathStats = await lstat(entryRealPath); + const entryRealPath = await realpath$1(full); + const entryRealPathStats = await lstat$2(entryRealPath); if (entryRealPathStats.isFile()) { return 'file'; } if (entryRealPathStats.isDirectory()) { const len = entryRealPath.length; - if (full.startsWith(entryRealPath) && full.substr(len, 1) === path__default['default'].sep) { - return this._onError(new Error( + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) { + const recursiveError = new Error( `Circular symlink detected: "${full}" points to "${entryRealPath}"` - )); + ); + recursiveError.code = RECURSIVE_ERROR_CODE; + return this._onError(recursiveError); } return 'directory'; } @@ -20770,7 +21046,7 @@ class ReaddirpStream extends Readable { * @param {String} root Root directory * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth */ -const readdirp = (root, options = {}) => { +const readdirp$1 = (root, options = {}) => { let type = options.entryType || options.type; if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility if (type) options.type = type; @@ -20789,18 +21065,20 @@ const readdirp = (root, options = {}) => { const readdirpPromise = (root, options = {}) => { return new Promise((resolve, reject) => { const files = []; - readdirp(root, options) + readdirp$1(root, options) .on('data', entry => files.push(entry)) .on('end', () => resolve(files)) .on('error', error => reject(error)); }); }; -readdirp.promise = readdirpPromise; -readdirp.ReaddirpStream = ReaddirpStream; -readdirp.default = readdirp; +readdirp$1.promise = readdirpPromise; +readdirp$1.ReaddirpStream = ReaddirpStream; +readdirp$1.default = readdirp$1; -var readdirp_1 = readdirp; +var readdirp_1 = readdirp$1; + +var anymatch$2 = {exports: {}}; /*! * normalize-path @@ -20808,7 +21086,8 @@ var readdirp_1 = readdirp; * Copyright (c) 2014-2018, Jon Schlinkert. * Released under the MIT License. */ -var normalizePath = function(path, stripTrailing) { + +var normalizePath$2 = function(path, stripTrailing) { if (typeof path !== 'string') { throw new TypeError('expected path to be a string'); } @@ -20837,6 +21116,11 @@ var normalizePath = function(path, stripTrailing) { return prefix + segs.join('/'); }; +Object.defineProperty(anymatch$2.exports, "__esModule", { value: true }); + +const picomatch = picomatch$2; +const normalizePath$1 = normalizePath$2; + /** * @typedef {(testString: string) => boolean} AnymatchFn * @typedef {string|RegExp|AnymatchFn} AnymatchPattern @@ -20844,7 +21128,7 @@ var normalizePath = function(path, stripTrailing) { */ const BANG$1 = '!'; const DEFAULT_OPTIONS = {returnIndex: false}; -const arrify = (item) => Array.isArray(item) ? item : [item]; +const arrify$1 = (item) => Array.isArray(item) ? item : [item]; /** * @param {AnymatchPattern} matcher @@ -20856,7 +21140,7 @@ const createPattern = (matcher, options) => { return matcher; } if (typeof matcher === 'string') { - const glob = picomatch$1(matcher, options); + const glob = picomatch(matcher, options); return (string) => matcher === string || glob(string); } if (matcher instanceof RegExp) { @@ -20879,7 +21163,7 @@ const matchPatterns = (patterns, negPatterns, args, returnIndex) => { throw new TypeError('anymatch: second argument must be a string: got ' + Object.prototype.toString.call(_path)) } - const path = normalizePath(_path); + const path = normalizePath$1(_path); for (let index = 0; index < negPatterns.length; index++) { const nglob = negPatterns[index]; @@ -20905,7 +21189,7 @@ const matchPatterns = (patterns, negPatterns, args, returnIndex) => { * @param {object} options * @returns {boolean|number|Function} */ -const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { +const anymatch$1 = (matchers, testString, options = DEFAULT_OPTIONS) => { if (matchers == null) { throw new TypeError('anymatch: specify first argument'); } @@ -20913,12 +21197,14 @@ const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { const returnIndex = opts.returnIndex || false; // Early cache for matchers. - const mtchers = arrify(matchers); + const mtchers = arrify$1(matchers); const negatedGlobs = mtchers .filter(item => typeof item === 'string' && item.charAt(0) === BANG$1) .map(item => item.slice(1)) - .map(item => picomatch$1(item, opts)); - const patterns = mtchers.map(matcher => createPattern(matcher, opts)); + .map(item => picomatch(item, opts)); + const patterns = mtchers + .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG$1)) + .map(matcher => createPattern(matcher, opts)); if (testString == null) { return (testString, ri = false) => { @@ -20930,8 +21216,8 @@ const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => { return matchPatterns(patterns, negatedGlobs, testString, returnIndex); }; -anymatch.default = anymatch; -var anymatch_1 = anymatch; +anymatch$1.default = anymatch$1; +anymatch$2.exports = anymatch$1; /*! * is-extglob @@ -20939,7 +21225,8 @@ var anymatch_1 = anymatch; * Copyright (c) 2014-2016, Jon Schlinkert. * Licensed under the MIT License. */ -var isExtglob = function isExtglob(str) { + +var isExtglob$1 = function isExtglob(str) { if (typeof str !== 'string' || str === '') { return false; } @@ -20960,11 +21247,12 @@ var isExtglob = function isExtglob(str) { * Released under the MIT License. */ -var chars$1 = { '{': '}', '(': ')', '[': ']'}; +var isExtglob = isExtglob$1; +var chars = { '{': '}', '(': ')', '[': ']'}; var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; -var isGlob = function isGlob(str, options) { +var isGlob$2 = function isGlob(str, options) { if (typeof str !== 'string' || str === '') { return false; } @@ -20988,7 +21276,7 @@ var isGlob = function isGlob(str, options) { // if an open bracket/brace/paren is escaped, // set the index to the next closing character var open = match[1]; - var close = open ? chars$1[open] : null; + var close = open ? chars[open] : null; if (open && close) { var n = str.indexOf(close, idx); if (n !== -1) { @@ -21001,8 +21289,9 @@ var isGlob = function isGlob(str, options) { return false; }; -var pathPosixDirname = path__default['default'].posix.dirname; -var isWin32 = os__default['default'].platform() === 'win32'; +var isGlob$1 = isGlob$2; +var pathPosixDirname = require$$0__default$2['default'].posix.dirname; +var isWin32 = require$$0__default$1['default'].platform() === 'win32'; var slash = '/'; var backslash = /\\/g; @@ -21016,7 +21305,7 @@ var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; * @param {boolean} [opts.flipBackslashes=true] * @returns {string} */ -var globParent = function globParent(str, opts) { +var globParent$1 = function globParent(str, opts) { var options = Object.assign({ flipBackslashes: true }, opts); // flip windows path separators @@ -21035,13 +21324,15 @@ var globParent = function globParent(str, opts) { // remove path parts that are globby do { str = pathPosixDirname(str); - } while (isGlob(str) || globby.test(str)); + } while (isGlob$1(str) || globby.test(str)); // remove escape chars and return result return str.replace(escaped, '$1'); }; -var utils$1 = createCommonjsModule(function (module, exports) { +var utils$3 = {}; + +(function (exports) { exports.isInteger = num => { if (typeof num === 'number') { @@ -21153,16 +21444,18 @@ exports.flatten = (...args) => { flat(args); return result; }; -}); +}(utils$3)); + +const utils$2 = utils$3; -var stringify$3 = (ast, options = {}) => { +var stringify$a = (ast, options = {}) => { let stringify = (node, parent = {}) => { - let invalidBlock = options.escapeInvalid && utils$1.isInvalidBrace(parent); + let invalidBlock = options.escapeInvalid && utils$2.isInvalidBrace(parent); let invalidNode = node.invalid === true && options.escapeInvalid === true; let output = ''; if (node.value) { - if ((invalidBlock || invalidNode) && utils$1.isOpenOrClose(node)) { + if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) { return '\\' + node.value; } return node.value; @@ -21190,7 +21483,7 @@ var stringify$3 = (ast, options = {}) => { * Released under the MIT License. */ -var isNumber = function(num) { +var isNumber$3 = function(num) { if (typeof num === 'number') { return num - num === 0; } @@ -21207,10 +21500,10 @@ var isNumber = function(num) { * Released under the MIT License. */ +const isNumber$2 = isNumber$3; - -const toRegexRange = (min, max, options) => { - if (isNumber(min) === false) { +const toRegexRange$1 = (min, max, options) => { + if (isNumber$2(min) === false) { throw new TypeError('toRegexRange: expected the first argument to be a number'); } @@ -21218,7 +21511,7 @@ const toRegexRange = (min, max, options) => { return String(min); } - if (isNumber(max) === false) { + if (isNumber$2(max) === false) { throw new TypeError('toRegexRange: expected the second argument to be a number.'); } @@ -21233,8 +21526,8 @@ const toRegexRange = (min, max, options) => { let wrap = String(opts.wrap); let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; - if (toRegexRange.cache.hasOwnProperty(cacheKey)) { - return toRegexRange.cache[cacheKey].result; + if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) { + return toRegexRange$1.cache[cacheKey].result; } let a = Math.min(min, max); @@ -21281,7 +21574,7 @@ const toRegexRange = (min, max, options) => { state.result = `(?:${state.result})`; } - toRegexRange.cache[cacheKey] = state; + toRegexRange$1.cache[cacheKey] = state; return state.result; }; @@ -21315,7 +21608,7 @@ function splitToRanges(min, max) { } stops = [...stops]; - stops.sort(compare$1); + stops.sort(compare$2); return stops; } @@ -21421,7 +21714,7 @@ function zip(a, b) { return arr; } -function compare$1(a, b) { +function compare$2(a, b) { return a > b ? 1 : b > a ? -1 : 0; } @@ -21478,14 +21771,14 @@ function padZeros(value, tok, options) { * Cache */ -toRegexRange.cache = {}; -toRegexRange.clearCache = () => (toRegexRange.cache = {}); +toRegexRange$1.cache = {}; +toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {}); /** * Expose `toRegexRange` */ -var toRegexRange_1 = toRegexRange; +var toRegexRange_1 = toRegexRange$1; /*! * fill-range @@ -21494,12 +21787,12 @@ var toRegexRange_1 = toRegexRange; * Licensed under the MIT License. */ - - +const util$1 = require$$0__default['default']; +const toRegexRange = toRegexRange_1; const isObject$2 = val => val !== null && typeof val === 'object' && !Array.isArray(val); -const transform$3 = toNumber => { +const transform = toNumber => { return value => toNumber === true ? Number(value) : String(value); }; @@ -21518,7 +21811,7 @@ const zeros = input => { return index > 0; }; -const stringify$4 = (start, end, options) => { +const stringify$9 = (start, end, options) => { if (typeof start === 'string' || typeof end === 'string') { return true; } @@ -21579,7 +21872,7 @@ const toSequence = (parts, options) => { const toRange = (a, b, isNumbers, options) => { if (isNumbers) { - return toRegexRange_1(a, b, { wrap: false, ...options }); + return toRegexRange(a, b, { wrap: false, ...options }); } let start = String.fromCharCode(a); @@ -21595,11 +21888,11 @@ const toRegex = (start, end, options) => { let prefix = options.capture ? '' : '?:'; return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); } - return toRegexRange_1(start, end, options); + return toRegexRange(start, end, options); }; const rangeError = (...args) => { - return new RangeError('Invalid range arguments: ' + util__default['default'].inspect(...args)); + return new RangeError('Invalid range arguments: ' + util$1.inspect(...args)); }; const invalidRange = (start, end, options) => { @@ -21635,8 +21928,8 @@ const fillNumbers = (start, end, step = 1, options = {}) => { let padded = zeros(startString) || zeros(endString) || zeros(stepString); let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; - let toNumber = padded === false && stringify$4(start, end, options) === false; - let format = options.transform || transform$3(toNumber); + let toNumber = padded === false && stringify$9(start, end, options) === false; + let format = options.transform || transform(toNumber); if (options.toRegex && step === 1) { return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); @@ -21700,7 +21993,7 @@ const fillLetters = (start, end, step = 1, options = {}) => { return range; }; -const fill = (start, end, step, options = {}) => { +const fill$2 = (start, end, step, options = {}) => { if (end == null && isValidValue(start)) { return [start]; } @@ -21710,11 +22003,11 @@ const fill = (start, end, step, options = {}) => { } if (typeof step === 'function') { - return fill(start, end, 1, { transform: step }); + return fill$2(start, end, 1, { transform: step }); } if (isObject$2(step)) { - return fill(start, end, 0, step); + return fill$2(start, end, 0, step); } let opts = { ...options }; @@ -21723,7 +22016,7 @@ const fill = (start, end, step, options = {}) => { if (!isNumber$1(step)) { if (step != null && !isObject$2(step)) return invalidStep(step, opts); - return fill(start, end, 1, step); + return fill$2(start, end, 1, step); } if (isNumber$1(start) && isNumber$1(end)) { @@ -21733,7 +22026,10 @@ const fill = (start, end, step, options = {}) => { return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); }; -var fillRange = fill; +var fillRange = fill$2; + +const fill$1 = fillRange; +const utils$1 = utils$3; const compile$1 = (ast, options = {}) => { let walk = (node, parent = {}) => { @@ -21768,7 +22064,7 @@ const compile$1 = (ast, options = {}) => { if (node.nodes && node.ranges > 0) { let args = utils$1.reduce(node.nodes); - let range = fillRange(...args, { ...options, wrap: false, toRegex: true }); + let range = fill$1(...args, { ...options, wrap: false, toRegex: true }); if (range.length !== 0) { return args.length > 1 && range.length > 1 ? `(${range})` : range; @@ -21788,6 +22084,10 @@ const compile$1 = (ast, options = {}) => { var compile_1 = compile$1; +const fill = fillRange; +const stringify$8 = stringify$a; +const utils = utils$3; + const append = (queue = '', stash = '', enclose = false) => { let result = []; @@ -21796,7 +22096,7 @@ const append = (queue = '', stash = '', enclose = false) => { if (!stash.length) return queue; if (!queue.length) { - return enclose ? utils$1.flatten(stash).map(ele => `{${ele}}`) : stash; + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; } for (let item of queue) { @@ -21811,10 +22111,10 @@ const append = (queue = '', stash = '', enclose = false) => { } } } - return utils$1.flatten(result); + return utils.flatten(result); }; -const expand$2 = (ast, options = {}) => { +const expand$1 = (ast, options = {}) => { let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; let walk = (node, parent = {}) => { @@ -21829,7 +22129,7 @@ const expand$2 = (ast, options = {}) => { } if (node.invalid || node.dollar) { - q.push(append(q.pop(), stringify$3(node, options))); + q.push(append(q.pop(), stringify$8(node, options))); return; } @@ -21839,15 +22139,15 @@ const expand$2 = (ast, options = {}) => { } if (node.nodes && node.ranges > 0) { - let args = utils$1.reduce(node.nodes); + let args = utils.reduce(node.nodes); - if (utils$1.exceedsLimit(...args, options.step, rangeLimit)) { + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); } - let range = fillRange(...args, options); + let range = fill(...args, options); if (range.length === 0) { - range = stringify$3(node, options); + range = stringify$8(node, options); } q.push(append(q.pop(), range)); @@ -21855,7 +22155,7 @@ const expand$2 = (ast, options = {}) => { return; } - let enclose = utils$1.encloseBrace(node); + let enclose = utils.encloseBrace(node); let queue = node.queue; let block = node; @@ -21891,12 +22191,12 @@ const expand$2 = (ast, options = {}) => { return queue; }; - return utils$1.flatten(walk(ast)); + return utils.flatten(walk(ast)); }; -var expand_1 = expand$2; +var expand_1 = expand$1; -var constants$1 = { +var constants$2 = { MAX_LENGTH: 1024 * 64, // Digits @@ -21952,39 +22252,41 @@ var constants$1 = { CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ }; +const stringify$7 = stringify$a; + /** * Constants */ const { - MAX_LENGTH: MAX_LENGTH$1, + MAX_LENGTH: MAX_LENGTH$3, CHAR_BACKSLASH, /* \ */ CHAR_BACKTICK, /* ` */ - CHAR_COMMA: CHAR_COMMA$2, /* , */ - CHAR_DOT: CHAR_DOT$1, /* . */ - CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */ - CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */ - CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */ - CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */ - CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$2, /* [ */ - CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$2, /* ] */ + CHAR_COMMA: CHAR_COMMA$1, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */ CHAR_DOUBLE_QUOTE: CHAR_DOUBLE_QUOTE$1, /* " */ CHAR_SINGLE_QUOTE: CHAR_SINGLE_QUOTE$1, /* ' */ CHAR_NO_BREAK_SPACE, CHAR_ZERO_WIDTH_NOBREAK_SPACE -} = constants$1; +} = constants$2; /** * parse */ -const parse$5 = (input, options = {}) => { +const parse$6 = (input, options = {}) => { if (typeof input !== 'string') { throw new TypeError('Expected a string'); } let opts = options || {}; - let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$1, opts.maxLength) : MAX_LENGTH$1; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$3, opts.maxLength) : MAX_LENGTH$3; if (input.length > max) { throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); } @@ -22048,7 +22350,7 @@ const parse$5 = (input, options = {}) => { * Right square bracket (literal): ']' */ - if (value === CHAR_RIGHT_SQUARE_BRACKET$2) { + if (value === CHAR_RIGHT_SQUARE_BRACKET$1) { push({ type: 'text', value: '\\' + value }); continue; } @@ -22057,14 +22359,14 @@ const parse$5 = (input, options = {}) => { * Left square bracket: '[' */ - if (value === CHAR_LEFT_SQUARE_BRACKET$2) { + if (value === CHAR_LEFT_SQUARE_BRACKET$1) { brackets++; let next; while (index < length && (next = advance())) { value += next; - if (next === CHAR_LEFT_SQUARE_BRACKET$2) { + if (next === CHAR_LEFT_SQUARE_BRACKET$1) { brackets++; continue; } @@ -22074,7 +22376,7 @@ const parse$5 = (input, options = {}) => { continue; } - if (next === CHAR_RIGHT_SQUARE_BRACKET$2) { + if (next === CHAR_RIGHT_SQUARE_BRACKET$1) { brackets--; if (brackets === 0) { @@ -22091,14 +22393,14 @@ const parse$5 = (input, options = {}) => { * Parentheses */ - if (value === CHAR_LEFT_PARENTHESES$1) { + if (value === CHAR_LEFT_PARENTHESES) { block = push({ type: 'paren', nodes: [] }); stack.push(block); push({ type: 'text', value }); continue; } - if (value === CHAR_RIGHT_PARENTHESES$1) { + if (value === CHAR_RIGHT_PARENTHESES) { if (block.type !== 'paren') { push({ type: 'text', value }); continue; @@ -22143,7 +22445,7 @@ const parse$5 = (input, options = {}) => { * Left curly brace: '{' */ - if (value === CHAR_LEFT_CURLY_BRACE$1) { + if (value === CHAR_LEFT_CURLY_BRACE) { depth++; let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; @@ -22168,7 +22470,7 @@ const parse$5 = (input, options = {}) => { * Right curly brace: '}' */ - if (value === CHAR_RIGHT_CURLY_BRACE$1) { + if (value === CHAR_RIGHT_CURLY_BRACE) { if (block.type !== 'brace') { push({ type: 'text', value }); continue; @@ -22189,11 +22491,11 @@ const parse$5 = (input, options = {}) => { * Comma: ',' */ - if (value === CHAR_COMMA$2 && depth > 0) { + if (value === CHAR_COMMA$1 && depth > 0) { if (block.ranges > 0) { block.ranges = 0; let open = block.nodes.shift(); - block.nodes = [open, { type: 'text', value: stringify$3(block) }]; + block.nodes = [open, { type: 'text', value: stringify$7(block) }]; } push({ type: 'comma', value }); @@ -22205,7 +22507,7 @@ const parse$5 = (input, options = {}) => { * Dot: '.' */ - if (value === CHAR_DOT$1 && depth > 0 && block.commas === 0) { + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { let siblings = block.nodes; if (depth === 0 || siblings.length === 0) { @@ -22277,7 +22579,12 @@ const parse$5 = (input, options = {}) => { return ast; }; -var parse_1$2 = parse$5; +var parse_1$2 = parse$6; + +const stringify$6 = stringify$a; +const compile = compile_1; +const expand = expand_1; +const parse$5 = parse_1$2; /** * Expand the given pattern or create a regex-compatible string. @@ -22293,12 +22600,12 @@ var parse_1$2 = parse$5; * @api public */ -const braces = (input, options = {}) => { +const braces$1 = (input, options = {}) => { let output = []; if (Array.isArray(input)) { for (let pattern of input) { - let result = braces.create(pattern, options); + let result = braces$1.create(pattern, options); if (Array.isArray(result)) { output.push(...result); } else { @@ -22306,7 +22613,7 @@ const braces = (input, options = {}) => { } } } else { - output = [].concat(braces.create(input, options)); + output = [].concat(braces$1.create(input, options)); } if (options && options.expand === true && options.nodupes === true) { @@ -22329,7 +22636,7 @@ const braces = (input, options = {}) => { * @api public */ -braces.parse = (input, options = {}) => parse_1$2(input, options); +braces$1.parse = (input, options = {}) => parse$5(input, options); /** * Creates a braces string from an AST, or an AST node. @@ -22345,11 +22652,11 @@ braces.parse = (input, options = {}) => parse_1$2(input, options); * @api public */ -braces.stringify = (input, options = {}) => { +braces$1.stringify = (input, options = {}) => { if (typeof input === 'string') { - return stringify$3(braces.parse(input, options), options); + return stringify$6(braces$1.parse(input, options), options); } - return stringify$3(input, options); + return stringify$6(input, options); }; /** @@ -22367,11 +22674,11 @@ braces.stringify = (input, options = {}) => { * @api public */ -braces.compile = (input, options = {}) => { +braces$1.compile = (input, options = {}) => { if (typeof input === 'string') { - input = braces.parse(input, options); + input = braces$1.parse(input, options); } - return compile_1(input, options); + return compile(input, options); }; /** @@ -22391,12 +22698,12 @@ braces.compile = (input, options = {}) => { * @api public */ -braces.expand = (input, options = {}) => { +braces$1.expand = (input, options = {}) => { if (typeof input === 'string') { - input = braces.parse(input, options); + input = braces$1.parse(input, options); } - let result = expand_1(input, options); + let result = expand(input, options); // filter out empty strings if specified if (options.noempty === true) { @@ -22427,23 +22734,23 @@ braces.expand = (input, options = {}) => { * @api public */ -braces.create = (input, options = {}) => { +braces$1.create = (input, options = {}) => { if (input === '' || input.length < 3) { return [input]; } return options.expand !== true - ? braces.compile(input, options) - : braces.expand(input, options); + ? braces$1.compile(input, options) + : braces$1.expand(input, options); }; /** * Expose "braces" */ -var braces_1 = braces; +var braces_1 = braces$1; -var require$$0$1 = [ +var require$$0$4 = [ "3dm", "3ds", "3g2", @@ -22579,10 +22886,14 @@ var require$$0$1 = [ "numbers", "nupkg", "o", + "odp", + "ods", + "odt", "oga", "ogg", "ogv", "otf", + "ott", "pages", "pbm", "pcx", @@ -22700,16 +23011,22 @@ var require$$0$1 = [ "zipx" ]; -var binaryExtensions = require$$0$1; +var binaryExtensions$1 = require$$0$4; -const extensions = new Set(binaryExtensions); +const path$1 = require$$0__default$2['default']; +const binaryExtensions = binaryExtensions$1; -var isBinaryPath = filePath => extensions.has(path__default['default'].extname(filePath).slice(1).toLowerCase()); +const extensions$1 = new Set(binaryExtensions); -var constants$2 = createCommonjsModule(function (module, exports) { +var isBinaryPath$1 = filePath => extensions$1.has(path$1.extname(filePath).slice(1).toLowerCase()); -const {sep} = path__default['default']; +var constants$1 = {}; + +(function (exports) { + +const {sep} = require$$0__default$2['default']; const {platform} = process; +const os = require$$0__default$1['default']; exports.EV_ALL = 'all'; exports.EV_READY = 'ready'; @@ -22769,38 +23086,41 @@ exports.IDENTITY_FN = val => val; exports.isWindows = platform === 'win32'; exports.isMacos = platform === 'darwin'; exports.isLinux = platform === 'linux'; -}); - -const { promisify: promisify$1 } = util__default['default']; +exports.isIBMi = os.type() === 'OS400'; +}(constants$1)); +const fs$2 = require$$0__default$3['default']; +const sysPath$2 = require$$0__default$2['default']; +const { promisify: promisify$2 } = require$$0__default['default']; +const isBinaryPath = isBinaryPath$1; const { isWindows: isWindows$1, isLinux, - EMPTY_FN, - EMPTY_STR, + EMPTY_FN: EMPTY_FN$2, + EMPTY_STR: EMPTY_STR$1, KEY_LISTENERS, KEY_ERR, KEY_RAW, HANDLER_KEYS, - EV_CHANGE, - EV_ADD, - EV_ADD_DIR, - EV_ERROR, - STR_DATA, - STR_END, - BRACE_START, - STAR: STAR$1 -} = constants$2; + EV_CHANGE: EV_CHANGE$2, + EV_ADD: EV_ADD$2, + EV_ADD_DIR: EV_ADD_DIR$2, + EV_ERROR: EV_ERROR$2, + STR_DATA: STR_DATA$1, + STR_END: STR_END$2, + BRACE_START: BRACE_START$1, + STAR +} = constants$1; const THROTTLE_MODE_WATCH = 'watch'; -const open = promisify$1(fs__default['default'].open); -const stat$3 = promisify$1(fs__default['default'].stat); -const lstat$1 = promisify$1(fs__default['default'].lstat); -const close = promisify$1(fs__default['default'].close); -const fsrealpath = promisify$1(fs__default['default'].realpath); +const open = promisify$2(fs$2.open); +const stat$2 = promisify$2(fs$2.stat); +const lstat$1 = promisify$2(fs$2.lstat); +const close = promisify$2(fs$2.close); +const fsrealpath = promisify$2(fs$2.realpath); -const statMethods = { lstat: lstat$1, stat: stat$3 }; +const statMethods$1 = { lstat: lstat$1, stat: stat$2 }; // TODO: emit errors properly. Example: EMFILE on Macos. const foreach = (val, fn) => { @@ -22880,12 +23200,12 @@ function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { // case the file's watcher misses it (and rely on throttling to de-dupe) if (evPath && path !== evPath) { fsWatchBroadcast( - path__default['default'].resolve(path, evPath), KEY_LISTENERS, path__default['default'].join(path, evPath) + sysPath$2.resolve(path, evPath), KEY_LISTENERS, sysPath$2.join(path, evPath) ); } }; try { - return fs__default['default'].watch(path, options, handleEvent); + return fs$2.watch(path, options, handleEvent); } catch (error) { errHandler(error); } @@ -22940,7 +23260,7 @@ const setFsWatchListener = (path, fullPath, options, handlers) => { fsWatchBroadcast.bind(null, fullPath, KEY_RAW) ); if (!watcher) return; - watcher.on(EV_ERROR, async (error) => { + watcher.on(EV_ERROR$2, async (error) => { const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); cont.watcherUnusable = true; // documented since Node 10.4.1 // Workaround for https://github.com/joyent/node/issues/4337 @@ -23004,13 +23324,7 @@ const setFsWatchFileListener = (path, fullPath, options, handlers) => { const copts = cont && cont.options; if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { - // "Upgrade" the watcher to persistence or a quicker interval. - // This creates some unlikely edge case issues if the user mixes - // settings in a very weird way, but solving for those cases - // doesn't seem worthwhile for the added complexity. - cont.listeners; - cont.rawEmitters; - fs__default['default'].unwatchFile(fullPath); + fs$2.unwatchFile(fullPath); cont = undefined; } @@ -23027,9 +23341,9 @@ const setFsWatchFileListener = (path, fullPath, options, handlers) => { listeners: listener, rawEmitters: rawEmitter, options, - watcher: fs__default['default'].watchFile(fullPath, options, (curr, prev) => { + watcher: fs$2.watchFile(fullPath, options, (curr, prev) => { foreach(cont.rawEmitters, (rawEmitter) => { - rawEmitter(EV_CHANGE, fullPath, {curr, prev}); + rawEmitter(EV_CHANGE$2, fullPath, {curr, prev}); }); const currmtime = curr.mtimeMs; if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { @@ -23048,7 +23362,7 @@ const setFsWatchFileListener = (path, fullPath, options, handlers) => { delFromSet(cont, KEY_RAW, rawEmitter); if (isEmptySet(cont.listeners)) { FsWatchFileInstances.delete(fullPath); - fs__default['default'].unwatchFile(fullPath); + fs$2.unwatchFile(fullPath); cont.options = cont.watcher = undefined; Object.freeze(cont); } @@ -23058,7 +23372,7 @@ const setFsWatchFileListener = (path, fullPath, options, handlers) => { /** * @mixin */ -class NodeFsHandler { +class NodeFsHandler$1 { /** * @param {import("../index").FSWatcher} fsW @@ -23076,13 +23390,13 @@ constructor(fsW) { */ _watchWithNodeFs(path, listener) { const opts = this.fsw.options; - const directory = path__default['default'].dirname(path); - const basename = path__default['default'].basename(path); + const directory = sysPath$2.dirname(path); + const basename = sysPath$2.basename(path); const parent = this.fsw._getWatchedDir(directory); parent.add(basename); - const absolutePath = path__default['default'].resolve(path); + const absolutePath = sysPath$2.resolve(path); const options = {persistent: opts.persistent}; - if (!listener) listener = EMPTY_FN; + if (!listener) listener = EMPTY_FN$2; let closer; if (opts.usePolling) { @@ -23113,8 +23427,8 @@ _handleFile(file, stats, initialAdd) { if (this.fsw.closed) { return; } - const dirname = path__default['default'].dirname(file); - const basename = path__default['default'].basename(file); + const dirname = sysPath$2.dirname(file); + const basename = sysPath$2.basename(file); const parent = this.fsw._getWatchedDir(dirname); // stats is always present let prevStats = stats; @@ -23126,13 +23440,13 @@ _handleFile(file, stats, initialAdd) { if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; if (!newStats || newStats.mtimeMs === 0) { try { - const newStats = await stat$3(file); + const newStats = await stat$2(file); if (this.fsw.closed) return; // Check that change event was not fired because of changed only accessTime. const at = newStats.atimeMs; const mt = newStats.mtimeMs; if (!at || at <= mt || mt !== prevStats.mtimeMs) { - this.fsw._emit(EV_CHANGE, file, newStats); + this.fsw._emit(EV_CHANGE$2, file, newStats); } if (isLinux && prevStats.ino !== newStats.ino) { this.fsw._closeFile(path); @@ -23151,7 +23465,7 @@ _handleFile(file, stats, initialAdd) { const at = newStats.atimeMs; const mt = newStats.mtimeMs; if (!at || at <= mt || mt !== prevStats.mtimeMs) { - this.fsw._emit(EV_CHANGE, file, newStats); + this.fsw._emit(EV_CHANGE$2, file, newStats); } prevStats = newStats; } @@ -23161,8 +23475,8 @@ _handleFile(file, stats, initialAdd) { // emit an add event if we're supposed to if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { - if (!this.fsw._throttle(EV_ADD, file, 0)) return; - this.fsw._emit(EV_ADD, file, stats); + if (!this.fsw._throttle(EV_ADD$2, file, 0)) return; + this.fsw._emit(EV_ADD$2, file, stats); } return closer; @@ -23191,12 +23505,12 @@ async _handleSymlink(entry, directory, path, item) { if (dir.has(item)) { if (this.fsw._symlinkPaths.get(full) !== linkPath) { this.fsw._symlinkPaths.set(full, linkPath); - this.fsw._emit(EV_CHANGE, path, entry.stats); + this.fsw._emit(EV_CHANGE$2, path, entry.stats); } } else { dir.add(item); this.fsw._symlinkPaths.set(full, linkPath); - this.fsw._emit(EV_ADD, path, entry.stats); + this.fsw._emit(EV_ADD$2, path, entry.stats); } this.fsw._emitReady(); return true; @@ -23212,7 +23526,7 @@ async _handleSymlink(entry, directory, path, item) { _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { // Normalize the directory name on Windows - directory = path__default['default'].join(directory, EMPTY_STR); + directory = sysPath$2.join(directory, EMPTY_STR$1); if (!wh.hasGlob) { throttler = this.fsw._throttle('readdir', directory, 1000); @@ -23226,13 +23540,13 @@ _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { fileFilter: entry => wh.filterPath(entry), directoryFilter: entry => wh.filterDir(entry), depth: 0 - }).on(STR_DATA, async (entry) => { + }).on(STR_DATA$1, async (entry) => { if (this.fsw.closed) { stream = undefined; return; } const item = entry.path; - let path = path__default['default'].join(directory, item); + let path = sysPath$2.join(directory, item); current.add(item); if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { @@ -23250,14 +23564,14 @@ _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { this.fsw._incrReadyCount(); // ensure relativeness of path is preserved in case of watcher reuse - path = path__default['default'].join(dir, path__default['default'].relative(dir, path)); + path = sysPath$2.join(dir, sysPath$2.relative(dir, path)); this._addToNodeFs(path, initialAdd, wh, depth + 1); } - }).on(EV_ERROR, this._boundHandleError); + }).on(EV_ERROR$2, this._boundHandleError); return new Promise(resolve => - stream.once(STR_END, () => { + stream.once(STR_END$2, () => { if (this.fsw.closed) { stream = undefined; return; @@ -23276,7 +23590,7 @@ _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { // a path may have been filtered out of this readdir, but // shouldn't be removed because it matches a different glob (!wh.hasGlob || wh.filterPath({ - fullPath: path__default['default'].resolve(directory, item) + fullPath: sysPath$2.resolve(directory, item) })); }).forEach((item) => { this.fsw._remove(directory, item); @@ -23302,14 +23616,14 @@ _handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { * @returns {Promise} closer for the watcher instance. */ async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { - const parentDir = this.fsw._getWatchedDir(path__default['default'].dirname(dir)); - const tracked = parentDir.has(path__default['default'].basename(dir)); + const parentDir = this.fsw._getWatchedDir(sysPath$2.dirname(dir)); + const tracked = parentDir.has(sysPath$2.basename(dir)); if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { - if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats); + if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats); } // ensure dir is tracked (harmless if redundant) - parentDir.add(path__default['default'].basename(dir)); + parentDir.add(sysPath$2.basename(dir)); this.fsw._getWatchedDir(dir); let throttler; let closer; @@ -23358,36 +23672,37 @@ async _addToNodeFs(path, initialAdd, priorWh, depth, target) { // evaluate what is at the path we're being asked to watch try { - const stats = await statMethods[wh.statMethod](wh.watchPath); + const stats = await statMethods$1[wh.statMethod](wh.watchPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(wh.watchPath, stats)) { ready(); return false; } - const follow = this.fsw.options.followSymlinks && !path.includes(STAR$1) && !path.includes(BRACE_START); + const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START$1); let closer; if (stats.isDirectory()) { + const absPath = sysPath$2.resolve(path); const targetPath = follow ? await fsrealpath(path) : path; if (this.fsw.closed) return; closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); if (this.fsw.closed) return; // preserve this symlink's target path - if (path !== targetPath && targetPath !== undefined) { - this.fsw._symlinkPaths.set(targetPath, true); + if (absPath !== targetPath && targetPath !== undefined) { + this.fsw._symlinkPaths.set(absPath, targetPath); } } else if (stats.isSymbolicLink()) { const targetPath = follow ? await fsrealpath(path) : path; if (this.fsw.closed) return; - const parent = path__default['default'].dirname(wh.watchPath); + const parent = sysPath$2.dirname(wh.watchPath); this.fsw._getWatchedDir(parent).add(wh.watchPath); - this.fsw._emit(EV_ADD, wh.watchPath, stats); + this.fsw._emit(EV_ADD$2, wh.watchPath, stats); closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); if (this.fsw.closed) return; // preserve this symlink's target path if (targetPath !== undefined) { - this.fsw._symlinkPaths.set(path__default['default'].resolve(path), targetPath); + this.fsw._symlinkPaths.set(sysPath$2.resolve(path), targetPath); } } else { closer = this._handleFile(wh.watchPath, stats, initialAdd); @@ -23407,9 +23722,13 @@ async _addToNodeFs(path, initialAdd, priorWh, depth, target) { } -var nodefsHandler = NodeFsHandler; +var nodefsHandler = NodeFsHandler$1; -const { promisify: promisify$2 } = util__default['default']; +var fseventsHandler = {exports: {}}; + +const fs$1 = require$$0__default$3['default']; +const sysPath$1 = require$$0__default$2['default']; +const { promisify: promisify$1 } = require$$0__default['default']; let fsevents; try { @@ -23434,9 +23753,9 @@ const { EV_ADD: EV_ADD$1, EV_CHANGE: EV_CHANGE$1, EV_ADD_DIR: EV_ADD_DIR$1, - EV_UNLINK, + EV_UNLINK: EV_UNLINK$1, EV_ERROR: EV_ERROR$1, - STR_DATA: STR_DATA$1, + STR_DATA, STR_END: STR_END$1, FSEVENT_CREATED, FSEVENT_MODIFIED, @@ -23451,18 +23770,18 @@ const { ROOT_GLOBSTAR, DIR_SUFFIX, DOT_SLASH, - FUNCTION_TYPE, + FUNCTION_TYPE: FUNCTION_TYPE$1, EMPTY_FN: EMPTY_FN$1, IDENTITY_FN -} = constants$2; +} = constants$1; const Depth = (value) => isNaN(value) ? {} : {depth: value}; -const stat$4 = promisify$2(fs__default['default'].stat); -const lstat$2 = promisify$2(fs__default['default'].lstat); -const realpath$3 = promisify$2(fs__default['default'].realpath); +const stat$1 = promisify$1(fs$1.stat); +const lstat = promisify$1(fs$1.lstat); +const realpath = promisify$1(fs$1.realpath); -const statMethods$1 = { stat: stat$4, lstat: lstat$2 }; +const statMethods = { stat: stat$1, lstat }; /** * @typedef {String} Path @@ -23511,8 +23830,9 @@ const createFSEventsInstance = (path, callback) => { * @returns {Function} closer */ function setFSEventsListener(path, realPath, listener, rawEmitter) { - let watchPath = path__default['default'].extname(path) ? path__default['default'].dirname(path) : path; - const parentPath = path__default['default'].dirname(watchPath); + let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath; + + const parentPath = sysPath$1.dirname(watchPath); let cont = FSEventsWatchers.get(watchPath); // If we've accumulated a substantial number of paths that @@ -23523,14 +23843,14 @@ function setFSEventsListener(path, realPath, listener, rawEmitter) { watchPath = parentPath; } - const resolvedPath = path__default['default'].resolve(path); + const resolvedPath = sysPath$1.resolve(path); const hasSymlink = resolvedPath !== realPath; const filteredListener = (fullPath, flags, info) => { if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); if ( fullPath === resolvedPath || - !fullPath.indexOf(resolvedPath + path__default['default'].sep) + !fullPath.indexOf(resolvedPath + sysPath$1.sep) ) listener(fullPath, flags, info); }; @@ -23538,7 +23858,7 @@ function setFSEventsListener(path, realPath, listener, rawEmitter) { // modifies `watchPath` to the parent path when it finds a match let watchedParent = false; for (const watchedPath of FSEventsWatchers.keys()) { - if (realPath.indexOf(path__default['default'].resolve(watchedPath) + path__default['default'].sep) === 0) { + if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) { watchPath = watchedPath; cont = FSEventsWatchers.get(watchPath); watchedParent = true; @@ -23603,7 +23923,7 @@ const canUse = () => fsevents && FSEventsWatchers.size < 128; // determines subdirectory traversal levels from root to path const calcDepth = (path, root) => { let i = 0; - while (!path.indexOf(root) && (path = path__default['default'].dirname(path)) !== root) i++; + while (!path.indexOf(root) && (path = sysPath$1.dirname(path)) !== root) i++; return i; }; @@ -23618,7 +23938,7 @@ const sameTypes = (info, stats) => ( /** * @mixin */ -class FsEventsHandler { +class FsEventsHandler$1 { /** * @param {import('../index').FSWatcher} fsw @@ -23647,18 +23967,18 @@ addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { try { - const stats = await stat$4(path); + const stats = await stat$1(path); if (this.fsw.closed) return; if (sameTypes(info, stats)) { this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); } else { - this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } } catch (error) { if (error.code === 'EACCES') { this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); } else { - this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } } } @@ -23666,7 +23986,7 @@ async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { if (this.fsw.closed || this.checkIgnored(path)) return; - if (event === EV_UNLINK) { + if (event === EV_UNLINK$1) { const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY; // suppress unlink events on never before seen files if (isDirectory || watchedDir.has(item)) { @@ -23714,30 +24034,30 @@ _watchWithFsEvents(watchPath, realPath, transform, globFilter) { opts.depth !== undefined && calcDepth(fullPath, realPath) > opts.depth ) return; - const path = transform(path__default['default'].join( - watchPath, path__default['default'].relative(watchPath, fullPath) + const path = transform(sysPath$1.join( + watchPath, sysPath$1.relative(watchPath, fullPath) )); if (globFilter && !globFilter(path)) return; // ensure directories are tracked - const parent = path__default['default'].dirname(path); - const item = path__default['default'].basename(path); + const parent = sysPath$1.dirname(path); + const item = sysPath$1.basename(path); const watchedDir = this.fsw._getWatchedDir( info.type === FSEVENT_TYPE_DIRECTORY ? path : parent ); // correct for wrong events emitted if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { - if (typeof opts.ignored === FUNCTION_TYPE) { + if (typeof opts.ignored === FUNCTION_TYPE$1) { let stats; try { - stats = await stat$4(path); + stats = await stat$1(path); } catch (error) {} if (this.fsw.closed) return; if (this.checkIgnored(path, stats)) return; if (sameTypes(info, stats)) { this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); } else { - this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts); + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } } else { this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); @@ -23781,7 +24101,7 @@ async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { this.fsw._incrReadyCount(); try { - const linkTarget = await realpath$3(linkPath); + const linkTarget = await realpath(linkPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(linkTarget)) { return this.fsw._emitReady(); @@ -23796,7 +24116,7 @@ async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { if (linkTarget && linkTarget !== DOT_SLASH) { aliasedPath = path.replace(linkTarget, linkPath); } else if (path !== DOT_SLASH) { - aliasedPath = path__default['default'].join(linkPath, path); + aliasedPath = sysPath$1.join(linkPath, path); } return transform(aliasedPath); }, false, curDepth); @@ -23815,8 +24135,8 @@ async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { emitAdd(newPath, stats, processPath, opts, forceAdd) { const pp = processPath(newPath); const isDir = stats.isDirectory(); - const dirObj = this.fsw._getWatchedDir(path__default['default'].dirname(pp)); - const base = path__default['default'].basename(pp); + const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp)); + const base = sysPath$1.basename(pp); // ensure empty dirs get tracked if (isDir) this.fsw._getWatchedDir(pp); @@ -23832,7 +24152,7 @@ initWatch(realPath, path, wh, processPath) { if (this.fsw.closed) return; const closer = this._watchWithFsEvents( wh.watchPath, - path__default['default'].resolve(realPath || wh.watchPath), + sysPath$1.resolve(realPath || wh.watchPath), processPath, wh.globFilter ); @@ -23852,13 +24172,13 @@ async _addToFsEvents(path, transform, forceAdd, priorDepth) { return; } const opts = this.fsw.options; - const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN; + const processPath = typeof transform === FUNCTION_TYPE$1 ? transform : IDENTITY_FN; const wh = this.fsw._getWatchHelpers(path); // evaluate what is at the path we're being asked to watch try { - const stats = await statMethods$1[wh.statMethod](wh.watchPath); + const stats = await statMethods[wh.statMethod](wh.watchPath); if (this.fsw.closed) return; if (this.fsw._isIgnored(wh.watchPath, stats)) { throw null; @@ -23875,21 +24195,21 @@ async _addToFsEvents(path, transform, forceAdd, priorDepth) { fileFilter: entry => wh.filterPath(entry), directoryFilter: entry => wh.filterDir(entry), ...Depth(opts.depth - (priorDepth || 0)) - }).on(STR_DATA$1, (entry) => { + }).on(STR_DATA, (entry) => { // need to check filterPath on dirs b/c filterDir is less restrictive if (this.fsw.closed) { return; } if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; - const joinedPath = path__default['default'].join(wh.watchPath, entry.path); + const joinedPath = sysPath$1.join(wh.watchPath, entry.path); const {fullPath} = entry; if (wh.followSymlinks && entry.stats.isSymbolicLink()) { // preserve the current depth here since it can't be derived from // real paths past the symlink const curDepth = opts.depth === undefined ? - undefined : calcDepth(joinedPath, path__default['default'].resolve(wh.watchPath)) + 1; + undefined : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1; this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); } else { @@ -23911,13 +24231,13 @@ async _addToFsEvents(path, transform, forceAdd, priorDepth) { } if (opts.persistent && forceAdd !== true) { - if (typeof transform === FUNCTION_TYPE) { + if (typeof transform === FUNCTION_TYPE$1) { // realpath has already been resolved this.initWatch(undefined, path, wh, processPath); } else { let realPath; try { - realPath = await realpath$3(wh.watchPath); + realPath = await realpath(wh.watchPath); } catch (e) {} this.initWatch(realPath, path, wh, processPath); } @@ -23926,36 +24246,35 @@ async _addToFsEvents(path, transform, forceAdd, priorDepth) { } -var fseventsHandler = FsEventsHandler; -var canUse_1 = canUse; -fseventsHandler.canUse = canUse_1; - -const { EventEmitter } = events__default['default']; - - -const { promisify: promisify$3 } = util__default['default']; - -const anymatch$1 = anymatch_1.default; - - - - - +fseventsHandler.exports = FsEventsHandler$1; +fseventsHandler.exports.canUse = canUse; +const { EventEmitter } = require$$0__default$4['default']; +const fs = require$$0__default$3['default']; +const sysPath = require$$0__default$2['default']; +const { promisify } = require$$0__default['default']; +const readdirp = readdirp_1; +const anymatch = anymatch$2.exports.default; +const globParent = globParent$1; +const isGlob = isGlob$2; +const braces = braces_1; +const normalizePath = normalizePath$2; +const NodeFsHandler = nodefsHandler; +const FsEventsHandler = fseventsHandler.exports; const { EV_ALL, EV_READY, - EV_ADD: EV_ADD$2, - EV_CHANGE: EV_CHANGE$2, - EV_UNLINK: EV_UNLINK$1, - EV_ADD_DIR: EV_ADD_DIR$2, + EV_ADD, + EV_CHANGE, + EV_UNLINK, + EV_ADD_DIR, EV_UNLINK_DIR, EV_RAW, - EV_ERROR: EV_ERROR$2, + EV_ERROR, STR_CLOSE, - STR_END: STR_END$2, + STR_END, BACK_SLASH_RE, DOUBLE_SLASH_RE, @@ -23963,26 +24282,27 @@ const { DOT_RE, REPLACER_RE, - SLASH: SLASH$1, + SLASH, SLASH_SLASH, - BRACE_START: BRACE_START$1, - BANG: BANG$2, + BRACE_START, + BANG, ONE_DOT, TWO_DOTS, - GLOBSTAR: GLOBSTAR$1, + GLOBSTAR, SLASH_GLOBSTAR, ANYMATCH_OPTS, STRING_TYPE, - FUNCTION_TYPE: FUNCTION_TYPE$1, - EMPTY_STR: EMPTY_STR$1, - EMPTY_FN: EMPTY_FN$2, + FUNCTION_TYPE, + EMPTY_STR, + EMPTY_FN, - isWindows: isWindows$2, - isMacos -} = constants$2; + isWindows, + isMacos, + isIBMi +} = constants$1; -const stat$5 = promisify$3(fs__default['default'].stat); -const readdir$2 = promisify$3(fs__default['default'].readdir); +const stat = promisify(fs.stat); +const readdir = promisify(fs.readdir); /** * @typedef {String} Path @@ -24004,11 +24324,11 @@ const readdir$2 = promisify$3(fs__default['default'].readdir); * @property {Function} filterDir */ -const arrify$1 = (value = []) => Array.isArray(value) ? value : [value]; -const flatten = (list, result = []) => { +const arrify = (value = []) => Array.isArray(value) ? value : [value]; +const flatten$1 = (list, result = []) => { list.forEach(item => { if (Array.isArray(item)) { - flatten(item, result); + flatten$1(item, result); } else { result.push(item); } @@ -24020,7 +24340,7 @@ const unifyPaths = (paths_) => { /** * @type {Array} */ - const paths = flatten(arrify$1(paths_)); + const paths = flatten$1(arrify(paths_)); if (!paths.every(p => typeof p === STRING_TYPE)) { throw new TypeError(`Non-string provided as watch path: ${paths}`); } @@ -24030,37 +24350,37 @@ const unifyPaths = (paths_) => { // If SLASH_SLASH occurs at the beginning of path, it is not replaced // because "//StoragePC/DrivePool/Movies" is a valid network path const toUnix = (string) => { - let str = string.replace(BACK_SLASH_RE, SLASH$1); + let str = string.replace(BACK_SLASH_RE, SLASH); let prepend = false; if (str.startsWith(SLASH_SLASH)) { prepend = true; } while (str.match(DOUBLE_SLASH_RE)) { - str = str.replace(DOUBLE_SLASH_RE, SLASH$1); + str = str.replace(DOUBLE_SLASH_RE, SLASH); } if (prepend) { - str = SLASH$1 + str; + str = SLASH + str; } return str; }; // Our version of upath.normalize // TODO: this is not equal to path-normalize module - investigate why -const normalizePathToUnix = (path) => toUnix(path__default['default'].normalize(toUnix(path))); +const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path))); -const normalizeIgnored = (cwd = EMPTY_STR$1) => (path) => { +const normalizeIgnored = (cwd = EMPTY_STR) => (path) => { if (typeof path !== STRING_TYPE) return path; - return normalizePathToUnix(path__default['default'].isAbsolute(path) ? path : path__default['default'].join(cwd, path)); + return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path)); }; const getAbsolutePath = (path, cwd) => { - if (path__default['default'].isAbsolute(path)) { + if (sysPath.isAbsolute(path)) { return path; } - if (path.startsWith(BANG$2)) { - return BANG$2 + path__default['default'].join(cwd, path.slice(1)); + if (path.startsWith(BANG)) { + return BANG + sysPath.join(cwd, path.slice(1)); } - return path__default['default'].join(cwd, path); + return sysPath.join(cwd, path); }; const undef = (opts, key) => opts[key] === undefined; @@ -24096,10 +24416,10 @@ class DirEntry { const dir = this.path; try { - await readdir$2(dir); + await readdir(dir); } catch (err) { if (this._removeWatcher) { - this._removeWatcher(path__default['default'].dirname(dir), path__default['default'].basename(dir)); + this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); } } } @@ -24133,14 +24453,14 @@ const STAT_METHOD_L = 'lstat'; class WatchHelper { constructor(path, watchPath, follow, fsw) { this.fsw = fsw; - this.path = path = path.replace(REPLACER_RE, EMPTY_STR$1); + this.path = path = path.replace(REPLACER_RE, EMPTY_STR); this.watchPath = watchPath; - this.fullWatchPath = path__default['default'].resolve(watchPath); + this.fullWatchPath = sysPath.resolve(watchPath); this.hasGlob = watchPath !== path; /** @type {object|boolean} */ - if (path === EMPTY_STR$1) this.hasGlob = false; + if (path === EMPTY_STR) this.hasGlob = false; this.globSymlink = this.hasGlob && follow ? undefined : false; - this.globFilter = this.hasGlob ? anymatch$1(path, undefined, ANYMATCH_OPTS) : false; + this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; this.dirParts = this.getDirParts(path); this.dirParts.forEach((parts) => { if (parts.length > 1) parts.pop(); @@ -24165,8 +24485,8 @@ class WatchHelper { } entryPath(entry) { - return path__default['default'].join(this.watchPath, - path__default['default'].relative(this.watchPath, this.checkGlobSymlink(entry)) + return sysPath.join(this.watchPath, + sysPath.relative(this.watchPath, this.checkGlobSymlink(entry)) ); } @@ -24174,7 +24494,7 @@ class WatchHelper { const {stats} = entry; if (stats && stats.isSymbolicLink()) return this.filterDir(entry); const resolvedPath = this.entryPath(entry); - const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE$1 ? + const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? this.globFilter(resolvedPath) : true; return matchesGlob && this.fsw._isntIgnored(resolvedPath, stats) && @@ -24184,9 +24504,9 @@ class WatchHelper { getDirParts(path) { if (!this.hasGlob) return []; const parts = []; - const expandedPath = path.includes(BRACE_START$1) ? braces_1.expand(path) : [path]; + const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path]; expandedPath.forEach((path) => { - parts.push(path__default['default'].relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); + parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); }); return parts; } @@ -24197,8 +24517,8 @@ class WatchHelper { let globstar = false; this.unmatchedGlob = !this.dirParts.some((parts) => { return parts.every((part, i) => { - if (part === GLOBSTAR$1) globstar = true; - return globstar || !entryParts[0][i] || anymatch$1(part, entryParts[0][i], ANYMATCH_OPTS); + if (part === GLOBSTAR) globstar = true; + return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); }); }); } @@ -24251,7 +24571,7 @@ constructor(_opts) { if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; // If we can't use fsevents, ensure the options reflect it's disabled. - const canUseFsEvents = fseventsHandler.canUse(); + const canUseFsEvents = FsEventsHandler.canUse(); if (!canUseFsEvents) opts.useFsEvents = false; // Use polling on Mac if not using fsevents. @@ -24260,6 +24580,11 @@ constructor(_opts) { opts.usePolling = isMacos; } + // Always default to polling on IBM i because fs.watch() is not available on IBM i. + if(isIBMi) { + opts.usePolling = true; + } + // Global override (useful for end-developers that need to force polling for all // instances of chokidar, regardless of usage/dependency depth) const envPoll = process.env.CHOKIDAR_USEPOLLING; @@ -24293,13 +24618,13 @@ constructor(_opts) { if (!awf.pollInterval) awf.pollInterval = 100; this._pendingWrites = new Map(); } - if (opts.ignored) opts.ignored = arrify$1(opts.ignored); + if (opts.ignored) opts.ignored = arrify(opts.ignored); let readyCalls = 0; this._emitReady = () => { readyCalls++; if (readyCalls >= this._readyCount) { - this._emitReady = EMPTY_FN$2; + this._emitReady = EMPTY_FN; this._readyEmitted = true; // use process.nextTick to allow time for listener to be bound process.nextTick(() => this.emit(EV_READY)); @@ -24311,9 +24636,9 @@ constructor(_opts) { // Initialize with proper watcher. if (opts.useFsEvents) { - this._fsEventsHandler = new fseventsHandler(this); + this._fsEventsHandler = new FsEventsHandler(this); } else { - this._nodeFsHandler = new nodefsHandler(this); + this._nodeFsHandler = new NodeFsHandler(this); } // You’re frozen when your heart’s not open. @@ -24347,7 +24672,7 @@ add(paths_, _origAdd, _internal) { // set aside negated glob strings paths = paths.filter((path) => { - if (path.startsWith(BANG$2)) { + if (path.startsWith(BANG)) { this._ignoredPaths.add(path.slice(1)); return false; } @@ -24379,7 +24704,7 @@ add(paths_, _origAdd, _internal) { ).then(results => { if (this.closed) return; results.filter(item => item).forEach(item => { - this.add(path__default['default'].dirname(item), path__default['default'].basename(_origAdd || item)); + this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); }); }); } @@ -24399,9 +24724,9 @@ unwatch(paths_) { paths.forEach((path) => { // convert to absolute path unless relative path already matches - if (!path__default['default'].isAbsolute(path) && !this._closers.has(path)) { - if (cwd) path = path__default['default'].join(cwd, path); - path = path__default['default'].resolve(path); + if (!sysPath.isAbsolute(path) && !this._closers.has(path)) { + if (cwd) path = sysPath.join(cwd, path); + path = sysPath.resolve(path); } this._closePath(path); @@ -24454,7 +24779,7 @@ close() { getWatched() { const watchList = {}; this._watched.forEach((entry, dir) => { - const key = this.options.cwd ? path__default['default'].relative(this.options.cwd, dir) : dir; + const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; watchList[key || ONE_DOT] = entry.getChildren().sort(); }); return watchList; @@ -24462,7 +24787,7 @@ getWatched() { emitWithAll(event, args) { this.emit(...args); - if (event !== EV_ERROR$2) this.emit(EV_ALL, ...args); + if (event !== EV_ERROR) this.emit(EV_ALL, ...args); } // Common helpers @@ -24482,8 +24807,8 @@ async _emit(event, path, val1, val2, val3) { if (this.closed) return; const opts = this.options; - if (isWindows$2) path = path__default['default'].normalize(path); - if (opts.cwd) path = path__default['default'].relative(opts.cwd, path); + if (isWindows) path = sysPath.normalize(path); + if (opts.cwd) path = sysPath.relative(opts.cwd, path); /** @type Array */ const args = [event, path]; if (val3 !== undefined) args.push(val1, val2, val3); @@ -24498,7 +24823,7 @@ async _emit(event, path, val1, val2, val3) { } if (opts.atomic) { - if (event === EV_UNLINK$1) { + if (event === EV_UNLINK) { this._pendingUnlinks.set(path, args); setTimeout(() => { this._pendingUnlinks.forEach((entry, path) => { @@ -24509,16 +24834,16 @@ async _emit(event, path, val1, val2, val3) { }, typeof opts.atomic === 'number' ? opts.atomic : 100); return this; } - if (event === EV_ADD$2 && this._pendingUnlinks.has(path)) { - event = args[0] = EV_CHANGE$2; + if (event === EV_ADD && this._pendingUnlinks.has(path)) { + event = args[0] = EV_CHANGE; this._pendingUnlinks.delete(path); } } - if (awf && (event === EV_ADD$2 || event === EV_CHANGE$2) && this._readyEmitted) { + if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { const awfEmit = (err, stats) => { if (err) { - event = args[0] = EV_ERROR$2; + event = args[0] = EV_ERROR; args[1] = err; this.emitWithAll(event, args); } else if (stats) { @@ -24536,18 +24861,18 @@ async _emit(event, path, val1, val2, val3) { return this; } - if (event === EV_CHANGE$2) { - const isThrottled = !this._throttle(EV_CHANGE$2, path, 50); + if (event === EV_CHANGE) { + const isThrottled = !this._throttle(EV_CHANGE, path, 50); if (isThrottled) return this; } if (opts.alwaysStat && val1 === undefined && - (event === EV_ADD$2 || event === EV_ADD_DIR$2 || event === EV_CHANGE$2) + (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE) ) { - const fullPath = opts.cwd ? path__default['default'].join(opts.cwd, path) : path; + const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path; let stats; try { - stats = await stat$5(fullPath); + stats = await stat(fullPath); } catch (err) {} // Suppress event when fs_stat fails, to avoid sending undefined 'stat' if (!stats || this.closed) return; @@ -24568,7 +24893,7 @@ _handleError(error) { if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) ) { - this.emit(EV_ERROR$2, error); + this.emit(EV_ERROR, error); } return error || this.closed; } @@ -24626,14 +24951,14 @@ _awaitWriteFinish(path, threshold, event, awfEmit) { let timeoutHandler; let fullPath = path; - if (this.options.cwd && !path__default['default'].isAbsolute(path)) { - fullPath = path__default['default'].join(this.options.cwd, path); + if (this.options.cwd && !sysPath.isAbsolute(path)) { + fullPath = sysPath.join(this.options.cwd, path); } const now = new Date(); const awaitWriteFinish = (prevStat) => { - fs__default['default'].stat(fullPath, (err, curStat) => { + fs.stat(fullPath, (err, curStat) => { if (err || !this._pendingWrites.has(path)) { if (err && err.code !== 'ENOENT') awfEmit(err); return; @@ -24693,11 +25018,11 @@ _isIgnored(path, stats) { const ign = this.options.ignored; const ignored = ign && ign.map(normalizeIgnored(cwd)); - const paths = arrify$1(ignored) + const paths = arrify(ignored) .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) .map((path) => path + SLASH_GLOBSTAR); const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); - this._userIgnored = anymatch$1(list, undefined, ANYMATCH_OPTS); + this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); } return this._userIgnored([path, stats]); @@ -24730,7 +25055,7 @@ _getWatchHelpers(path, depth) { */ _getWatchedDir(directory) { if (!this._boundRemove) this._boundRemove = this._remove.bind(this); - const dir = path__default['default'].resolve(directory); + const dir = sysPath.resolve(directory); if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); return this._watched.get(dir); } @@ -24766,8 +25091,8 @@ _remove(directory, item, isDirectory) { // if what is being deleted is a directory, get that directory's paths // for recursive deleting and cleaning of watched object // if it is not a directory, nestedDirectoryChildren will be empty array - const path = path__default['default'].join(directory, item); - const fullPath = path__default['default'].resolve(path); + const path = sysPath.join(directory, item); + const fullPath = sysPath.resolve(path); isDirectory = isDirectory != null ? isDirectory : this._watched.has(path) || this._watched.has(fullPath); @@ -24805,17 +25130,17 @@ _remove(directory, item, isDirectory) { // If we wait for this file to be fully written, cancel the wait. let relPath = path; - if (this.options.cwd) relPath = path__default['default'].relative(this.options.cwd, path); + if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path); if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { const event = this._pendingWrites.get(relPath).cancelWait(); - if (event === EV_ADD$2) return; + if (event === EV_ADD) return; } // The Entry will either be a directory that just got removed // or a bogus entry to a file, in either case we have to remove it this._watched.delete(path); this._watched.delete(fullPath); - const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK$1; + const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK; if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); // Avoid conflicts if we later create another file with the same name @@ -24830,8 +25155,8 @@ _remove(directory, item, isDirectory) { */ _closePath(path) { this._closeFile(path); - const dir = path__default['default'].dirname(path); - this._getWatchedDir(dir).remove(path__default['default'].basename(path)); + const dir = sysPath.dirname(path); + this._getWatchedDir(dir).remove(sysPath.basename(path)); } /** @@ -24863,12 +25188,12 @@ _addPathCloser(path, closer) { _readdirp(root, opts) { if (this.closed) return; const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; - let stream = readdirp_1(root, options); + let stream = readdirp(root, options); this._streams.add(stream); stream.once(STR_CLOSE, () => { stream = undefined; }); - stream.once(STR_END$2, () => { + stream.once(STR_END, () => { if (stream) { this._streams.delete(stream); stream = undefined; @@ -24880,7 +25205,7 @@ _readdirp(root, opts) { } // Export FSWatcher class -var FSWatcher_1 = FSWatcher; +chokidar$1.FSWatcher = FSWatcher; /** * Instantiates watcher with paths to be tracked. @@ -24894,12 +25219,7 @@ const watch = (paths, options) => { return watcher; }; -var watch_1 = watch; - -var chokidar = { - FSWatcher: FSWatcher_1, - watch: watch_1 -}; +chokidar$1.watch = watch; var textTable = function (rows_, opts) { if (!opts) opts = {}; @@ -24917,8 +25237,8 @@ var textTable = function (rows_, opts) { return acc; }, []); - var rows = map$1(rows_, function (row) { - return map$1(row, function (c_, ix) { + var rows = map$6(rows_, function (row) { + return map$6(row, function (c_, ix) { var c = String(c_); if (align[ix] === '.') { var index = dotindex(c); @@ -24939,8 +25259,8 @@ var textTable = function (rows_, opts) { return acc; }, []); - return map$1(rows, function (row) { - return map$1(row, function (c, ix) { + return map$6(rows, function (row) { + return map$6(row, function (c, ix) { var n = (sizes[ix] - stringLength(c)) || 0; var s = Array(Math.max(n + 1, 1)).join(' '); if (align[ix] === 'r' || align[ix] === '.') { @@ -24979,7 +25299,7 @@ function forEach (xs, f) { } } -function map$1 (xs, f) { +function map$6 (xs, f) { if (xs.map) return xs.map(f); var res = []; for (var i = 0; i < xs.length; i++) { @@ -24988,6 +25308,8 @@ function map$1 (xs, f) { return res; } +var camelcase$1 = {exports: {}}; + const preserveCamelCase = string => { let isLastCharLower = false; let isLastCharUpper = false; @@ -25059,12 +25381,11 @@ const camelCase = (input, options) => { return postProcess(input); }; -var camelcase = camelCase; +camelcase$1.exports = camelCase; // TODO: Remove this for the next major release -var _default$7 = camelCase; -camelcase.default = _default$7; +camelcase$1.exports.default = camelCase; -var minimist = function (args, opts) { +var minimist$1 = function (args, opts) { if (!opts) opts = {}; var flags = { bools : {}, strings : {}, unknownFn: null }; @@ -25122,7 +25443,7 @@ var minimist = function (args, opts) { if (flags.unknownFn(arg) === false) return; } - var value = !flags.strings[key] && isNumber$2(val) + var value = !flags.strings[key] && isNumber(val) ? Number(val) : val ; setKey(argv, key.split('.'), value); @@ -25258,7 +25579,7 @@ var minimist = function (args, opts) { else { if (!flags.unknownFn || flags.unknownFn(arg) !== false) { argv._.push( - flags.strings['_'] || !isNumber$2(arg) ? arg : Number(arg) + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) ); } if (opts.stopEarly) { @@ -25303,7 +25624,7 @@ function hasKey (obj, keys) { return key in o; } -function isNumber$2 (x) { +function isNumber (x) { if (typeof x === 'number') return true; if (/^0x[0-9a-f]+$/i.test(x)) return true; return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); @@ -25320,7 +25641,7 @@ var unicode = { ID_Continue: ID_Continue }; -var util$1 = { +var util = { isSpaceSeparator (c) { return typeof c === 'string' && unicode.Space_Separator.test(c) }, @@ -25354,7 +25675,7 @@ var util$1 = { }, }; -let source$1; +let source; let parseState; let stack; let pos; @@ -25362,10 +25683,10 @@ let line; let column; let token; let key; -let root; +let root$1; -var parse$6 = function parse (text, reviver) { - source$1 = String(text); +var parse$4 = function parse (text, reviver) { + source = String(text); parseState = 'start'; stack = []; pos = 0; @@ -25373,7 +25694,7 @@ var parse$6 = function parse (text, reviver) { column = 0; token = undefined; key = undefined; - root = undefined; + root$1 = undefined; do { token = lex(); @@ -25387,10 +25708,10 @@ var parse$6 = function parse (text, reviver) { } while (token.type !== 'eof') if (typeof reviver === 'function') { - return internalize({'': root}, '', reviver) + return internalize({'': root$1}, '', reviver) } - return root + return root$1 }; function internalize (holder, name, reviver) { @@ -25410,14 +25731,14 @@ function internalize (holder, name, reviver) { } let lexState; -let buffer; +let buffer$2; let doubleQuote; let sign; let c; function lex () { lexState = 'default'; - buffer = ''; + buffer$2 = ''; doubleQuote = false; sign = 1; @@ -25437,12 +25758,12 @@ function lex () { } function peek () { - if (source$1[pos]) { - return String.fromCodePoint(source$1.codePointAt(pos)) + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) } } -function read$5 () { +function read () { const c = peek(); if (c === '\n') { @@ -25474,21 +25795,21 @@ const lexStates = { case '\r': case '\u2028': case '\u2029': - read$5(); + read(); return case '/': - read$5(); + read(); lexState = 'comment'; return case undefined: - read$5(); + read(); return newToken('eof') } - if (util$1.isSpaceSeparator(c)) { - read$5(); + if (util.isSpaceSeparator(c)) { + read(); return } @@ -25503,49 +25824,49 @@ const lexStates = { comment () { switch (c) { case '*': - read$5(); + read(); lexState = 'multiLineComment'; return case '/': - read$5(); + read(); lexState = 'singleLineComment'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, multiLineComment () { switch (c) { case '*': - read$5(); + read(); lexState = 'multiLineCommentAsterisk'; return case undefined: - throw invalidChar(read$5()) + throw invalidChar(read()) } - read$5(); + read(); }, multiLineCommentAsterisk () { switch (c) { case '*': - read$5(); + read(); return case '/': - read$5(); + read(); lexState = 'default'; return case undefined: - throw invalidChar(read$5()) + throw invalidChar(read()) } - read$5(); + read(); lexState = 'multiLineComment'; }, @@ -25555,42 +25876,42 @@ const lexStates = { case '\r': case '\u2028': case '\u2029': - read$5(); + read(); lexState = 'default'; return case undefined: - read$5(); + read(); return newToken('eof') } - read$5(); + read(); }, value () { switch (c) { case '{': case '[': - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) case 'n': - read$5(); + read(); literal('ull'); return newToken('null', null) case 't': - read$5(); + read(); literal('rue'); return newToken('boolean', true) case 'f': - read$5(); + read(); literal('alse'); return newToken('boolean', false) case '-': case '+': - if (read$5() === '-') { + if (read() === '-') { sign = -1; } @@ -25598,12 +25919,12 @@ const lexStates = { return case '.': - buffer = read$5(); + buffer$2 = read(); lexState = 'decimalPointLeading'; return case '0': - buffer = read$5(); + buffer$2 = read(); lexState = 'zero'; return @@ -25616,37 +25937,37 @@ const lexStates = { case '7': case '8': case '9': - buffer = read$5(); + buffer$2 = read(); lexState = 'decimalInteger'; return case 'I': - read$5(); + read(); literal('nfinity'); return newToken('numeric', Infinity) case 'N': - read$5(); + read(); literal('aN'); return newToken('numeric', NaN) case '"': case "'": - doubleQuote = (read$5() === '"'); - buffer = ''; + doubleQuote = (read() === '"'); + buffer$2 = ''; lexState = 'string'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, identifierNameStartEscape () { if (c !== 'u') { - throw invalidChar(read$5()) + throw invalidChar(read()) } - read$5(); + read(); const u = unicodeEscape(); switch (u) { case '$': @@ -25654,14 +25975,14 @@ const lexStates = { break default: - if (!util$1.isIdStartChar(u)) { + if (!util.isIdStartChar(u)) { throw invalidIdentifier() } break } - buffer += u; + buffer$2 += u; lexState = 'identifierName'; }, @@ -25671,29 +25992,29 @@ const lexStates = { case '_': case '\u200C': case '\u200D': - buffer += read$5(); + buffer$2 += read(); return case '\\': - read$5(); + read(); lexState = 'identifierNameEscape'; return } - if (util$1.isIdContinueChar(c)) { - buffer += read$5(); + if (util.isIdContinueChar(c)) { + buffer$2 += read(); return } - return newToken('identifier', buffer) + return newToken('identifier', buffer$2) }, identifierNameEscape () { if (c !== 'u') { - throw invalidChar(read$5()) + throw invalidChar(read()) } - read$5(); + read(); const u = unicodeEscape(); switch (u) { case '$': @@ -25703,26 +26024,26 @@ const lexStates = { break default: - if (!util$1.isIdContinueChar(u)) { + if (!util.isIdContinueChar(u)) { throw invalidIdentifier() } break } - buffer += u; + buffer$2 += u; lexState = 'identifierName'; }, sign () { switch (c) { case '.': - buffer = read$5(); + buffer$2 = read(); lexState = 'decimalPointLeading'; return case '0': - buffer = read$5(); + buffer$2 = read(); lexState = 'zero'; return @@ -25735,40 +26056,40 @@ const lexStates = { case '7': case '8': case '9': - buffer = read$5(); + buffer$2 = read(); lexState = 'decimalInteger'; return case 'I': - read$5(); + read(); literal('nfinity'); return newToken('numeric', sign * Infinity) case 'N': - read$5(); + read(); literal('aN'); return newToken('numeric', NaN) } - throw invalidChar(read$5()) + throw invalidChar(read()) }, zero () { switch (c) { case '.': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalPoint'; return case 'e': case 'E': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalExponent'; return case 'x': case 'X': - buffer += read$5(); + buffer$2 += read(); lexState = 'hexadecimal'; return } @@ -25779,154 +26100,154 @@ const lexStates = { decimalInteger () { switch (c) { case '.': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalPoint'; return case 'e': case 'E': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalExponent'; return } - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); return } - return newToken('numeric', sign * Number(buffer)) + return newToken('numeric', sign * Number(buffer$2)) }, decimalPointLeading () { - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); lexState = 'decimalFraction'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, decimalPoint () { switch (c) { case 'e': case 'E': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalExponent'; return } - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); lexState = 'decimalFraction'; return } - return newToken('numeric', sign * Number(buffer)) + return newToken('numeric', sign * Number(buffer$2)) }, decimalFraction () { switch (c) { case 'e': case 'E': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalExponent'; return } - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); return } - return newToken('numeric', sign * Number(buffer)) + return newToken('numeric', sign * Number(buffer$2)) }, decimalExponent () { switch (c) { case '+': case '-': - buffer += read$5(); + buffer$2 += read(); lexState = 'decimalExponentSign'; return } - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); lexState = 'decimalExponentInteger'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, decimalExponentSign () { - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); lexState = 'decimalExponentInteger'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, decimalExponentInteger () { - if (util$1.isDigit(c)) { - buffer += read$5(); + if (util.isDigit(c)) { + buffer$2 += read(); return } - return newToken('numeric', sign * Number(buffer)) + return newToken('numeric', sign * Number(buffer$2)) }, hexadecimal () { - if (util$1.isHexDigit(c)) { - buffer += read$5(); + if (util.isHexDigit(c)) { + buffer$2 += read(); lexState = 'hexadecimalInteger'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, hexadecimalInteger () { - if (util$1.isHexDigit(c)) { - buffer += read$5(); + if (util.isHexDigit(c)) { + buffer$2 += read(); return } - return newToken('numeric', sign * Number(buffer)) + return newToken('numeric', sign * Number(buffer$2)) }, string () { switch (c) { case '\\': - read$5(); - buffer += escape(); + read(); + buffer$2 += escape(); return case '"': if (doubleQuote) { - read$5(); - return newToken('string', buffer) + read(); + return newToken('string', buffer$2) } - buffer += read$5(); + buffer$2 += read(); return case "'": if (!doubleQuote) { - read$5(); - return newToken('string', buffer) + read(); + return newToken('string', buffer$2) } - buffer += read$5(); + buffer$2 += read(); return case '\n': case '\r': - throw invalidChar(read$5()) + throw invalidChar(read()) case '\u2028': case '\u2029': @@ -25934,17 +26255,17 @@ const lexStates = { break case undefined: - throw invalidChar(read$5()) + throw invalidChar(read()) } - buffer += read$5(); + buffer$2 += read(); }, start () { switch (c) { case '{': case '[': - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) // This code is unreachable since the default lexState handles eof. // case undefined: @@ -25958,40 +26279,40 @@ const lexStates = { switch (c) { case '$': case '_': - buffer = read$5(); + buffer$2 = read(); lexState = 'identifierName'; return case '\\': - read$5(); + read(); lexState = 'identifierNameStartEscape'; return case '}': - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) case '"': case "'": - doubleQuote = (read$5() === '"'); + doubleQuote = (read() === '"'); lexState = 'string'; return } - if (util$1.isIdStartChar(c)) { - buffer += read$5(); + if (util.isIdStartChar(c)) { + buffer$2 += read(); lexState = 'identifierName'; return } - throw invalidChar(read$5()) + throw invalidChar(read()) }, afterPropertyName () { if (c === ':') { - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) } - throw invalidChar(read$5()) + throw invalidChar(read()) }, beforePropertyValue () { @@ -26002,15 +26323,15 @@ const lexStates = { switch (c) { case ',': case '}': - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) } - throw invalidChar(read$5()) + throw invalidChar(read()) }, beforeArrayValue () { if (c === ']') { - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) } lexState = 'value'; @@ -26020,10 +26341,10 @@ const lexStates = { switch (c) { case ',': case ']': - return newToken('punctuator', read$5()) + return newToken('punctuator', read()) } - throw invalidChar(read$5()) + throw invalidChar(read()) }, end () { @@ -26033,7 +26354,7 @@ const lexStates = { // return newToken('eof') // } - throw invalidChar(read$5()) + throw invalidChar(read()) }, }; @@ -26051,10 +26372,10 @@ function literal (s) { const p = peek(); if (p !== c) { - throw invalidChar(read$5()) + throw invalidChar(read()) } - read$5(); + read(); } } @@ -26062,55 +26383,55 @@ function escape () { const c = peek(); switch (c) { case 'b': - read$5(); + read(); return '\b' case 'f': - read$5(); + read(); return '\f' case 'n': - read$5(); + read(); return '\n' case 'r': - read$5(); + read(); return '\r' case 't': - read$5(); + read(); return '\t' case 'v': - read$5(); + read(); return '\v' case '0': - read$5(); - if (util$1.isDigit(peek())) { - throw invalidChar(read$5()) + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) } return '\0' case 'x': - read$5(); + read(); return hexEscape() case 'u': - read$5(); + read(); return unicodeEscape() case '\n': case '\u2028': case '\u2029': - read$5(); + read(); return '' case '\r': - read$5(); + read(); if (peek() === '\n') { - read$5(); + read(); } return '' @@ -26124,31 +26445,31 @@ function escape () { case '7': case '8': case '9': - throw invalidChar(read$5()) + throw invalidChar(read()) case undefined: - throw invalidChar(read$5()) + throw invalidChar(read()) } - return read$5() + return read() } function hexEscape () { let buffer = ''; let c = peek(); - if (!util$1.isHexDigit(c)) { - throw invalidChar(read$5()) + if (!util.isHexDigit(c)) { + throw invalidChar(read()) } - buffer += read$5(); + buffer += read(); c = peek(); - if (!util$1.isHexDigit(c)) { - throw invalidChar(read$5()) + if (!util.isHexDigit(c)) { + throw invalidChar(read()) } - buffer += read$5(); + buffer += read(); return String.fromCodePoint(parseInt(buffer, 16)) } @@ -26159,11 +26480,11 @@ function unicodeEscape () { while (count-- > 0) { const c = peek(); - if (!util$1.isHexDigit(c)) { - throw invalidChar(read$5()) + if (!util.isHexDigit(c)) { + throw invalidChar(read()) } - buffer += read$5(); + buffer += read(); } return String.fromCodePoint(parseInt(buffer, 16)) @@ -26175,7 +26496,7 @@ const parseStates = { throw invalidEOF() } - push$1(); + push(); }, beforePropertyName () { @@ -26221,7 +26542,7 @@ const parseStates = { throw invalidEOF() } - push$1(); + push(); }, beforeArrayValue () { @@ -26234,7 +26555,7 @@ const parseStates = { return } - push$1(); + push(); }, afterPropertyValue () { @@ -26291,7 +26612,7 @@ const parseStates = { }, }; -function push$1 () { +function push () { let value; switch (token.type) { @@ -26320,8 +26641,8 @@ function push$1 () { // throw invalidToken() } - if (root === undefined) { - root = value; + if (root$1 === undefined) { + root$1 = value; } else { const parent = stack[stack.length - 1]; if (Array.isArray(parent)) { @@ -26376,14 +26697,14 @@ function pop () { function invalidChar (c) { if (c === undefined) { - return syntaxError$1(`JSON5: invalid end of input at ${line}:${column}`) + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) } - return syntaxError$1(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) + return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) } function invalidEOF () { - return syntaxError$1(`JSON5: invalid end of input at ${line}:${column}`) + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) } // This code is unreachable. @@ -26398,7 +26719,7 @@ function invalidEOF () { function invalidIdentifier () { column -= 5; - return syntaxError$1(`JSON5: invalid identifier character at ${line}:${column}`) + return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) } function separatorChar (c) { @@ -26433,7 +26754,7 @@ function formatChar (c) { return c } -function syntaxError$1 (message) { +function syntaxError (message) { const err = new SyntaxError(message); err.lineNumber = line; err.columnNumber = column; @@ -26574,7 +26895,7 @@ var stringify$5 = function stringify (value, replacer, space) { continue case '\0': - if (util$1.isDigit(value[i + 1])) { + if (util.isDigit(value[i + 1])) { product += '\\x00'; continue } @@ -26651,12 +26972,12 @@ var stringify$5 = function stringify (value, replacer, space) { } const firstChar = String.fromCodePoint(key.codePointAt(0)); - if (!util$1.isIdStartChar(firstChar)) { + if (!util.isIdStartChar(firstChar)) { return quoteString(key) } for (let i = firstChar.length; i < key.length; i++) { - if (!util$1.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { return quoteString(key) } } @@ -26701,18 +27022,20 @@ var stringify$5 = function stringify (value, replacer, space) { }; const JSON5 = { - parse: parse$6, + parse: parse$4, stringify: stringify$5, }; -var lib$6 = JSON5; +var lib$3 = JSON5; var dist$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': lib$6 + __proto__: null, + 'default': lib$3 }); -var schema$1 = [ +var require$$3$1 = /*@__PURE__*/getAugmentedNamespace(dist$1); + +var require$$5$1 = [ { long: "help", description: "output usage information", @@ -26874,9 +27197,14 @@ var schema$1 = [ } ]; -var json5 = /*@__PURE__*/getAugmentedNamespace(dist$1); +var table = textTable; +var camelcase = camelcase$1.exports; +var minimist = minimist$1; +var json5 = require$$3$1; +var fault = fault_1; +var schema$1 = require$$5$1; -var options_1 = options; +var options_1 = options$1; // Schema for `minimist`. var minischema = { @@ -26890,7 +27218,7 @@ var minischema = { schema$1.forEach(addEach); // Parse CLI options. -function options(flags, configuration) { +function options$1(flags, configuration) { var extension = configuration.extensions[0]; var name = configuration.name; var config = toCamelCase(minimist(flags, minischema)); @@ -26900,12 +27228,12 @@ function options(flags, configuration) { schema$1.forEach(function (option) { if (option.type === 'string' && config[option.long] === '') { - throw fault_1('Missing value:%s', inspect$1(option).join(' ')) + throw fault('Missing value:%s', inspect(option).join(' ')) } }); ext = commaSeparated(config.ext); - report = reporter$1(config.report); + report = reporter(config.report); help = [ inspectAll(schema$1), @@ -26951,7 +27279,7 @@ function options(flags, configuration) { silentlyIgnore: config.silentlyIgnore, detectIgnore: config.ignore, pluginPrefix: configuration.pluginPrefix, - plugins: plugins(config.use), + plugins: plugins$1(config.use), reporter: report[0], reporterOptions: report[1], color: config.color, @@ -26977,14 +27305,14 @@ function addEach(option) { // Parse `extensions`. function commaSeparated(value) { - return flatten$1(normalize$1(value).map(splitList)) + return flatten(normalize(value).map(splitList)) } // Parse `plugins`. -function plugins(value) { +function plugins$1(value) { var result = {}; - normalize$1(value) + normalize(value) .map(splitOptions) .forEach(function (value) { result[value[0]] = value[1] ? parseConfig(value[1], {}) : null; @@ -26994,8 +27322,8 @@ function plugins(value) { } // Parse `reporter`: only one is accepted. -function reporter$1(value) { - var all = normalize$1(value) +function reporter(value) { + var all = normalize(value) .map(splitOptions) .map(function (value) { return [value[0], value[1] ? parseConfig(value[1], {}) : null] @@ -27008,7 +27336,7 @@ function reporter$1(value) { function settings(value) { var cache = {}; - normalize$1(value).forEach(function (value) { + normalize(value).forEach(function (value) { parseConfig(value, cache); }); @@ -27026,7 +27354,7 @@ function parseConfig(flags, cache) { // Fix position message = error.message.replace(/at(?= position)/, 'around'); - throw fault_1('Cannot parse `%s` as JSON: %s', flags, message) + throw fault('Cannot parse `%s` as JSON: %s', flags, message) } for (flag in flags) { @@ -27045,7 +27373,7 @@ function handleUnknownArgument(flag) { // Long options, always unknown. if (flag.charAt(1) === '-') { - throw fault_1('Unknown option `%s`, expected:\n%s', flag, inspectAll(schema$1)) + throw fault('Unknown option `%s`, expected:\n%s', flag, inspectAll(schema$1)) } // Short options, can be grouped. @@ -27064,7 +27392,7 @@ function handleUnknownArgument(flag) { } } - throw fault_1( + throw fault( 'Unknown short option `-%s`, expected:\n%s', key, inspectAll(schema$1.filter(short)) @@ -27078,11 +27406,11 @@ function handleUnknownArgument(flag) { // Inspect all `options`. function inspectAll(options) { - return textTable(options.map(inspect$1)) + return table(options.map(inspect)) } // Inspect one `option`. -function inspect$1(option) { +function inspect(option) { var description = option.description; var long = option.long; @@ -27100,7 +27428,7 @@ function inspect$1(option) { } // Normalize `value`. -function normalize$1(value) { +function normalize(value) { if (!value) { return [] } @@ -27109,11 +27437,11 @@ function normalize$1(value) { return [value] } - return flatten$1(value.map(normalize$1)) + return flatten(value.map(normalize)) } // Flatten `values`. -function flatten$1(values) { +function flatten(values) { return [].concat.apply([], values) } @@ -27149,12 +27477,18 @@ function parseJSON(value) { return json5.parse('{' + value + '}') } -var lib$7 = start; +var stream = require$$0__default$5['default']; +var engine = lib$4; +var chalk = source$1; +var chokidar = chokidar$1; +var options = options_1; + +var lib$2 = start$3; -var noop = Function.prototype; +var noop$2 = Function.prototype; // Fake TTY stream. -var ttyStream = new require$$0__default['default'].Readable(); +var ttyStream = new stream.Readable(); ttyStream.isTTY = true; // Exit, lazily, with the correct exit status code. @@ -27166,13 +27500,13 @@ process.on('exit', onexit); process.on('uncaughtException', fail$1); // Start the CLI. -function start(cliConfig) { +function start$3(cliConfig) { var config; var output; var watcher; try { - config = options_1(process.argv.slice(2), cliConfig); + config = options(process.argv.slice(2), cliConfig); } catch (error) { return fail$1(error, true) } @@ -27189,14 +27523,14 @@ function start(cliConfig) { config.helpMessage, '' ].join('\n'), - noop + noop$2 ); return } if (config.version) { - process.stdout.write(cliConfig.version + '\n', noop); + process.stdout.write(cliConfig.version + '\n', noop$2); return } @@ -27212,8 +27546,8 @@ function start(cliConfig) { config.out = false; process.stderr.write( - source.bold('Watching...') + ' (press CTRL+C to exit)\n', - noop + chalk.bold('Watching...') + ' (press CTRL+C to exit)\n', + noop$2 ); // Prevent infinite loop if set to regeneration. @@ -27221,14 +27555,14 @@ function start(cliConfig) { config.output = false; process.stderr.write( - source.yellow('Note') + ': Ignoring `--output` until exit.\n', - noop + chalk.yellow('Note') + ': Ignoring `--output` until exit.\n', + noop$2 ); } } // Initial run. - lib$5(config, done); + engine(config, done); // Handle complete run. function done(err, code, context) { @@ -27264,12 +27598,12 @@ function start(cliConfig) { function onchange(filePath) { config.files = [filePath]; - lib$5(config, done); + engine(config, done); } function onsigint() { // Hide the `^C` in terminal. - process.stderr.write('\n', noop); + process.stderr.write('\n', noop$2); clean(); @@ -27277,7 +27611,7 @@ function start(cliConfig) { if (output === true) { config.output = output; config.watch = false; - lib$5(config, done); + engine(config, done); } } } @@ -27291,7 +27625,7 @@ function fail$1(err, pretty) { exitStatus = 1; - process.stderr.write(message.trim() + '\n', noop); + process.stderr.write(message.trim() + '\n', noop$2); } function onexit() { @@ -27300,9 +27634,9 @@ function onexit() { /* eslint-enable unicorn/no-process-exit */ } -var unifiedArgs = lib$7; +var unifiedArgs = lib$2; -var require$$0$2 = [ +var require$$0$3 = [ "md", "markdown", "mdown", @@ -27313,11 +27647,11 @@ var require$$0$2 = [ "ron" ]; -var markdownExtensions = require$$0$2; +var markdownExtensions = require$$0$3; -var bail_1 = bail; +var bail_1 = bail$1; -function bail(err) { +function bail$1(err) { if (err) { throw err } @@ -27328,7 +27662,7 @@ var toStr = Object.prototype.toString; var defineProperty = Object.defineProperty; var gOPD = Object.getOwnPropertyDescriptor; -var isArray$1 = function isArray(arr) { +var isArray = function isArray(arr) { if (typeof Array.isArray === 'function') { return Array.isArray(arr); } @@ -27415,10 +27749,10 @@ var extend$2 = function extend() { // Prevent never-ending loop if (target !== copy) { // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray$1(copy)))) { + if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { if (copyIsArray) { copyIsArray = false; - clone = src && isArray$1(src) ? src : []; + clone = src && isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } @@ -27439,717 +27773,1229 @@ var extend$2 = function extend() { return target; }; -// Expose a frozen processor. -var unified_1 = unified().freeze(); - -var slice$3 = [].slice; -var own$2 = {}.hasOwnProperty; - -// Process pipeline. -var pipeline = trough_1() - .use(pipelineParse) - .use(pipelineRun) - .use(pipelineStringify); - -function pipelineParse(p, ctx) { - ctx.tree = p.parse(ctx.file); -} - -function pipelineRun(p, ctx, next) { - p.run(ctx.tree, ctx.file, done); - - function done(err, tree, file) { - if (err) { - next(err); - } else { - ctx.tree = tree; - ctx.file = file; - next(); - } - } -} - -function pipelineStringify(p, ctx) { - var result = p.stringify(ctx.tree, ctx.file); - var file = ctx.file; - - if (result === undefined || result === null) ; else if (typeof result === 'string' || isBuffer(result)) { - file.contents = result; - } else { - file.result = result; - } -} - -// Function to create the first processor. -function unified() { - var attachers = []; - var transformers = trough_1(); - var namespace = {}; - var frozen = false; - var freezeIndex = -1; - - // Data management. - processor.data = data; - - // Lock. - processor.freeze = freeze; - - // Plugins. - processor.attachers = attachers; - processor.use = use; - - // API. - processor.parse = parse; - processor.stringify = stringify; - processor.run = run; - processor.runSync = runSync; - processor.process = process; - processor.processSync = processSync; +var isPlainObj = value => { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } - // Expose. - return processor + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; - // Create a new processor based on the processor in the current scope. - function processor() { - var destination = unified(); - var length = attachers.length; - var index = -1; +var slice$3 = [].slice; - while (++index < length) { - destination.use.apply(null, attachers[index]); - } +var wrap_1 = wrap$2; - destination.data(extend$2(true, {}, namespace)); +// Wrap `fn`. +// Can be sync or async; return a promise, receive a completion handler, return +// new values and errors. +function wrap$2(fn, callback) { + var invoked; - return destination - } + return wrapped - // Freeze: used to signal a processor that has finished configuration. - // - // For example, take unified itself: it’s frozen. - // Plugins should not be added to it. - // Rather, it should be extended, by invoking it, before modifying it. - // - // In essence, always invoke this when exporting a processor. - function freeze() { - var values; - var plugin; - var options; - var transformer; + function wrapped() { + var params = slice$3.call(arguments, 0); + var callback = fn.length > params.length; + var result; - if (frozen) { - return processor + if (callback) { + params.push(done); } - while (++freezeIndex < attachers.length) { - values = attachers[freezeIndex]; - plugin = values[0]; - options = values[1]; - transformer = null; - - if (options === false) { - continue - } - - if (options === true) { - values[1] = undefined; + try { + result = fn.apply(null, params); + } catch (error) { + // Well, this is quite the pickle. + // `fn` received a callback and invoked it (thus continuing the pipeline), + // but later also threw an error. + // We’re not about to restart the pipeline again, so the only thing left + // to do is to throw the thing instead. + if (callback && invoked) { + throw error } - transformer = plugin.apply(processor, values.slice(1)); + return done(error) + } - if (typeof transformer === 'function') { - transformers.use(transformer); + if (!callback) { + if (result && typeof result.then === 'function') { + result.then(then, done); + } else if (result instanceof Error) { + done(result); + } else { + then(result); } } + } - frozen = true; - freezeIndex = Infinity; + // Invoke `next`, only once. + function done() { + if (!invoked) { + invoked = true; - return processor + callback.apply(null, arguments); + } } - // Data management. - // Getter / setter for processor-specific informtion. - function data(key, value) { - if (typeof key === 'string') { - // Set `key`. - if (arguments.length === 2) { - assertUnfrozen('data', frozen); + // Invoke `done` with one value. + // Tracks if an error is passed, too. + function then(value) { + done(null, value); + } +} - namespace[key] = value; +var wrap$1 = wrap_1; - return processor - } +var trough_1 = trough$1; - // Get `key`. - return (own$2.call(namespace, key) && namespace[key]) || null - } +trough$1.wrap = wrap$1; - // Set space. - if (key) { - assertUnfrozen('data', frozen); - namespace = key; - return processor - } +var slice$2 = [].slice; - // Get space. - return namespace - } +// Create new middleware. +function trough$1() { + var fns = []; + var middleware = {}; - // Plugin management. - // - // Pass it: - // * an attacher and options, - // * a preset, - // * a list of presets, attachers, and arguments (list of attachers and - // options). - function use(value) { - var settings; + middleware.run = run; + middleware.use = use; - assertUnfrozen('use', frozen); + return middleware - if (value === null || value === undefined) ; else if (typeof value === 'function') { - addPlugin.apply(null, arguments); - } else if (typeof value === 'object') { - if ('length' in value) { - addList(value); - } else { - addPreset(value); - } - } else { - throw new Error('Expected usable value, not `' + value + '`') - } + // Run `fns`. Last argument must be a completion handler. + function run() { + var index = -1; + var input = slice$2.call(arguments, 0, -1); + var done = arguments[arguments.length - 1]; - if (settings) { - namespace.settings = extend$2(namespace.settings || {}, settings); + if (typeof done !== 'function') { + throw new Error('Expected function as last argument, not ' + done) } - return processor + next.apply(null, [null].concat(input)); - function addPreset(result) { - addList(result.plugins); + // Run the next `fn`, if any. + function next(err) { + var fn = fns[++index]; + var params = slice$2.call(arguments, 0); + var values = params.slice(1); + var length = input.length; + var pos = -1; - if (result.settings) { - settings = extend$2(settings || {}, result.settings); + if (err) { + done(err); + return } - } - function add(value) { - if (typeof value === 'function') { - addPlugin(value); - } else if (typeof value === 'object') { - if ('length' in value) { - addPlugin.apply(null, value); - } else { - addPreset(value); + // Copy non-nully input into values. + while (++pos < length) { + if (values[pos] === null || values[pos] === undefined) { + values[pos] = input[pos]; } - } else { - throw new Error('Expected usable value, not `' + value + '`') } - } - - function addList(plugins) { - var length; - var index; - if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && 'length' in plugins) { - length = plugins.length; - index = -1; + input = values; - while (++index < length) { - add(plugins[index]); - } + // Next or done. + if (fn) { + wrap$1(fn, next).apply(null, input); } else { - throw new Error('Expected a list of plugins, not `' + plugins + '`') + done.apply(null, [null].concat(input)); } } + } - function addPlugin(plugin, value) { - var entry = find(plugin); + // Add `fn` to the list. + function use(fn) { + if (typeof fn !== 'function') { + throw new Error('Expected `fn` to be a function, not ' + fn) + } - if (entry) { - if (isPlainObj(entry[1]) && isPlainObj(value)) { - value = extend$2(entry[1], value); - } + fns.push(fn); - entry[1] = value; - } else { - attachers.push(slice$3.call(arguments)); - } - } + return middleware } +} - function find(plugin) { - var length = attachers.length; - var index = -1; - var entry; +var own$d = {}.hasOwnProperty; - while (++index < length) { - entry = attachers[index]; +var unistUtilStringifyPosition$1 = stringify$4; - if (entry[0] === plugin) { - return entry - } - } +function stringify$4(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' } - // Parse a file (in string or vfile representation) into a unist node using - // the `Parser` on the processor. - function parse(doc) { - var file = vfile(doc); - var Parser; + // Node. + if (own$d.call(value, 'position') || own$d.call(value, 'type')) { + return position$4(value.position) + } - freeze(); - Parser = processor.Parser; - assertParser('parse', Parser); + // Position. + if (own$d.call(value, 'start') || own$d.call(value, 'end')) { + return position$4(value) + } - if (newable(Parser, 'parse')) { - return new Parser(String(file), file).parse() - } + // Point. + if (own$d.call(value, 'line') || own$d.call(value, 'column')) { + return point$t(value) + } - return Parser(String(file), file) // eslint-disable-line new-cap + // ? + return '' +} + +function point$t(point) { + if (!point || typeof point !== 'object') { + point = {}; } - // Run transforms on a unist node representation of a file (in string or - // vfile representation), async. - function run(node, file, cb) { - assertNode(node); - freeze(); + return index$2(point.line) + ':' + index$2(point.column) +} - if (!cb && typeof file === 'function') { - cb = file; - file = null; - } +function position$4(pos) { + if (!pos || typeof pos !== 'object') { + pos = {}; + } - if (!cb) { - return new Promise(executor) - } + return point$t(pos.start) + '-' + point$t(pos.end) +} - executor(null, cb); +function index$2(value) { + return value && typeof value === 'number' ? value : 1 +} - function executor(resolve, reject) { - transformers.run(node, vfile(file), done); +var stringify$3 = unistUtilStringifyPosition$1; - function done(err, tree, file) { - tree = tree || node; - if (err) { - reject(err); - } else if (resolve) { - resolve(tree); - } else { - cb(null, tree, file); - } - } - } - } +var vfileMessage = VMessage$1; - // Run transforms on a unist node representation of a file (in string or - // vfile representation), sync. - function runSync(node, file) { - var complete = false; - var result; +// Inherit from `Error#`. +function VMessagePrototype() {} +VMessagePrototype.prototype = Error.prototype; +VMessage$1.prototype = new VMessagePrototype(); - run(node, file, done); +// Message properties. +var proto = VMessage$1.prototype; - assertDone('runSync', 'run', complete); +proto.file = ''; +proto.name = ''; +proto.reason = ''; +proto.message = ''; +proto.stack = ''; +proto.fatal = null; +proto.column = null; +proto.line = null; - return result +// Construct a new VMessage. +// +// Note: We cannot invoke `Error` on the created context, as that adds readonly +// `line` and `column` attributes on Safari 9, thus throwing and failing the +// data. +function VMessage$1(reason, position, origin) { + var parts; + var range; + var location; - function done(err, tree) { - complete = true; - bail_1(err); - result = tree; - } + if (typeof position === 'string') { + origin = position; + position = null; } - // Stringify a unist node representation of a file (in string or vfile - // representation) into a string using the `Compiler` on the processor. - function stringify(node, doc) { - var file = vfile(doc); - var Compiler; + parts = parseOrigin(origin); + range = stringify$3(position) || '1:1'; - freeze(); - Compiler = processor.Compiler; - assertCompiler('stringify', Compiler); - assertNode(node); + location = { + start: {line: null, column: null}, + end: {line: null, column: null} + }; - if (newable(Compiler, 'compile')) { - return new Compiler(node, file).compile() + // Node. + if (position && position.position) { + position = position.position; + } + + if (position) { + // Position. + if (position.start) { + location = position; + position = position.start; + } else { + // Point. + location.start = position; } + } - return Compiler(node, file) // eslint-disable-line new-cap + if (reason.stack) { + this.stack = reason.stack; + reason = reason.message; } - // Parse a file (in string or vfile representation) into a unist node using - // the `Parser` on the processor, then run transforms on that node, and - // compile the resulting node using the `Compiler` on the processor, and - // store that result on the vfile. - function process(doc, cb) { - freeze(); - assertParser('process', processor.Parser); - assertCompiler('process', processor.Compiler); + this.message = reason; + this.name = range; + this.reason = reason; + this.line = position ? position.line : null; + this.column = position ? position.column : null; + this.location = location; + this.source = parts[0]; + this.ruleId = parts[1]; +} - if (!cb) { - return new Promise(executor) +function parseOrigin(origin) { + var result = [null, null]; + var index; + + if (typeof origin === 'string') { + index = origin.indexOf(':'); + + if (index === -1) { + result[1] = origin; + } else { + result[0] = origin.slice(0, index); + result[1] = origin.slice(index + 1); } + } - executor(null, cb); + return result +} - function executor(resolve, reject) { - var file = vfile(doc); +var minpath = require$$0__default$2['default']; - pipeline.run(processor, {file: file}, done); +var minproc = process; - function done(err) { - if (err) { - reject(err); - } else if (resolve) { - resolve(file); - } else { - cb(null, file); - } - } - } +var p = minpath; +var proc$1 = minproc; +var buffer$1 = isBuffer; + +var core$1 = VFile$1; + +var own$c = {}.hasOwnProperty; + +// Order of setting (least specific to most), we need this because otherwise +// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a +// stem can be set. +var order$3 = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; + +VFile$1.prototype.toString = toString$6; + +// Access full path (`~/index.min.js`). +Object.defineProperty(VFile$1.prototype, 'path', {get: getPath, set: setPath}); + +// Access parent path (`~`). +Object.defineProperty(VFile$1.prototype, 'dirname', { + get: getDirname, + set: setDirname +}); + +// Access basename (`index.min.js`). +Object.defineProperty(VFile$1.prototype, 'basename', { + get: getBasename, + set: setBasename +}); + +// Access extname (`.js`). +Object.defineProperty(VFile$1.prototype, 'extname', { + get: getExtname, + set: setExtname +}); + +// Access stem (`index.min`). +Object.defineProperty(VFile$1.prototype, 'stem', {get: getStem, set: setStem}); + +// Construct a new file. +function VFile$1(options) { + var prop; + var index; + + if (!options) { + options = {}; + } else if (typeof options === 'string' || buffer$1(options)) { + options = {contents: options}; + } else if ('message' in options && 'messages' in options) { + return options } - // Process the given document (in string or vfile representation), sync. - function processSync(doc) { - var complete = false; - var file; + if (!(this instanceof VFile$1)) { + return new VFile$1(options) + } - freeze(); - assertParser('processSync', processor.Parser); - assertCompiler('processSync', processor.Compiler); - file = vfile(doc); + this.data = {}; + this.messages = []; + this.history = []; + this.cwd = proc$1.cwd(); - process(file, done); + // Set path related properties in the correct order. + index = -1; - assertDone('processSync', 'process', complete); + while (++index < order$3.length) { + prop = order$3[index]; - return file + if (own$c.call(options, prop)) { + this[prop] = options[prop]; + } + } - function done(err) { - complete = true; - bail_1(err); + // Set non-path related properties. + for (prop in options) { + if (order$3.indexOf(prop) < 0) { + this[prop] = options[prop]; } } } -// Check if `value` is a constructor. -function newable(value, name) { - return ( - typeof value === 'function' && - value.prototype && - // A function with keys in its prototype is probably a constructor. - // Classes’ prototype methods are not enumerable, so we check if some value - // exists in the prototype. - (keys(value.prototype) || name in value.prototype) - ) +function getPath() { + return this.history[this.history.length - 1] } -// Check if `value` is an object with keys. -function keys(value) { - var key; - for (key in value) { - return true +function setPath(path) { + assertNonEmpty(path, 'path'); + + if (this.path !== path) { + this.history.push(path); } +} - return false +function getDirname() { + return typeof this.path === 'string' ? p.dirname(this.path) : undefined } -// Assert a parser is available. -function assertParser(name, Parser) { - if (typeof Parser !== 'function') { - throw new Error('Cannot `' + name + '` without `Parser`') - } +function setDirname(dirname) { + assertPath(this.path, 'dirname'); + this.path = p.join(dirname || '', this.basename); } -// Assert a compiler is available. -function assertCompiler(name, Compiler) { - if (typeof Compiler !== 'function') { - throw new Error('Cannot `' + name + '` without `Compiler`') - } +function getBasename() { + return typeof this.path === 'string' ? p.basename(this.path) : undefined } -// Assert the processor is not frozen. -function assertUnfrozen(name, frozen) { - if (frozen) { - throw new Error( - 'Cannot invoke `' + - name + - '` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.' - ) - } +function setBasename(basename) { + assertNonEmpty(basename, 'basename'); + assertPart(basename, 'basename'); + this.path = p.join(this.dirname || '', basename); } -// Assert `node` is a unist node. -function assertNode(node) { - if (!node || typeof node.type !== 'string') { - throw new Error('Expected node, got `' + node + '`') +function getExtname() { + return typeof this.path === 'string' ? p.extname(this.path) : undefined +} + +function setExtname(extname) { + assertPart(extname, 'extname'); + assertPath(this.path, 'extname'); + + if (extname) { + if (extname.charCodeAt(0) !== 46 /* `.` */) { + throw new Error('`extname` must start with `.`') + } + + if (extname.indexOf('.', 1) > -1) { + throw new Error('`extname` cannot contain multiple dots') + } } + + this.path = p.join(this.dirname, this.stem + (extname || '')); } -// Assert that `complete` is `true`. -function assertDone(name, asyncName, complete) { - if (!complete) { +function getStem() { + return typeof this.path === 'string' + ? p.basename(this.path, this.extname) + : undefined +} + +function setStem(stem) { + assertNonEmpty(stem, 'stem'); + assertPart(stem, 'stem'); + this.path = p.join(this.dirname || '', stem + (this.extname || '')); +} + +// Get the value of the file. +function toString$6(encoding) { + return (this.contents || '').toString(encoding) +} + +// Assert that `part` is not a path (i.e., does not contain `p.sep`). +function assertPart(part, name) { + if (part && part.indexOf(p.sep) > -1) { throw new Error( - '`' + name + '` finished async. Use `' + asyncName + '` instead' + '`' + name + '` cannot be a path: did not expect `' + p.sep + '`' ) } } -var mdastUtilToString = toString$3; +// Assert that `part` is not empty. +function assertNonEmpty(part, name) { + if (!part) { + throw new Error('`' + name + '` cannot be empty') + } +} -// Get the text content of a node. -// Prefer the node’s plain-text fields, otherwise serialize its children, -// and if the given value is an array, serialize the nodes in it. -function toString$3(node) { - return ( - (node && - (node.value || - node.alt || - node.title || - ('children' in node && all(node.children)) || - ('length' in node && all(node)))) || - '' - ) +// Assert `path` exists. +function assertPath(path, name) { + if (!path) { + throw new Error('Setting `' + name + '` requires `path` to be set too') + } } -function all(values) { - var result = []; - var index = -1; +var VMessage = vfileMessage; +var VFile = core$1; - while (++index < values.length) { - result[index] = toString$3(values[index]); - } +var lib$1 = VFile; - return result.join('') -} +VFile.prototype.message = message; +VFile.prototype.info = info; +VFile.prototype.fail = fail; -var assign = Object.assign; +// Create a message with `reason` at `position`. +// When an error is passed in as `reason`, copies the stack. +function message(reason, position, origin) { + var message = new VMessage(reason, position, origin); -var assign_1 = assign; + if (this.path) { + message.name = this.path + ':' + message.name; + message.file = this.path; + } -var own$3 = {}.hasOwnProperty; + message.fatal = false; -var hasOwnProperty = own$3; + this.messages.push(message); -function normalizeIdentifier(value) { - return ( - value // Collapse Markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') // Trim. - .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no object method is uppercase. - .toLowerCase() - .toUpperCase() - ) + return message } -var normalizeIdentifier_1 = normalizeIdentifier; +// Fail: creates a vmessage, associates it with the file, and throws it. +function fail() { + var message = this.message.apply(this, arguments); -var fromCharCode = String.fromCharCode; + message.fatal = true; -var fromCharCode_1 = fromCharCode; + throw message +} -function safeFromInt(value, base) { - var code = parseInt(value, base); +// Info: creates a vmessage, associates it with the file, and marks the fatality +// as null. +function info() { + var message = this.message.apply(this, arguments); - if ( - // C0 except for HT, LF, FF, CR, space - code < 9 || - code === 11 || - (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls. - (code > 126 && code < 160) || // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || // Noncharacters. - (code > 64975 && code < 65008) || - (code & 65535) === 65535 || - (code & 65535) === 65534 || // Out of range - code > 1114111 - ) { - return '\uFFFD' - } + message.fatal = null; - return fromCharCode_1(code) + return message } -var safeFromInt_1 = safeFromInt; +var vfile$1 = lib$1; -function miniflat(value) { - return value === null || value === undefined - ? [] - : 'length' in value - ? value - : [value] -} +var bail = bail_1; +var buffer = isBuffer; +var extend$1 = extend$2; +var plain = isPlainObj; +var trough = trough_1; +var vfile = vfile$1; -var miniflat_1 = miniflat; +// Expose a frozen processor. +var unified_1 = unified$1().freeze(); -function markdownLineEnding(code) { - return code < -2 -} +var slice$1 = [].slice; +var own$b = {}.hasOwnProperty; -var markdownLineEnding_1 = markdownLineEnding; +// Process pipeline. +var pipeline = trough() + .use(pipelineParse) + .use(pipelineRun) + .use(pipelineStringify); -function markdownSpace(code) { - return code === -2 || code === -1 || code === 32 +function pipelineParse(p, ctx) { + ctx.tree = p.parse(ctx.file); } -var markdownSpace_1 = markdownSpace; - -function spaceFactory(effects, ok, type, max) { - var limit = max ? max - 1 : Infinity; - var size = 0; - return start +function pipelineRun(p, ctx, next) { + p.run(ctx.tree, ctx.file, done); - function start(code) { - if (markdownSpace_1(code)) { - effects.enter(type); - return prefix(code) + function done(error, tree, file) { + if (error) { + next(error); + } else { + ctx.tree = tree; + ctx.file = file; + next(); } - - return ok(code) } +} - function prefix(code) { - if (markdownSpace_1(code) && size++ < limit) { - effects.consume(code); - return prefix +function pipelineStringify(p, ctx) { + var result = p.stringify(ctx.tree, ctx.file); + + if (result === undefined || result === null) ; else if (typeof result === 'string' || buffer(result)) { + if ('value' in ctx.file) { + ctx.file.value = result; } - effects.exit(type); - return ok(code) + ctx.file.contents = result; + } else { + ctx.file.result = result; } } -var factorySpace = spaceFactory; +// Function to create the first processor. +function unified$1() { + var attachers = []; + var transformers = trough(); + var namespace = {}; + var freezeIndex = -1; + var frozen; -var tokenize = initializeContent; + // Data management. + processor.data = data; -function initializeContent(effects) { - var contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ); - var previous; - return contentStart + // Lock. + processor.freeze = freeze; - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code); - return - } + // Plugins. + processor.attachers = attachers; + processor.use = use; - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace(effects, contentStart, 'linePrefix') - } + // API. + processor.parse = parse; + processor.stringify = stringify; + processor.run = run; + processor.runSync = runSync; + processor.process = process; + processor.processSync = processSync; - function paragraphInitial(code) { - effects.enter('paragraph'); - return lineStart(code) - } + // Expose. + return processor - function lineStart(code) { - var token = effects.enter('chunkText', { - contentType: 'text', - previous: previous - }); + // Create a new processor based on the processor in the current scope. + function processor() { + var destination = unified$1(); + var index = -1; - if (previous) { - previous.next = token; + while (++index < attachers.length) { + destination.use.apply(null, attachers[index]); } - previous = token; - return data(code) + destination.data(extend$1(true, {}, namespace)); + + return destination } - function data(code) { - if (code === null) { - effects.exit('chunkText'); - effects.exit('paragraph'); - effects.consume(code); - return + // Freeze: used to signal a processor that has finished configuration. + // + // For example, take unified itself: it’s frozen. + // Plugins should not be added to it. + // Rather, it should be extended, by invoking it, before modifying it. + // + // In essence, always invoke this when exporting a processor. + function freeze() { + var values; + var transformer; + + if (frozen) { + return processor } - if (markdownLineEnding_1(code)) { - effects.consume(code); - effects.exit('chunkText'); - return lineStart - } // Data. + while (++freezeIndex < attachers.length) { + values = attachers[freezeIndex]; - effects.consume(code); - return data - } -} + if (values[1] === false) { + continue + } -var tokenize_1 = tokenize; + if (values[1] === true) { + values[1] = undefined; + } -var content = /*#__PURE__*/Object.defineProperty({ - tokenize: tokenize_1 -}, '__esModule', {value: true}); + transformer = values[0].apply(processor, values.slice(1)); -var partialBlankLine = { - tokenize: tokenizePartialBlankLine, - partial: true -}; + if (typeof transformer === 'function') { + transformers.use(transformer); + } + } -function tokenizePartialBlankLine(effects, ok, nok) { - return factorySpace(effects, afterWhitespace, 'linePrefix') + frozen = true; + freezeIndex = Infinity; - function afterWhitespace(code) { - return code === null || markdownLineEnding_1(code) ? ok(code) : nok(code) + return processor } -} - -var partialBlankLine_1 = partialBlankLine; - -var tokenize$1 = initializeDocument; -var containerConstruct = { - tokenize: tokenizeContainer -}; -var lazyFlowConstruct = { - tokenize: tokenizeLazyFlow -}; -function initializeDocument(effects) { - var self = this; - var stack = []; - var continued = 0; - var inspectConstruct = { - tokenize: tokenizeInspect, - partial: true - }; - var inspectResult; - var childFlow; - var childToken; - return start + // Data management. + // Getter / setter for processor-specific informtion. + function data(key, value) { + if (typeof key === 'string') { + // Set `key`. + if (arguments.length === 2) { + assertUnfrozen('data', frozen); + namespace[key] = value; + return processor + } - function start(code) { - if (continued < stack.length) { - self.containerState = stack[continued][1]; - return effects.attempt( - stack[continued][0].continuation, - documentContinue, - documentContinued - )(code) + // Get `key`. + return (own$b.call(namespace, key) && namespace[key]) || null } - return documentContinued(code) - } + // Set space. + if (key) { + assertUnfrozen('data', frozen); + namespace = key; + return processor + } - function documentContinue(code) { - continued++; - return start(code) + // Get space. + return namespace } - function documentContinued(code) { - // If we’re in a concrete construct (such as when expecting another line of + // Plugin management. + // + // Pass it: + // * an attacher and options, + // * a preset, + // * a list of presets, attachers, and arguments (list of attachers and + // options). + function use(value) { + var settings; + + assertUnfrozen('use', frozen); + + if (value === null || value === undefined) ; else if (typeof value === 'function') { + addPlugin.apply(null, arguments); + } else if (typeof value === 'object') { + if ('length' in value) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new Error('Expected usable value, not `' + value + '`') + } + + if (settings) { + namespace.settings = extend$1(namespace.settings || {}, settings); + } + + return processor + + function addPreset(result) { + addList(result.plugins); + + if (result.settings) { + settings = extend$1(settings || {}, result.settings); + } + } + + function add(value) { + if (typeof value === 'function') { + addPlugin(value); + } else if (typeof value === 'object') { + if ('length' in value) { + addPlugin.apply(null, value); + } else { + addPreset(value); + } + } else { + throw new Error('Expected usable value, not `' + value + '`') + } + } + + function addList(plugins) { + var index = -1; + + if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && 'length' in plugins) { + while (++index < plugins.length) { + add(plugins[index]); + } + } else { + throw new Error('Expected a list of plugins, not `' + plugins + '`') + } + } + + function addPlugin(plugin, value) { + var entry = find(plugin); + + if (entry) { + if (plain(entry[1]) && plain(value)) { + value = extend$1(true, entry[1], value); + } + + entry[1] = value; + } else { + attachers.push(slice$1.call(arguments)); + } + } + } + + function find(plugin) { + var index = -1; + + while (++index < attachers.length) { + if (attachers[index][0] === plugin) { + return attachers[index] + } + } + } + + // Parse a file (in string or vfile representation) into a unist node using + // the `Parser` on the processor. + function parse(doc) { + var file = vfile(doc); + var Parser; + + freeze(); + Parser = processor.Parser; + assertParser('parse', Parser); + + if (newable(Parser, 'parse')) { + return new Parser(String(file), file).parse() + } + + return Parser(String(file), file) // eslint-disable-line new-cap + } + + // Run transforms on a unist node representation of a file (in string or + // vfile representation), async. + function run(node, file, cb) { + assertNode(node); + freeze(); + + if (!cb && typeof file === 'function') { + cb = file; + file = null; + } + + if (!cb) { + return new Promise(executor) + } + + executor(null, cb); + + function executor(resolve, reject) { + transformers.run(node, vfile(file), done); + + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + cb(null, tree, file); + } + } + } + } + + // Run transforms on a unist node representation of a file (in string or + // vfile representation), sync. + function runSync(node, file) { + var result; + var complete; + + run(node, file, done); + + assertDone('runSync', 'run', complete); + + return result + + function done(error, tree) { + complete = true; + result = tree; + bail(error); + } + } + + // Stringify a unist node representation of a file (in string or vfile + // representation) into a string using the `Compiler` on the processor. + function stringify(node, doc) { + var file = vfile(doc); + var Compiler; + + freeze(); + Compiler = processor.Compiler; + assertCompiler('stringify', Compiler); + assertNode(node); + + if (newable(Compiler, 'compile')) { + return new Compiler(node, file).compile() + } + + return Compiler(node, file) // eslint-disable-line new-cap + } + + // Parse a file (in string or vfile representation) into a unist node using + // the `Parser` on the processor, then run transforms on that node, and + // compile the resulting node using the `Compiler` on the processor, and + // store that result on the vfile. + function process(doc, cb) { + freeze(); + assertParser('process', processor.Parser); + assertCompiler('process', processor.Compiler); + + if (!cb) { + return new Promise(executor) + } + + executor(null, cb); + + function executor(resolve, reject) { + var file = vfile(doc); + + pipeline.run(processor, {file: file}, done); + + function done(error) { + if (error) { + reject(error); + } else if (resolve) { + resolve(file); + } else { + cb(null, file); + } + } + } + } + + // Process the given document (in string or vfile representation), sync. + function processSync(doc) { + var file; + var complete; + + freeze(); + assertParser('processSync', processor.Parser); + assertCompiler('processSync', processor.Compiler); + file = vfile(doc); + + process(file, done); + + assertDone('processSync', 'process', complete); + + return file + + function done(error) { + complete = true; + bail(error); + } + } +} + +// Check if `value` is a constructor. +function newable(value, name) { + return ( + typeof value === 'function' && + value.prototype && + // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + (keys(value.prototype) || name in value.prototype) + ) +} + +// Check if `value` is an object with keys. +function keys(value) { + var key; + for (key in value) { + return true + } + + return false +} + +// Assert a parser is available. +function assertParser(name, Parser) { + if (typeof Parser !== 'function') { + throw new Error('Cannot `' + name + '` without `Parser`') + } +} + +// Assert a compiler is available. +function assertCompiler(name, Compiler) { + if (typeof Compiler !== 'function') { + throw new Error('Cannot `' + name + '` without `Compiler`') + } +} + +// Assert the processor is not frozen. +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + 'Cannot invoke `' + + name + + '` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.' + ) + } +} + +// Assert `node` is a unist node. +function assertNode(node) { + if (!node || typeof node.type !== 'string') { + throw new Error('Expected node, got `' + node + '`') + } +} + +// Assert that `complete` is `true`. +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + '`' + name + '` finished async. Use `' + asyncName + '` instead' + ) + } +} + +var mdastUtilToString$1 = toString$5; + +// Get the text content of a node. +// Prefer the node’s plain-text fields, otherwise serialize its children, +// and if the given value is an array, serialize the nodes in it. +function toString$5(node) { + return ( + (node && + (node.value || + node.alt || + node.title || + ('children' in node && all$2(node.children)) || + ('length' in node && all$2(node)))) || + '' + ) +} + +function all$2(values) { + var result = []; + var index = -1; + + while (++index < values.length) { + result[index] = toString$5(values[index]); + } + + return result.join('') +} + +var assign$5 = Object.assign; + +var assign_1 = assign$5; + +var own$a = {}.hasOwnProperty; + +var hasOwnProperty$2 = own$a; + +function normalizeIdentifier$4(value) { + return ( + value // Collapse Markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') // Trim. + .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no object method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +var normalizeIdentifier_1 = normalizeIdentifier$4; + +var fromCharCode$4 = String.fromCharCode; + +var fromCharCode_1 = fromCharCode$4; + +var fromCharCode$3 = fromCharCode_1; + +function safeFromInt$1(value, base) { + var code = parseInt(value, base); + + if ( + // C0 except for HT, LF, FF, CR, space + code < 9 || + code === 11 || + (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls. + (code > 126 && code < 160) || // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || // Noncharacters. + (code > 64975 && code < 65008) || + (code & 65535) === 65535 || + (code & 65535) === 65534 || // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + + return fromCharCode$3(code) +} + +var safeFromInt_1 = safeFromInt$1; + +var content$3 = {}; + +function markdownLineEnding$k(code) { + return code < -2 +} + +var markdownLineEnding_1 = markdownLineEnding$k; + +function markdownSpace$a(code) { + return code === -2 || code === -1 || code === 32 +} + +var markdownSpace_1 = markdownSpace$a; + +var markdownSpace$9 = markdownSpace_1; + +function spaceFactory(effects, ok, type, max) { + var limit = max ? max - 1 : Infinity; + var size = 0; + return start + + function start(code) { + if (markdownSpace$9(code)) { + effects.enter(type); + return prefix(code) + } + + return ok(code) + } + + function prefix(code) { + if (markdownSpace$9(code) && size++ < limit) { + effects.consume(code); + return prefix + } + + effects.exit(type); + return ok(code) + } +} + +var factorySpace$i = spaceFactory; + +Object.defineProperty(content$3, '__esModule', {value: true}); + +var markdownLineEnding$j = markdownLineEnding_1; +var factorySpace$h = factorySpace$i; + +var tokenize$2 = initializeContent; + +function initializeContent(effects) { + var contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ); + var previous; + return contentStart + + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code); + return + } + + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace$h(effects, contentStart, 'linePrefix') + } + + function paragraphInitial(code) { + effects.enter('paragraph'); + return lineStart(code) + } + + function lineStart(code) { + var token = effects.enter('chunkText', { + contentType: 'text', + previous: previous + }); + + if (previous) { + previous.next = token; + } + + previous = token; + return data(code) + } + + function data(code) { + if (code === null) { + effects.exit('chunkText'); + effects.exit('paragraph'); + effects.consume(code); + return + } + + if (markdownLineEnding$j(code)) { + effects.consume(code); + effects.exit('chunkText'); + return lineStart + } // Data. + + effects.consume(code); + return data + } +} + +content$3.tokenize = tokenize$2; + +var document$3 = {}; + +var markdownLineEnding$i = markdownLineEnding_1; +var factorySpace$g = factorySpace$i; + +var partialBlankLine$4 = { + tokenize: tokenizePartialBlankLine, + partial: true +}; + +function tokenizePartialBlankLine(effects, ok, nok) { + return factorySpace$g(effects, afterWhitespace, 'linePrefix') + + function afterWhitespace(code) { + return code === null || markdownLineEnding$i(code) ? ok(code) : nok(code) + } +} + +var partialBlankLine_1 = partialBlankLine$4; + +Object.defineProperty(document$3, '__esModule', {value: true}); + +var markdownLineEnding$h = markdownLineEnding_1; +var factorySpace$f = factorySpace$i; +var partialBlankLine$3 = partialBlankLine_1; + +var tokenize$1 = initializeDocument; +var containerConstruct = { + tokenize: tokenizeContainer +}; +var lazyFlowConstruct = { + tokenize: tokenizeLazyFlow +}; + +function initializeDocument(effects) { + var self = this; + var stack = []; + var continued = 0; + var inspectConstruct = { + tokenize: tokenizeInspect, + partial: true + }; + var inspectResult; + var childFlow; + var childToken; + return start + + function start(code) { + if (continued < stack.length) { + self.containerState = stack[continued][1]; + return effects.attempt( + stack[continued][0].continuation, + documentContinue, + documentContinued + )(code) + } + + return documentContinued(code) + } + + function documentContinue(code) { + continued++; + return start(code) + } + + function documentContinued(code) { + // If we’re in a concrete construct (such as when expecting another line of // HTML, or we resulted in lazy content), we can immediately start flow. if (inspectResult && inspectResult.flowContinue) { return flowStart(code) @@ -28195,7 +29041,7 @@ function initializeDocument(effects) { return flowStart(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$h(code)) { effects.consume(code); continueFlow(effects.exit('chunkFlow')); return effects.check(inspectConstruct, documentAfterPeek) @@ -28286,7 +29132,7 @@ function initializeDocument(effects) { effects.attempt( lazyFlowConstruct, inspectFlowEnd, - effects.check(partialBlankLine_1, inspectFlowEnd, inspectLazy) + effects.check(partialBlankLine$3, inspectFlowEnd, inspectLazy) ) )(code) } // Otherwise we’re interrupting. @@ -28316,7 +29162,7 @@ function initializeDocument(effects) { } function tokenizeContainer(effects, ok, nok) { - return factorySpace( + return factorySpace$f( effects, effects.attempt(this.parser.constructs.document, ok, nok), 'linePrefix', @@ -28327,7 +29173,7 @@ function tokenizeContainer(effects, ok, nok) { } function tokenizeLazyFlow(effects, ok, nok) { - return factorySpace( + return factorySpace$f( effects, effects.lazy(this.parser.constructs.flow, ok, nok), 'linePrefix', @@ -28337,15 +29183,13 @@ function tokenizeLazyFlow(effects, ok, nok) { ) } -var tokenize_1$1 = tokenize$1; +document$3.tokenize = tokenize$1; -var document$1 = /*#__PURE__*/Object.defineProperty({ - tokenize: tokenize_1$1 -}, '__esModule', {value: true}); +var flow$7 = {}; // Counts tabs based on their expanded size, and CR+LF as one character. -function sizeChunks(chunks) { +function sizeChunks$2(chunks) { var index = -1; var size = 0; @@ -28356,23 +29200,27 @@ function sizeChunks(chunks) { return size } -var sizeChunks_1 = sizeChunks; +var sizeChunks_1 = sizeChunks$2; -function prefixSize(events, type) { +var sizeChunks$1 = sizeChunks_1; + +function prefixSize$4(events, type) { var tail = events[events.length - 1]; if (!tail || tail[1].type !== type) return 0 - return sizeChunks_1(tail[2].sliceStream(tail[1])) + return sizeChunks$1(tail[2].sliceStream(tail[1])) } -var prefixSize_1 = prefixSize; +var prefixSize_1 = prefixSize$4; + +var splice$2 = [].splice; -var splice = [].splice; +var splice_1 = splice$2; -var splice_1 = splice; +var splice$1 = splice_1; // causes a stack overflow in V8 when trying to insert 100k items for instance. -function chunkedSplice(list, start, remove, items) { +function chunkedSplice$8(list, start, remove, items) { var end = list.length; var chunkStart = 0; var parameters; // Make start between zero and `end` (included). @@ -28388,30 +29236,36 @@ function chunkedSplice(list, start, remove, items) { if (items.length < 10000) { parameters = Array.from(items); parameters.unshift(start, remove); - splice_1.apply(list, parameters); + splice$1.apply(list, parameters); } else { // Delete `remove` items starting from `start` - if (remove) splice_1.apply(list, [start, remove]); // Insert the items in chunks to not cause stack overflows. + if (remove) splice$1.apply(list, [start, remove]); // Insert the items in chunks to not cause stack overflows. while (chunkStart < items.length) { parameters = items.slice(chunkStart, chunkStart + 10000); parameters.unshift(start, 0); - splice_1.apply(list, parameters); + splice$1.apply(list, parameters); chunkStart += 10000; start += 10000; } } } -var chunkedSplice_1 = chunkedSplice; +var chunkedSplice_1 = chunkedSplice$8; -function shallow(object) { - return assign_1({}, object) +var assign$4 = assign_1; + +function shallow$6(object) { + return assign$4({}, object) } -var shallow_1 = shallow; +var shallow_1 = shallow$6; + +var assign$3 = assign_1; +var chunkedSplice$7 = chunkedSplice_1; +var shallow$5 = shallow_1; -function subtokenize(events) { +function subtokenize$2(events) { var jumps = {}; var index = -1; var event; @@ -28464,7 +29318,7 @@ function subtokenize(events) { if (event[0] === 'enter') { if (event[1].contentType) { - assign_1(jumps, subcontent(events, index)); + assign$3(jumps, subcontent(events, index)); index = jumps[index]; more = true; } @@ -28495,11 +29349,11 @@ function subtokenize(events) { if (lineIndex) { // Fix position. - event[1].end = shallow_1(events[lineIndex][1].start); // Switch container exit w/ line endings. + event[1].end = shallow$5(events[lineIndex][1].start); // Switch container exit w/ line endings. parameters = events.slice(lineIndex, index); parameters.unshift(event); - chunkedSplice_1(events, lineIndex, index - lineIndex + 1, parameters); + chunkedSplice$7(events, lineIndex, index - lineIndex + 1, parameters); } } } @@ -28599,14 +29453,19 @@ function subcontent(events, eventIndex) { function add(slice) { var start = startPositions.pop(); jumps.unshift([start, start + slice.length - 1]); - chunkedSplice_1(events, start, 2, slice); + chunkedSplice$7(events, start, 2, slice); } } -var subtokenize_1 = subtokenize; +var subtokenize_1 = subtokenize$2; + +var markdownLineEnding$g = markdownLineEnding_1; +var prefixSize$3 = prefixSize_1; +var subtokenize$1 = subtokenize_1; +var factorySpace$e = factorySpace$i; // No name because it must not be turned off. -var content$1 = { +var content$2 = { tokenize: tokenizeContent, resolve: resolveContent, interruptible: true, @@ -28619,7 +29478,7 @@ var continuationConstruct = { // parsed right now: before text in paragraphs (specifically, media) are parsed. function resolveContent(events) { - subtokenize_1(events); + subtokenize$1(events); return events } @@ -28640,7 +29499,7 @@ function tokenizeContent(effects, ok) { return contentEnd(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$g(code)) { return effects.check( continuationConstruct, contentContinue, @@ -28677,17 +29536,17 @@ function tokenizeContinuation(effects, ok, nok) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); - return factorySpace(effects, prefixed, 'linePrefix') + return factorySpace$e(effects, prefixed, 'linePrefix') } function prefixed(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$g(code)) { return nok(code) } if ( self.parser.constructs.disable.null.indexOf('codeIndented') > -1 || - prefixSize_1(self.events, 'linePrefix') < 4 + prefixSize$3(self.events, 'linePrefix') < 4 ) { return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) } @@ -28696,25 +29555,31 @@ function tokenizeContinuation(effects, ok, nok) { } } -var content_1 = content$1; +var content_1 = content$2; + +Object.defineProperty(flow$7, '__esModule', {value: true}); -var tokenize$2 = initializeFlow; +var content$1 = content_1; +var factorySpace$d = factorySpace$i; +var partialBlankLine$2 = partialBlankLine_1; + +var tokenize = initializeFlow; function initializeFlow(effects) { var self = this; var initial = effects.attempt( // Try to parse a blank line. - partialBlankLine_1, + partialBlankLine$2, atBlankEnding, // Try to parse initial flow (essentially, only code). effects.attempt( this.parser.constructs.flowInitial, afterConstruct, - factorySpace( + factorySpace$d( effects, effects.attempt( this.parser.constructs.flow, afterConstruct, - effects.attempt(content_1, afterConstruct) + effects.attempt(content$1, afterConstruct) ), 'linePrefix' ) @@ -28749,14 +29614,17 @@ function initializeFlow(effects) { } } -var tokenize_1$2 = tokenize$2; +flow$7.tokenize = tokenize; + +var text$5 = {}; -var flow = /*#__PURE__*/Object.defineProperty({ - tokenize: tokenize_1$2 -}, '__esModule', {value: true}); +Object.defineProperty(text$5, '__esModule', {value: true}); -var text = initializeFactory('text'); -var string = initializeFactory('string'); +var assign$2 = assign_1; +var shallow$4 = shallow_1; + +var text$4 = initializeFactory('text'); +var string$1 = initializeFactory('string'); var resolver = { resolveAll: createResolver() }; @@ -28922,12 +29790,12 @@ function resolveAllLineSuffixes(events, context) { ? bufferIndex : data.start._bufferIndex + bufferIndex }, - end: shallow_1(data.end) + end: shallow$4(data.end) }; - data.end = shallow_1(token.start); + data.end = shallow$4(token.start); if (data.start.offset === data.end.offset) { - assign_1(data, token); + assign$2(data, token); } else { events.splice( eventIndex, @@ -28946,17 +29814,25 @@ function resolveAllLineSuffixes(events, context) { return events } -var resolver_1 = resolver; -var string_1 = string; -var text_2 = text; +text$5.resolver = resolver; +text$5.string = string$1; +text$5.text = text$4; + +function miniflat$3(value) { + return value === null || value === undefined + ? [] + : 'length' in value + ? value + : [value] +} + +var miniflat_1 = miniflat$3; -var text_1 = /*#__PURE__*/Object.defineProperty({ - resolver: resolver_1, - string: string_1, - text: text_2 -}, '__esModule', {value: true}); +var hasOwnProperty$1 = hasOwnProperty$2; +var chunkedSplice$6 = chunkedSplice_1; +var miniflat$2 = miniflat_1; -function combineExtensions(extensions) { +function combineExtensions$2(extensions) { var all = {}; var index = -1; @@ -28974,19 +29850,19 @@ function extension$1(all, extension) { var code; for (hook in extension) { - left = hasOwnProperty.call(all, hook) ? all[hook] : (all[hook] = {}); + left = hasOwnProperty$1.call(all, hook) ? all[hook] : (all[hook] = {}); right = extension[hook]; for (code in right) { - left[code] = constructs( - miniflat_1(right[code]), - hasOwnProperty.call(left, code) ? left[code] : [] + left[code] = constructs$3( + miniflat$2(right[code]), + hasOwnProperty$1.call(left, code) ? left[code] : [] ); } } } -function constructs(list, existing) { +function constructs$3(list, existing) { var index = -1; var before = []; @@ -28994,24 +29870,26 @@ function constructs(list, existing) { (list[index].add === 'after' ? existing : before).push(list[index]); } - chunkedSplice_1(existing, 0, 0, before); + chunkedSplice$6(existing, 0, 0, before); return existing } -var combineExtensions_1 = combineExtensions; +var combineExtensions_1 = combineExtensions$2; -function chunkedPush(list, items) { +var chunkedSplice$5 = chunkedSplice_1; + +function chunkedPush$3(list, items) { if (list.length) { - chunkedSplice_1(list, list.length, 0, items); + chunkedSplice$5(list, list.length, 0, items); return list } return items } -var chunkedPush_1 = chunkedPush; +var chunkedPush_1 = chunkedPush$3; -function resolveAll(constructs, events, context) { +function resolveAll$4(constructs, events, context) { var called = []; var index = -1; var resolve; @@ -29028,9 +29906,11 @@ function resolveAll(constructs, events, context) { return events } -var resolveAll_1 = resolveAll; +var resolveAll_1 = resolveAll$4; -function serializeChunks(chunks) { +var fromCharCode$2 = fromCharCode_1; + +function serializeChunks$1(chunks) { var index = -1; var result = []; var chunk; @@ -29055,7 +29935,7 @@ function serializeChunks(chunks) { value = ' '; } else { // Currently only replacement character. - value = fromCharCode_1(chunk); + value = fromCharCode$2(chunk); } atTab = chunk === -2; @@ -29065,9 +29945,9 @@ function serializeChunks(chunks) { return result.join('') } -var serializeChunks_1 = serializeChunks; +var serializeChunks_1 = serializeChunks$1; -function sliceChunks(chunks, token) { +function sliceChunks$1(chunks, token) { var startIndex = token.start._index; var startBufferIndex = token.start._bufferIndex; var endIndex = token.end._index; @@ -29091,7 +29971,17 @@ function sliceChunks(chunks, token) { return view } -var sliceChunks_1 = sliceChunks; +var sliceChunks_1 = sliceChunks$1; + +var assign$1 = assign_1; +var markdownLineEnding$f = markdownLineEnding_1; +var chunkedPush$2 = chunkedPush_1; +var chunkedSplice$4 = chunkedSplice_1; +var miniflat$1 = miniflat_1; +var resolveAll$3 = resolveAll_1; +var serializeChunks = serializeChunks_1; +var shallow$3 = shallow_1; +var sliceChunks = sliceChunks_1; // Create a tokenizer. // Tokenizers deal with one type of data (e.g., containers, flow, text). @@ -29100,9 +29990,9 @@ var sliceChunks_1 = sliceChunks; // function is used, in which case it doesn’t receive an `ok` or `nok`. // `from` can be given to set the point before the first character, although // when further lines are indented, they must be set with `defineSkip`. -function createTokenizer(parser, initialize, from) { +function createTokenizer$1(parser, initialize, from) { var point = from - ? shallow_1(from) + ? shallow$3(from) : { line: 1, column: 1, @@ -29149,7 +30039,7 @@ function createTokenizer(parser, initialize, from) { return context function write(slice) { - chunks = chunkedPush_1(chunks, slice); + chunks = chunkedPush$2(chunks, slice); main(); // Exit if we’re not done, resolve might change stuff. if (chunks[chunks.length - 1] !== null) { @@ -29158,22 +30048,22 @@ function createTokenizer(parser, initialize, from) { addResult(initialize, 0); // Otherwise, resolve, and exit. - context.events = resolveAll_1(resolveAllConstructs, context.events, context); + context.events = resolveAll$3(resolveAllConstructs, context.events, context); return context.events } // // Tools. // function sliceSerialize(token) { - return serializeChunks_1(sliceStream(token)) + return serializeChunks(sliceStream(token)) } function sliceStream(token) { - return sliceChunks_1(chunks, token) + return sliceChunks(chunks, token) } function now() { - return shallow_1(point) + return shallow$3(point) } function skip(value) { @@ -29220,7 +30110,7 @@ function createTokenizer(parser, initialize, from) { } // Move a character forward. function consume(code) { - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$f(code)) { point.line++; point.column = 1; point.offset += code === -3 ? 2 : 1; @@ -29278,7 +30168,7 @@ function createTokenizer(parser, initialize, from) { var currentConstruct; var info; return constructs.tokenize || 'length' in constructs - ? handleListOfConstructs(miniflat_1(constructs)) + ? handleListOfConstructs(miniflat$1(constructs)) : handleMapOfConstructs function handleMapOfConstructs(code) { @@ -29286,7 +30176,7 @@ function createTokenizer(parser, initialize, from) { return handleListOfConstructs( constructs.null ? /* c8 ignore next */ - miniflat_1(constructs[code]).concat(miniflat_1(constructs.null)) + miniflat$1(constructs[code]).concat(miniflat$1(constructs.null)) : constructs[code] )(code) } @@ -29323,7 +30213,7 @@ function createTokenizer(parser, initialize, from) { } return construct.tokenize.call( - fields ? assign_1({}, context, fields) : context, + fields ? assign$1({}, context, fields) : context, effects, ok, nok @@ -29354,7 +30244,7 @@ function createTokenizer(parser, initialize, from) { } if (construct.resolve) { - chunkedSplice_1( + chunkedSplice$4( context.events, from, context.events.length - from, @@ -29396,23 +30286,15 @@ function createTokenizer(parser, initialize, from) { } } -var createTokenizer_1 = createTokenizer; +var createTokenizer_1 = createTokenizer$1; -function markdownLineEndingOrSpace(code) { - return code < 0 || code === 32 -} - -var markdownLineEndingOrSpace_1 = markdownLineEndingOrSpace; +var constructs$2 = {}; -function regexCheck(regex) { - return check - - function check(code) { - return regex.test(fromCharCode_1(code)) - } +function markdownLineEndingOrSpace$9(code) { + return code < 0 || code === 32 } -var regexCheck_1 = regexCheck; +var markdownLineEndingOrSpace_1 = markdownLineEndingOrSpace$9; // This module is generated by `script/`. // @@ -29420,52 +30302,80 @@ var regexCheck_1 = regexCheck; // before or after them. // One such difference is if those characters are Unicode punctuation. // This script is generated from the Unicode data. -var unicodePunctuation = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; +var unicodePunctuation$3 = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; + +var unicodePunctuationRegex$2 = unicodePunctuation$3; + +var fromCharCode$1 = fromCharCode_1; + +function regexCheck$9(regex) { + return check + + function check(code) { + return regex.test(fromCharCode$1(code)) + } +} -var unicodePunctuationRegex = unicodePunctuation; +var regexCheck_1 = regexCheck$9; + +var unicodePunctuationRegex$1 = unicodePunctuationRegex$2; +var regexCheck$8 = regexCheck_1; // In fact adds to the bundle size. -var unicodePunctuation$1 = regexCheck_1(unicodePunctuationRegex); +var unicodePunctuation$2 = regexCheck$8(unicodePunctuationRegex$1); + +var unicodePunctuation_1 = unicodePunctuation$2; -var unicodePunctuation_1 = unicodePunctuation$1; +var regexCheck$7 = regexCheck_1; -var unicodeWhitespace = regexCheck_1(/\s/); +var unicodeWhitespace$2 = regexCheck$7(/\s/); -var unicodeWhitespace_1 = unicodeWhitespace; +var unicodeWhitespace_1 = unicodeWhitespace$2; + +var markdownLineEndingOrSpace$8 = markdownLineEndingOrSpace_1; +var unicodePunctuation$1 = unicodePunctuation_1; +var unicodeWhitespace$1 = unicodeWhitespace_1; // Classify whether a character is unicode whitespace, unicode punctuation, or // anything else. // Used for attention (emphasis, strong), whose sequences can open or close // based on the class of surrounding characters. -function classifyCharacter(code) { +function classifyCharacter$2(code) { if ( code === null || - markdownLineEndingOrSpace_1(code) || - unicodeWhitespace_1(code) + markdownLineEndingOrSpace$8(code) || + unicodeWhitespace$1(code) ) { return 1 } - if (unicodePunctuation_1(code)) { + if (unicodePunctuation$1(code)) { return 2 } } -var classifyCharacter_1 = classifyCharacter; +var classifyCharacter_1 = classifyCharacter$2; // chunks (replacement characters, tabs, or line endings). -function movePoint(point, offset) { +function movePoint$1(point, offset) { point.column += offset; point.offset += offset; point._bufferIndex += offset; return point } -var movePoint_1 = movePoint; +var movePoint_1 = movePoint$1; -var attention = { +var chunkedPush$1 = chunkedPush_1; +var chunkedSplice$3 = chunkedSplice_1; +var classifyCharacter$1 = classifyCharacter_1; +var movePoint = movePoint_1; +var resolveAll$2 = resolveAll_1; +var shallow$2 = shallow_1; + +var attention$1 = { name: 'attention', tokenize: tokenizeAttention, resolveAll: resolveAllAttention @@ -29528,52 +30438,52 @@ function resolveAllAttention(events, context) { : 1; openingSequence = { type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: movePoint_1(shallow_1(events[open][1].end), -use), - end: shallow_1(events[open][1].end) + start: movePoint(shallow$2(events[open][1].end), -use), + end: shallow$2(events[open][1].end) }; closingSequence = { type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: shallow_1(events[index][1].start), - end: movePoint_1(shallow_1(events[index][1].start), use) + start: shallow$2(events[index][1].start), + end: movePoint(shallow$2(events[index][1].start), use) }; text = { type: use > 1 ? 'strongText' : 'emphasisText', - start: shallow_1(events[open][1].end), - end: shallow_1(events[index][1].start) + start: shallow$2(events[open][1].end), + end: shallow$2(events[index][1].start) }; group = { type: use > 1 ? 'strong' : 'emphasis', - start: shallow_1(openingSequence.start), - end: shallow_1(closingSequence.end) + start: shallow$2(openingSequence.start), + end: shallow$2(closingSequence.end) }; - events[open][1].end = shallow_1(openingSequence.start); - events[index][1].start = shallow_1(closingSequence.end); + events[open][1].end = shallow$2(openingSequence.start); + events[index][1].start = shallow$2(closingSequence.end); nextEvents = []; // If there are more markers in the opening, add them before. if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = chunkedPush_1(nextEvents, [ + nextEvents = chunkedPush$1(nextEvents, [ ['enter', events[open][1], context], ['exit', events[open][1], context] ]); } // Opening. - nextEvents = chunkedPush_1(nextEvents, [ + nextEvents = chunkedPush$1(nextEvents, [ ['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context] ]); // Between. - nextEvents = chunkedPush_1( + nextEvents = chunkedPush$1( nextEvents, - resolveAll_1( + resolveAll$2( context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context ) ); // Closing. - nextEvents = chunkedPush_1(nextEvents, [ + nextEvents = chunkedPush$1(nextEvents, [ ['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], @@ -29582,7 +30492,7 @@ function resolveAllAttention(events, context) { if (events[index][1].end.offset - events[index][1].start.offset) { offset = 2; - nextEvents = chunkedPush_1(nextEvents, [ + nextEvents = chunkedPush$1(nextEvents, [ ['enter', events[index][1], context], ['exit', events[index][1], context] ]); @@ -29590,7 +30500,7 @@ function resolveAllAttention(events, context) { offset = 0; } - chunkedSplice_1(events, open - 1, index - open + 3, nextEvents); + chunkedSplice$3(events, open - 1, index - open + 3, nextEvents); index = open + nextEvents.length - offset - 2; break } @@ -29610,7 +30520,7 @@ function resolveAllAttention(events, context) { } function tokenizeAttention(effects, ok) { - var before = classifyCharacter_1(this.previous); + var before = classifyCharacter$1(this.previous); var marker; return start @@ -29632,7 +30542,7 @@ function tokenizeAttention(effects, ok) { } token = effects.exit('attentionSequence'); - after = classifyCharacter_1(code); + after = classifyCharacter$1(code); open = !after || (after === 2 && before); close = !before || (before === 2 && after); token._open = marker === 42 ? open : open && (before || !close); @@ -29641,22 +30551,28 @@ function tokenizeAttention(effects, ok) { } } -var attention_1 = attention; +var attention_1 = attention$1; + +var regexCheck$6 = regexCheck_1; -var asciiAlphanumeric = regexCheck_1(/[\dA-Za-z]/); +var asciiAlpha$4 = regexCheck$6(/[A-Za-z]/); -var asciiAlphanumeric_1 = asciiAlphanumeric; +var asciiAlpha_1 = asciiAlpha$4; -var asciiAlpha = regexCheck_1(/[A-Za-z]/); +var regexCheck$5 = regexCheck_1; -var asciiAlpha_1 = asciiAlpha; +var asciiAlphanumeric$5 = regexCheck$5(/[\dA-Za-z]/); -var asciiAtext = regexCheck_1(/[#-'*+\--9=?A-Z^-~]/); +var asciiAlphanumeric_1 = asciiAlphanumeric$5; -var asciiAtext_1 = asciiAtext; +var regexCheck$4 = regexCheck_1; + +var asciiAtext$1 = regexCheck$4(/[#-'*+\--9=?A-Z^-~]/); + +var asciiAtext_1 = asciiAtext$1; // Note: EOF is seen as ASCII control here, because `null < 32 == true`. -function asciiControl(code) { +function asciiControl$3(code) { return ( // Special whitespace codes (which have negative values), C0 and Control // character DEL @@ -29664,9 +30580,14 @@ function asciiControl(code) { ) } -var asciiControl_1 = asciiControl; +var asciiControl_1 = asciiControl$3; + +var asciiAlpha$3 = asciiAlpha_1; +var asciiAlphanumeric$4 = asciiAlphanumeric_1; +var asciiAtext = asciiAtext_1; +var asciiControl$2 = asciiControl_1; -var autolink = { +var autolink$1 = { name: 'autolink', tokenize: tokenizeAutolink }; @@ -29685,16 +30606,16 @@ function tokenizeAutolink(effects, ok, nok) { } function open(code) { - if (asciiAlpha_1(code)) { + if (asciiAlpha$3(code)) { effects.consume(code); return schemeOrEmailAtext } - return asciiAtext_1(code) ? emailAtext(code) : nok(code) + return asciiAtext(code) ? emailAtext(code) : nok(code) } function schemeOrEmailAtext(code) { - return code === 43 || code === 45 || code === 46 || asciiAlphanumeric_1(code) + return code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code) ? schemeInsideOrEmailAtext(code) : emailAtext(code) } @@ -29706,7 +30627,7 @@ function tokenizeAutolink(effects, ok, nok) { } if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric_1(code)) && + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code)) && size++ < 32 ) { effects.consume(code); @@ -29722,7 +30643,7 @@ function tokenizeAutolink(effects, ok, nok) { return end(code) } - if (code === 32 || code === 60 || asciiControl_1(code)) { + if (code === 32 || code === 60 || asciiControl$2(code)) { return nok(code) } @@ -29737,7 +30658,7 @@ function tokenizeAutolink(effects, ok, nok) { return emailAtSignOrDot } - if (asciiAtext_1(code)) { + if (asciiAtext(code)) { effects.consume(code); return emailAtext } @@ -29746,7 +30667,7 @@ function tokenizeAutolink(effects, ok, nok) { } function emailAtSignOrDot(code) { - return asciiAlphanumeric_1(code) ? emailLabel(code) : nok(code) + return asciiAlphanumeric$4(code) ? emailLabel(code) : nok(code) } function emailLabel(code) { @@ -29766,7 +30687,7 @@ function tokenizeAutolink(effects, ok, nok) { } function emailValue(code) { - if ((code === 45 || asciiAlphanumeric_1(code)) && size++ < 63) { + if ((code === 45 || asciiAlphanumeric$4(code)) && size++ < 63) { effects.consume(code); return code === 45 ? emailValue : emailLabel } @@ -29783,15 +30704,18 @@ function tokenizeAutolink(effects, ok, nok) { } } -var autolink_1 = autolink; +var autolink_1 = autolink$1; -var blockQuote = { +var markdownSpace$8 = markdownSpace_1; +var factorySpace$c = factorySpace$i; + +var blockQuote$1 = { name: 'blockQuote', tokenize: tokenizeBlockQuoteStart, continuation: { tokenize: tokenizeBlockQuoteContinuation }, - exit: exit + exit: exit$1 }; function tokenizeBlockQuoteStart(effects, ok, nok) { @@ -29818,7 +30742,7 @@ function tokenizeBlockQuoteStart(effects, ok, nok) { } function after(code) { - if (markdownSpace_1(code)) { + if (markdownSpace$8(code)) { effects.enter('blockQuotePrefixWhitespace'); effects.consume(code); effects.exit('blockQuotePrefixWhitespace'); @@ -29832,9 +30756,9 @@ function tokenizeBlockQuoteStart(effects, ok, nok) { } function tokenizeBlockQuoteContinuation(effects, ok, nok) { - return factorySpace( + return factorySpace$c( effects, - effects.attempt(blockQuote, ok, nok), + effects.attempt(blockQuote$1, ok, nok), 'linePrefix', this.parser.constructs.disable.null.indexOf('codeIndented') > -1 ? undefined @@ -29842,17 +30766,21 @@ function tokenizeBlockQuoteContinuation(effects, ok, nok) { ) } -function exit(effects) { +function exit$1(effects) { effects.exit('blockQuote'); } -var blockQuote_1 = blockQuote; +var blockQuote_1 = blockQuote$1; + +var regexCheck$3 = regexCheck_1; -var asciiPunctuation = regexCheck_1(/[!-/:-@[-`{-~]/); +var asciiPunctuation$1 = regexCheck$3(/[!-/:-@[-`{-~]/); -var asciiPunctuation_1 = asciiPunctuation; +var asciiPunctuation_1 = asciiPunctuation$1; -var characterEscape = { +var asciiPunctuation = asciiPunctuation_1; + +var characterEscape$2 = { name: 'characterEscape', tokenize: tokenizeCharacterEscape }; @@ -29869,7 +30797,7 @@ function tokenizeCharacterEscape(effects, ok, nok) { } function open(code) { - if (asciiPunctuation_1(code)) { + if (asciiPunctuation(code)) { effects.enter('characterEscapeValue'); effects.consume(code); effects.exit('characterEscapeValue'); @@ -29881,4478 +30809,4489 @@ function tokenizeCharacterEscape(effects, ok, nok) { } } -var characterEscape_1 = characterEscape; +var characterEscape_1 = characterEscape$2; + +const AEli$2 = "Æ"; +const AElig$2 = "Æ"; +const AM$2 = "&"; +const AMP$2 = "&"; +const Aacut$2 = "Á"; +const Aacute$2 = "Á"; +const Abreve$2 = "Ă"; +const Acir$2 = "Â"; +const Acirc$2 = "Â"; +const Acy$2 = "А"; +const Afr$2 = "𝔄"; +const Agrav$2 = "À"; +const Agrave$2 = "À"; +const Alpha$2 = "Α"; +const Amacr$2 = "Ā"; +const And$2 = "⩓"; +const Aogon$2 = "Ą"; +const Aopf$2 = "𝔸"; +const ApplyFunction$2 = "⁡"; +const Arin$2 = "Å"; +const Aring$2 = "Å"; +const Ascr$2 = "𝒜"; +const Assign$2 = "≔"; +const Atild$2 = "Ã"; +const Atilde$2 = "Ã"; +const Aum$2 = "Ä"; +const Auml$2 = "Ä"; +const Backslash$2 = "∖"; +const Barv$2 = "⫧"; +const Barwed$2 = "⌆"; +const Bcy$2 = "Б"; +const Because$2 = "∵"; +const Bernoullis$2 = "ℬ"; +const Beta$2 = "Β"; +const Bfr$2 = "𝔅"; +const Bopf$2 = "𝔹"; +const Breve$2 = "˘"; +const Bscr$2 = "ℬ"; +const Bumpeq$2 = "≎"; +const CHcy$2 = "Ч"; +const COP$2 = "©"; +const COPY$2 = "©"; +const Cacute$2 = "Ć"; +const Cap$2 = "⋒"; +const CapitalDifferentialD$2 = "ⅅ"; +const Cayleys$2 = "ℭ"; +const Ccaron$2 = "Č"; +const Ccedi$2 = "Ç"; +const Ccedil$2 = "Ç"; +const Ccirc$2 = "Ĉ"; +const Cconint$2 = "∰"; +const Cdot$2 = "Ċ"; +const Cedilla$2 = "¸"; +const CenterDot$2 = "·"; +const Cfr$2 = "ℭ"; +const Chi$2 = "Χ"; +const CircleDot$2 = "⊙"; +const CircleMinus$2 = "⊖"; +const CirclePlus$2 = "⊕"; +const CircleTimes$2 = "⊗"; +const ClockwiseContourIntegral$2 = "∲"; +const CloseCurlyDoubleQuote$2 = "”"; +const CloseCurlyQuote$2 = "’"; +const Colon$2 = "∷"; +const Colone$2 = "⩴"; +const Congruent$2 = "≡"; +const Conint$2 = "∯"; +const ContourIntegral$2 = "∮"; +const Copf$2 = "ℂ"; +const Coproduct$2 = "∐"; +const CounterClockwiseContourIntegral$2 = "∳"; +const Cross$2 = "⨯"; +const Cscr$2 = "𝒞"; +const Cup$2 = "⋓"; +const CupCap$2 = "≍"; +const DD$2 = "ⅅ"; +const DDotrahd$2 = "⤑"; +const DJcy$2 = "Ђ"; +const DScy$2 = "Ѕ"; +const DZcy$2 = "Џ"; +const Dagger$2 = "‡"; +const Darr$2 = "↡"; +const Dashv$2 = "⫤"; +const Dcaron$2 = "Ď"; +const Dcy$2 = "Д"; +const Del$2 = "∇"; +const Delta$2 = "Δ"; +const Dfr$2 = "𝔇"; +const DiacriticalAcute$2 = "´"; +const DiacriticalDot$2 = "˙"; +const DiacriticalDoubleAcute$2 = "˝"; +const DiacriticalGrave$2 = "`"; +const DiacriticalTilde$2 = "˜"; +const Diamond$2 = "⋄"; +const DifferentialD$2 = "ⅆ"; +const Dopf$2 = "𝔻"; +const Dot$2 = "¨"; +const DotDot$2 = "⃜"; +const DotEqual$2 = "≐"; +const DoubleContourIntegral$2 = "∯"; +const DoubleDot$2 = "¨"; +const DoubleDownArrow$2 = "⇓"; +const DoubleLeftArrow$2 = "⇐"; +const DoubleLeftRightArrow$2 = "⇔"; +const DoubleLeftTee$2 = "⫤"; +const DoubleLongLeftArrow$2 = "⟸"; +const DoubleLongLeftRightArrow$2 = "⟺"; +const DoubleLongRightArrow$2 = "⟹"; +const DoubleRightArrow$2 = "⇒"; +const DoubleRightTee$2 = "⊨"; +const DoubleUpArrow$2 = "⇑"; +const DoubleUpDownArrow$2 = "⇕"; +const DoubleVerticalBar$2 = "∥"; +const DownArrow$2 = "↓"; +const DownArrowBar$2 = "⤓"; +const DownArrowUpArrow$2 = "⇵"; +const DownBreve$2 = "̑"; +const DownLeftRightVector$2 = "⥐"; +const DownLeftTeeVector$2 = "⥞"; +const DownLeftVector$2 = "↽"; +const DownLeftVectorBar$2 = "⥖"; +const DownRightTeeVector$2 = "⥟"; +const DownRightVector$2 = "⇁"; +const DownRightVectorBar$2 = "⥗"; +const DownTee$2 = "⊤"; +const DownTeeArrow$2 = "↧"; +const Downarrow$2 = "⇓"; +const Dscr$2 = "𝒟"; +const Dstrok$2 = "Đ"; +const ENG$2 = "Ŋ"; +const ET$2 = "Ð"; +const ETH$2 = "Ð"; +const Eacut$2 = "É"; +const Eacute$2 = "É"; +const Ecaron$2 = "Ě"; +const Ecir$2 = "Ê"; +const Ecirc$2 = "Ê"; +const Ecy$2 = "Э"; +const Edot$2 = "Ė"; +const Efr$2 = "𝔈"; +const Egrav$2 = "È"; +const Egrave$2 = "È"; +const Element$2 = "∈"; +const Emacr$2 = "Ē"; +const EmptySmallSquare$2 = "◻"; +const EmptyVerySmallSquare$2 = "▫"; +const Eogon$2 = "Ę"; +const Eopf$2 = "𝔼"; +const Epsilon$2 = "Ε"; +const Equal$2 = "⩵"; +const EqualTilde$2 = "≂"; +const Equilibrium$2 = "⇌"; +const Escr$2 = "ℰ"; +const Esim$2 = "⩳"; +const Eta$2 = "Η"; +const Eum$2 = "Ë"; +const Euml$2 = "Ë"; +const Exists$2 = "∃"; +const ExponentialE$2 = "ⅇ"; +const Fcy$2 = "Ф"; +const Ffr$2 = "𝔉"; +const FilledSmallSquare$2 = "◼"; +const FilledVerySmallSquare$2 = "▪"; +const Fopf$2 = "𝔽"; +const ForAll$2 = "∀"; +const Fouriertrf$2 = "ℱ"; +const Fscr$2 = "ℱ"; +const GJcy$2 = "Ѓ"; +const G$2 = ">"; +const GT$2 = ">"; +const Gamma$2 = "Γ"; +const Gammad$2 = "Ϝ"; +const Gbreve$2 = "Ğ"; +const Gcedil$2 = "Ģ"; +const Gcirc$2 = "Ĝ"; +const Gcy$2 = "Г"; +const Gdot$2 = "Ġ"; +const Gfr$2 = "𝔊"; +const Gg$2 = "⋙"; +const Gopf$2 = "𝔾"; +const GreaterEqual$2 = "≥"; +const GreaterEqualLess$2 = "⋛"; +const GreaterFullEqual$2 = "≧"; +const GreaterGreater$2 = "⪢"; +const GreaterLess$2 = "≷"; +const GreaterSlantEqual$2 = "⩾"; +const GreaterTilde$2 = "≳"; +const Gscr$2 = "𝒢"; +const Gt$2 = "≫"; +const HARDcy$2 = "Ъ"; +const Hacek$2 = "ˇ"; +const Hat$2 = "^"; +const Hcirc$2 = "Ĥ"; +const Hfr$2 = "ℌ"; +const HilbertSpace$2 = "ℋ"; +const Hopf$2 = "ℍ"; +const HorizontalLine$2 = "─"; +const Hscr$2 = "ℋ"; +const Hstrok$2 = "Ħ"; +const HumpDownHump$2 = "≎"; +const HumpEqual$2 = "≏"; +const IEcy$2 = "Е"; +const IJlig$2 = "IJ"; +const IOcy$2 = "Ё"; +const Iacut$2 = "Í"; +const Iacute$2 = "Í"; +const Icir$2 = "Î"; +const Icirc$2 = "Î"; +const Icy$2 = "И"; +const Idot$2 = "İ"; +const Ifr$2 = "ℑ"; +const Igrav$2 = "Ì"; +const Igrave$2 = "Ì"; +const Im$2 = "ℑ"; +const Imacr$2 = "Ī"; +const ImaginaryI$2 = "ⅈ"; +const Implies$2 = "⇒"; +const Int$2 = "∬"; +const Integral$2 = "∫"; +const Intersection$2 = "⋂"; +const InvisibleComma$2 = "⁣"; +const InvisibleTimes$2 = "⁢"; +const Iogon$2 = "Į"; +const Iopf$2 = "𝕀"; +const Iota$2 = "Ι"; +const Iscr$2 = "ℐ"; +const Itilde$2 = "Ĩ"; +const Iukcy$2 = "І"; +const Ium$2 = "Ï"; +const Iuml$2 = "Ï"; +const Jcirc$2 = "Ĵ"; +const Jcy$2 = "Й"; +const Jfr$2 = "𝔍"; +const Jopf$2 = "𝕁"; +const Jscr$2 = "𝒥"; +const Jsercy$2 = "Ј"; +const Jukcy$2 = "Є"; +const KHcy$2 = "Х"; +const KJcy$2 = "Ќ"; +const Kappa$2 = "Κ"; +const Kcedil$2 = "Ķ"; +const Kcy$2 = "К"; +const Kfr$2 = "𝔎"; +const Kopf$2 = "𝕂"; +const Kscr$2 = "𝒦"; +const LJcy$2 = "Љ"; +const L$2 = "<"; +const LT$2 = "<"; +const Lacute$2 = "Ĺ"; +const Lambda$2 = "Λ"; +const Lang$2 = "⟪"; +const Laplacetrf$2 = "ℒ"; +const Larr$2 = "↞"; +const Lcaron$2 = "Ľ"; +const Lcedil$2 = "Ļ"; +const Lcy$2 = "Л"; +const LeftAngleBracket$2 = "⟨"; +const LeftArrow$2 = "←"; +const LeftArrowBar$2 = "⇤"; +const LeftArrowRightArrow$2 = "⇆"; +const LeftCeiling$2 = "⌈"; +const LeftDoubleBracket$2 = "⟦"; +const LeftDownTeeVector$2 = "⥡"; +const LeftDownVector$2 = "⇃"; +const LeftDownVectorBar$2 = "⥙"; +const LeftFloor$2 = "⌊"; +const LeftRightArrow$2 = "↔"; +const LeftRightVector$2 = "⥎"; +const LeftTee$2 = "⊣"; +const LeftTeeArrow$2 = "↤"; +const LeftTeeVector$2 = "⥚"; +const LeftTriangle$2 = "⊲"; +const LeftTriangleBar$2 = "⧏"; +const LeftTriangleEqual$2 = "⊴"; +const LeftUpDownVector$2 = "⥑"; +const LeftUpTeeVector$2 = "⥠"; +const LeftUpVector$2 = "↿"; +const LeftUpVectorBar$2 = "⥘"; +const LeftVector$2 = "↼"; +const LeftVectorBar$2 = "⥒"; +const Leftarrow$2 = "⇐"; +const Leftrightarrow$2 = "⇔"; +const LessEqualGreater$2 = "⋚"; +const LessFullEqual$2 = "≦"; +const LessGreater$2 = "≶"; +const LessLess$2 = "⪡"; +const LessSlantEqual$2 = "⩽"; +const LessTilde$2 = "≲"; +const Lfr$2 = "𝔏"; +const Ll$2 = "⋘"; +const Lleftarrow$2 = "⇚"; +const Lmidot$2 = "Ŀ"; +const LongLeftArrow$2 = "⟵"; +const LongLeftRightArrow$2 = "⟷"; +const LongRightArrow$2 = "⟶"; +const Longleftarrow$2 = "⟸"; +const Longleftrightarrow$2 = "⟺"; +const Longrightarrow$2 = "⟹"; +const Lopf$2 = "𝕃"; +const LowerLeftArrow$2 = "↙"; +const LowerRightArrow$2 = "↘"; +const Lscr$2 = "ℒ"; +const Lsh$2 = "↰"; +const Lstrok$2 = "Ł"; +const Lt$2 = "≪"; +const Mcy$2 = "М"; +const MediumSpace$2 = " "; +const Mellintrf$2 = "ℳ"; +const Mfr$2 = "𝔐"; +const MinusPlus$2 = "∓"; +const Mopf$2 = "𝕄"; +const Mscr$2 = "ℳ"; +const Mu$2 = "Μ"; +const NJcy$2 = "Њ"; +const Nacute$2 = "Ń"; +const Ncaron$2 = "Ň"; +const Ncedil$2 = "Ņ"; +const Ncy$2 = "Н"; +const NegativeMediumSpace$2 = "​"; +const NegativeThickSpace$2 = "​"; +const NegativeThinSpace$2 = "​"; +const NegativeVeryThinSpace$2 = "​"; +const NestedGreaterGreater$2 = "≫"; +const NestedLessLess$2 = "≪"; +const NewLine$2 = "\n"; +const Nfr$2 = "𝔑"; +const NoBreak$2 = "⁠"; +const NonBreakingSpace$2 = " "; +const Nopf$2 = "ℕ"; +const Not$2 = "⫬"; +const NotCongruent$2 = "≢"; +const NotCupCap$2 = "≭"; +const NotDoubleVerticalBar$2 = "∦"; +const NotElement$2 = "∉"; +const NotEqual$2 = "≠"; +const NotEqualTilde$2 = "≂̸"; +const NotExists$2 = "∄"; +const NotGreater$2 = "≯"; +const NotGreaterEqual$2 = "≱"; +const NotGreaterFullEqual$2 = "≧̸"; +const NotGreaterGreater$2 = "≫̸"; +const NotGreaterLess$2 = "≹"; +const NotGreaterSlantEqual$2 = "⩾̸"; +const NotGreaterTilde$2 = "≵"; +const NotHumpDownHump$2 = "≎̸"; +const NotHumpEqual$2 = "≏̸"; +const NotLeftTriangle$2 = "⋪"; +const NotLeftTriangleBar$2 = "⧏̸"; +const NotLeftTriangleEqual$2 = "⋬"; +const NotLess$2 = "≮"; +const NotLessEqual$2 = "≰"; +const NotLessGreater$2 = "≸"; +const NotLessLess$2 = "≪̸"; +const NotLessSlantEqual$2 = "⩽̸"; +const NotLessTilde$2 = "≴"; +const NotNestedGreaterGreater$2 = "⪢̸"; +const NotNestedLessLess$2 = "⪡̸"; +const NotPrecedes$2 = "⊀"; +const NotPrecedesEqual$2 = "⪯̸"; +const NotPrecedesSlantEqual$2 = "⋠"; +const NotReverseElement$2 = "∌"; +const NotRightTriangle$2 = "⋫"; +const NotRightTriangleBar$2 = "⧐̸"; +const NotRightTriangleEqual$2 = "⋭"; +const NotSquareSubset$2 = "⊏̸"; +const NotSquareSubsetEqual$2 = "⋢"; +const NotSquareSuperset$2 = "⊐̸"; +const NotSquareSupersetEqual$2 = "⋣"; +const NotSubset$2 = "⊂⃒"; +const NotSubsetEqual$2 = "⊈"; +const NotSucceeds$2 = "⊁"; +const NotSucceedsEqual$2 = "⪰̸"; +const NotSucceedsSlantEqual$2 = "⋡"; +const NotSucceedsTilde$2 = "≿̸"; +const NotSuperset$2 = "⊃⃒"; +const NotSupersetEqual$2 = "⊉"; +const NotTilde$2 = "≁"; +const NotTildeEqual$2 = "≄"; +const NotTildeFullEqual$2 = "≇"; +const NotTildeTilde$2 = "≉"; +const NotVerticalBar$2 = "∤"; +const Nscr$2 = "𝒩"; +const Ntild$2 = "Ñ"; +const Ntilde$2 = "Ñ"; +const Nu$2 = "Ν"; +const OElig$2 = "Œ"; +const Oacut$2 = "Ó"; +const Oacute$2 = "Ó"; +const Ocir$2 = "Ô"; +const Ocirc$2 = "Ô"; +const Ocy$2 = "О"; +const Odblac$2 = "Ő"; +const Ofr$2 = "𝔒"; +const Ograv$2 = "Ò"; +const Ograve$2 = "Ò"; +const Omacr$2 = "Ō"; +const Omega$2 = "Ω"; +const Omicron$2 = "Ο"; +const Oopf$2 = "𝕆"; +const OpenCurlyDoubleQuote$2 = "“"; +const OpenCurlyQuote$2 = "‘"; +const Or$2 = "⩔"; +const Oscr$2 = "𝒪"; +const Oslas$2 = "Ø"; +const Oslash$2 = "Ø"; +const Otild$2 = "Õ"; +const Otilde$2 = "Õ"; +const Otimes$2 = "⨷"; +const Oum$2 = "Ö"; +const Ouml$2 = "Ö"; +const OverBar$2 = "‾"; +const OverBrace$2 = "⏞"; +const OverBracket$2 = "⎴"; +const OverParenthesis$2 = "⏜"; +const PartialD$2 = "∂"; +const Pcy$2 = "П"; +const Pfr$2 = "𝔓"; +const Phi$2 = "Φ"; +const Pi$2 = "Π"; +const PlusMinus$2 = "±"; +const Poincareplane$2 = "ℌ"; +const Popf$2 = "ℙ"; +const Pr$2 = "⪻"; +const Precedes$2 = "≺"; +const PrecedesEqual$2 = "⪯"; +const PrecedesSlantEqual$2 = "≼"; +const PrecedesTilde$2 = "≾"; +const Prime$2 = "″"; +const Product$2 = "∏"; +const Proportion$2 = "∷"; +const Proportional$2 = "∝"; +const Pscr$2 = "𝒫"; +const Psi$2 = "Ψ"; +const QUO$2 = "\""; +const QUOT$2 = "\""; +const Qfr$2 = "𝔔"; +const Qopf$2 = "ℚ"; +const Qscr$2 = "𝒬"; +const RBarr$2 = "⤐"; +const RE$2 = "®"; +const REG$2 = "®"; +const Racute$2 = "Ŕ"; +const Rang$2 = "⟫"; +const Rarr$2 = "↠"; +const Rarrtl$2 = "⤖"; +const Rcaron$2 = "Ř"; +const Rcedil$2 = "Ŗ"; +const Rcy$2 = "Р"; +const Re$2 = "ℜ"; +const ReverseElement$2 = "∋"; +const ReverseEquilibrium$2 = "⇋"; +const ReverseUpEquilibrium$2 = "⥯"; +const Rfr$2 = "ℜ"; +const Rho$2 = "Ρ"; +const RightAngleBracket$2 = "⟩"; +const RightArrow$2 = "→"; +const RightArrowBar$2 = "⇥"; +const RightArrowLeftArrow$2 = "⇄"; +const RightCeiling$2 = "⌉"; +const RightDoubleBracket$2 = "⟧"; +const RightDownTeeVector$2 = "⥝"; +const RightDownVector$2 = "⇂"; +const RightDownVectorBar$2 = "⥕"; +const RightFloor$2 = "⌋"; +const RightTee$2 = "⊢"; +const RightTeeArrow$2 = "↦"; +const RightTeeVector$2 = "⥛"; +const RightTriangle$2 = "⊳"; +const RightTriangleBar$2 = "⧐"; +const RightTriangleEqual$2 = "⊵"; +const RightUpDownVector$2 = "⥏"; +const RightUpTeeVector$2 = "⥜"; +const RightUpVector$2 = "↾"; +const RightUpVectorBar$2 = "⥔"; +const RightVector$2 = "⇀"; +const RightVectorBar$2 = "⥓"; +const Rightarrow$2 = "⇒"; +const Ropf$2 = "ℝ"; +const RoundImplies$2 = "⥰"; +const Rrightarrow$2 = "⇛"; +const Rscr$2 = "ℛ"; +const Rsh$2 = "↱"; +const RuleDelayed$2 = "⧴"; +const SHCHcy$2 = "Щ"; +const SHcy$2 = "Ш"; +const SOFTcy$2 = "Ь"; +const Sacute$2 = "Ś"; +const Sc$2 = "⪼"; +const Scaron$2 = "Š"; +const Scedil$2 = "Ş"; +const Scirc$2 = "Ŝ"; +const Scy$2 = "С"; +const Sfr$2 = "𝔖"; +const ShortDownArrow$2 = "↓"; +const ShortLeftArrow$2 = "←"; +const ShortRightArrow$2 = "→"; +const ShortUpArrow$2 = "↑"; +const Sigma$2 = "Σ"; +const SmallCircle$2 = "∘"; +const Sopf$2 = "𝕊"; +const Sqrt$2 = "√"; +const Square$2 = "□"; +const SquareIntersection$2 = "⊓"; +const SquareSubset$2 = "⊏"; +const SquareSubsetEqual$2 = "⊑"; +const SquareSuperset$2 = "⊐"; +const SquareSupersetEqual$2 = "⊒"; +const SquareUnion$2 = "⊔"; +const Sscr$2 = "𝒮"; +const Star$2 = "⋆"; +const Sub$2 = "⋐"; +const Subset$2 = "⋐"; +const SubsetEqual$2 = "⊆"; +const Succeeds$2 = "≻"; +const SucceedsEqual$2 = "⪰"; +const SucceedsSlantEqual$2 = "≽"; +const SucceedsTilde$2 = "≿"; +const SuchThat$2 = "∋"; +const Sum$2 = "∑"; +const Sup$2 = "⋑"; +const Superset$2 = "⊃"; +const SupersetEqual$2 = "⊇"; +const Supset$2 = "⋑"; +const THOR$2 = "Þ"; +const THORN$2 = "Þ"; +const TRADE$2 = "™"; +const TSHcy$2 = "Ћ"; +const TScy$2 = "Ц"; +const Tab$2 = "\t"; +const Tau$2 = "Τ"; +const Tcaron$2 = "Ť"; +const Tcedil$2 = "Ţ"; +const Tcy$2 = "Т"; +const Tfr$2 = "𝔗"; +const Therefore$2 = "∴"; +const Theta$2 = "Θ"; +const ThickSpace$2 = "  "; +const ThinSpace$2 = " "; +const Tilde$2 = "∼"; +const TildeEqual$2 = "≃"; +const TildeFullEqual$2 = "≅"; +const TildeTilde$2 = "≈"; +const Topf$2 = "𝕋"; +const TripleDot$2 = "⃛"; +const Tscr$2 = "𝒯"; +const Tstrok$2 = "Ŧ"; +const Uacut$2 = "Ú"; +const Uacute$2 = "Ú"; +const Uarr$2 = "↟"; +const Uarrocir$2 = "⥉"; +const Ubrcy$2 = "Ў"; +const Ubreve$2 = "Ŭ"; +const Ucir$2 = "Û"; +const Ucirc$2 = "Û"; +const Ucy$2 = "У"; +const Udblac$2 = "Ű"; +const Ufr$2 = "𝔘"; +const Ugrav$2 = "Ù"; +const Ugrave$2 = "Ù"; +const Umacr$2 = "Ū"; +const UnderBar$2 = "_"; +const UnderBrace$2 = "⏟"; +const UnderBracket$2 = "⎵"; +const UnderParenthesis$2 = "⏝"; +const Union$2 = "⋃"; +const UnionPlus$2 = "⊎"; +const Uogon$2 = "Ų"; +const Uopf$2 = "𝕌"; +const UpArrow$2 = "↑"; +const UpArrowBar$2 = "⤒"; +const UpArrowDownArrow$2 = "⇅"; +const UpDownArrow$2 = "↕"; +const UpEquilibrium$2 = "⥮"; +const UpTee$2 = "⊥"; +const UpTeeArrow$2 = "↥"; +const Uparrow$2 = "⇑"; +const Updownarrow$2 = "⇕"; +const UpperLeftArrow$2 = "↖"; +const UpperRightArrow$2 = "↗"; +const Upsi$2 = "ϒ"; +const Upsilon$2 = "Υ"; +const Uring$2 = "Ů"; +const Uscr$2 = "𝒰"; +const Utilde$2 = "Ũ"; +const Uum$2 = "Ü"; +const Uuml$2 = "Ü"; +const VDash$2 = "⊫"; +const Vbar$2 = "⫫"; +const Vcy$2 = "В"; +const Vdash$2 = "⊩"; +const Vdashl$2 = "⫦"; +const Vee$2 = "⋁"; +const Verbar$2 = "‖"; +const Vert$2 = "‖"; +const VerticalBar$2 = "∣"; +const VerticalLine$2 = "|"; +const VerticalSeparator$2 = "❘"; +const VerticalTilde$2 = "≀"; +const VeryThinSpace$2 = " "; +const Vfr$2 = "𝔙"; +const Vopf$2 = "𝕍"; +const Vscr$2 = "𝒱"; +const Vvdash$2 = "⊪"; +const Wcirc$2 = "Ŵ"; +const Wedge$2 = "⋀"; +const Wfr$2 = "𝔚"; +const Wopf$2 = "𝕎"; +const Wscr$2 = "𝒲"; +const Xfr$2 = "𝔛"; +const Xi$2 = "Ξ"; +const Xopf$2 = "𝕏"; +const Xscr$2 = "𝒳"; +const YAcy$2 = "Я"; +const YIcy$2 = "Ї"; +const YUcy$2 = "Ю"; +const Yacut$2 = "Ý"; +const Yacute$2 = "Ý"; +const Ycirc$2 = "Ŷ"; +const Ycy$2 = "Ы"; +const Yfr$2 = "𝔜"; +const Yopf$2 = "𝕐"; +const Yscr$2 = "𝒴"; +const Yuml$2 = "Ÿ"; +const ZHcy$2 = "Ж"; +const Zacute$2 = "Ź"; +const Zcaron$2 = "Ž"; +const Zcy$2 = "З"; +const Zdot$2 = "Ż"; +const ZeroWidthSpace$2 = "​"; +const Zeta$2 = "Ζ"; +const Zfr$2 = "ℨ"; +const Zopf$2 = "ℤ"; +const Zscr$2 = "𝒵"; +const aacut$2 = "á"; +const aacute$2 = "á"; +const abreve$2 = "ă"; +const ac$2 = "∾"; +const acE$2 = "∾̳"; +const acd$2 = "∿"; +const acir$2 = "â"; +const acirc$2 = "â"; +const acut$2 = "´"; +const acute$2 = "´"; +const acy$2 = "а"; +const aeli$2 = "æ"; +const aelig$2 = "æ"; +const af$2 = "⁡"; +const afr$2 = "𝔞"; +const agrav$2 = "à"; +const agrave$2 = "à"; +const alefsym$2 = "ℵ"; +const aleph$2 = "ℵ"; +const alpha$2 = "α"; +const amacr$2 = "ā"; +const amalg$2 = "⨿"; +const am$2 = "&"; +const amp$2 = "&"; +const and$2 = "∧"; +const andand$2 = "⩕"; +const andd$2 = "⩜"; +const andslope$2 = "⩘"; +const andv$2 = "⩚"; +const ang$2 = "∠"; +const ange$2 = "⦤"; +const angle$2 = "∠"; +const angmsd$2 = "∡"; +const angmsdaa$2 = "⦨"; +const angmsdab$2 = "⦩"; +const angmsdac$2 = "⦪"; +const angmsdad$2 = "⦫"; +const angmsdae$2 = "⦬"; +const angmsdaf$2 = "⦭"; +const angmsdag$2 = "⦮"; +const angmsdah$2 = "⦯"; +const angrt$2 = "∟"; +const angrtvb$2 = "⊾"; +const angrtvbd$2 = "⦝"; +const angsph$2 = "∢"; +const angst$2 = "Å"; +const angzarr$2 = "⍼"; +const aogon$2 = "ą"; +const aopf$2 = "𝕒"; +const ap$2 = "≈"; +const apE$2 = "⩰"; +const apacir$2 = "⩯"; +const ape$2 = "≊"; +const apid$2 = "≋"; +const apos$2 = "'"; +const approx$2 = "≈"; +const approxeq$2 = "≊"; +const arin$2 = "å"; +const aring$2 = "å"; +const ascr$2 = "𝒶"; +const ast$2 = "*"; +const asymp$2 = "≈"; +const asympeq$2 = "≍"; +const atild$2 = "ã"; +const atilde$2 = "ã"; +const aum$2 = "ä"; +const auml$2 = "ä"; +const awconint$2 = "∳"; +const awint$2 = "⨑"; +const bNot$2 = "⫭"; +const backcong$2 = "≌"; +const backepsilon$2 = "϶"; +const backprime$2 = "‵"; +const backsim$2 = "∽"; +const backsimeq$2 = "⋍"; +const barvee$2 = "⊽"; +const barwed$2 = "⌅"; +const barwedge$2 = "⌅"; +const bbrk$2 = "⎵"; +const bbrktbrk$2 = "⎶"; +const bcong$2 = "≌"; +const bcy$2 = "б"; +const bdquo$2 = "„"; +const becaus$2 = "∵"; +const because$2 = "∵"; +const bemptyv$2 = "⦰"; +const bepsi$2 = "϶"; +const bernou$2 = "ℬ"; +const beta$2 = "β"; +const beth$2 = "ℶ"; +const between$2 = "≬"; +const bfr$2 = "𝔟"; +const bigcap$2 = "⋂"; +const bigcirc$2 = "◯"; +const bigcup$2 = "⋃"; +const bigodot$2 = "⨀"; +const bigoplus$2 = "⨁"; +const bigotimes$2 = "⨂"; +const bigsqcup$2 = "⨆"; +const bigstar$2 = "★"; +const bigtriangledown$2 = "▽"; +const bigtriangleup$2 = "△"; +const biguplus$2 = "⨄"; +const bigvee$2 = "⋁"; +const bigwedge$2 = "⋀"; +const bkarow$2 = "⤍"; +const blacklozenge$2 = "⧫"; +const blacksquare$2 = "▪"; +const blacktriangle$2 = "▴"; +const blacktriangledown$2 = "▾"; +const blacktriangleleft$2 = "◂"; +const blacktriangleright$2 = "▸"; +const blank$2 = "␣"; +const blk12$2 = "▒"; +const blk14$2 = "░"; +const blk34$2 = "▓"; +const block$2 = "█"; +const bne$2 = "=⃥"; +const bnequiv$2 = "≡⃥"; +const bnot$2 = "⌐"; +const bopf$2 = "𝕓"; +const bot$2 = "⊥"; +const bottom$2 = "⊥"; +const bowtie$2 = "⋈"; +const boxDL$2 = "╗"; +const boxDR$2 = "╔"; +const boxDl$2 = "╖"; +const boxDr$2 = "╓"; +const boxH$2 = "═"; +const boxHD$2 = "╦"; +const boxHU$2 = "╩"; +const boxHd$2 = "╤"; +const boxHu$2 = "╧"; +const boxUL$2 = "╝"; +const boxUR$2 = "╚"; +const boxUl$2 = "╜"; +const boxUr$2 = "╙"; +const boxV$2 = "║"; +const boxVH$2 = "╬"; +const boxVL$2 = "╣"; +const boxVR$2 = "╠"; +const boxVh$2 = "╫"; +const boxVl$2 = "╢"; +const boxVr$2 = "╟"; +const boxbox$2 = "⧉"; +const boxdL$2 = "╕"; +const boxdR$2 = "╒"; +const boxdl$2 = "┐"; +const boxdr$2 = "┌"; +const boxh$2 = "─"; +const boxhD$2 = "╥"; +const boxhU$2 = "╨"; +const boxhd$2 = "┬"; +const boxhu$2 = "┴"; +const boxminus$2 = "⊟"; +const boxplus$2 = "⊞"; +const boxtimes$2 = "⊠"; +const boxuL$2 = "╛"; +const boxuR$2 = "╘"; +const boxul$2 = "┘"; +const boxur$2 = "└"; +const boxv$2 = "│"; +const boxvH$2 = "╪"; +const boxvL$2 = "╡"; +const boxvR$2 = "╞"; +const boxvh$2 = "┼"; +const boxvl$2 = "┤"; +const boxvr$2 = "├"; +const bprime$2 = "‵"; +const breve$2 = "˘"; +const brvba$2 = "¦"; +const brvbar$2 = "¦"; +const bscr$2 = "𝒷"; +const bsemi$2 = "⁏"; +const bsim$2 = "∽"; +const bsime$2 = "⋍"; +const bsol$2 = "\\"; +const bsolb$2 = "⧅"; +const bsolhsub$2 = "⟈"; +const bull$2 = "•"; +const bullet$2 = "•"; +const bump$2 = "≎"; +const bumpE$2 = "⪮"; +const bumpe$2 = "≏"; +const bumpeq$2 = "≏"; +const cacute$2 = "ć"; +const cap$2 = "∩"; +const capand$2 = "⩄"; +const capbrcup$2 = "⩉"; +const capcap$2 = "⩋"; +const capcup$2 = "⩇"; +const capdot$2 = "⩀"; +const caps$2 = "∩︀"; +const caret$2 = "⁁"; +const caron$2 = "ˇ"; +const ccaps$2 = "⩍"; +const ccaron$2 = "č"; +const ccedi$2 = "ç"; +const ccedil$2 = "ç"; +const ccirc$2 = "ĉ"; +const ccups$2 = "⩌"; +const ccupssm$2 = "⩐"; +const cdot$2 = "ċ"; +const cedi$2 = "¸"; +const cedil$2 = "¸"; +const cemptyv$2 = "⦲"; +const cen$2 = "¢"; +const cent$2 = "¢"; +const centerdot$2 = "·"; +const cfr$2 = "𝔠"; +const chcy$2 = "ч"; +const check$3 = "✓"; +const checkmark$2 = "✓"; +const chi$2 = "χ"; +const cir$2 = "○"; +const cirE$2 = "⧃"; +const circ$2 = "ˆ"; +const circeq$2 = "≗"; +const circlearrowleft$2 = "↺"; +const circlearrowright$2 = "↻"; +const circledR$2 = "®"; +const circledS$2 = "Ⓢ"; +const circledast$2 = "⊛"; +const circledcirc$2 = "⊚"; +const circleddash$2 = "⊝"; +const cire$2 = "≗"; +const cirfnint$2 = "⨐"; +const cirmid$2 = "⫯"; +const cirscir$2 = "⧂"; +const clubs$2 = "♣"; +const clubsuit$2 = "♣"; +const colon$2 = ":"; +const colone$2 = "≔"; +const coloneq$2 = "≔"; +const comma$2 = ","; +const commat$2 = "@"; +const comp$2 = "∁"; +const compfn$2 = "∘"; +const complement$2 = "∁"; +const complexes$2 = "ℂ"; +const cong$2 = "≅"; +const congdot$2 = "⩭"; +const conint$2 = "∮"; +const copf$2 = "𝕔"; +const coprod$2 = "∐"; +const cop$2 = "©"; +const copy$2 = "©"; +const copysr$2 = "℗"; +const crarr$2 = "↵"; +const cross$2 = "✗"; +const cscr$2 = "𝒸"; +const csub$2 = "⫏"; +const csube$2 = "⫑"; +const csup$2 = "⫐"; +const csupe$2 = "⫒"; +const ctdot$2 = "⋯"; +const cudarrl$2 = "⤸"; +const cudarrr$2 = "⤵"; +const cuepr$2 = "⋞"; +const cuesc$2 = "⋟"; +const cularr$2 = "↶"; +const cularrp$2 = "⤽"; +const cup$2 = "∪"; +const cupbrcap$2 = "⩈"; +const cupcap$2 = "⩆"; +const cupcup$2 = "⩊"; +const cupdot$2 = "⊍"; +const cupor$2 = "⩅"; +const cups$2 = "∪︀"; +const curarr$2 = "↷"; +const curarrm$2 = "⤼"; +const curlyeqprec$2 = "⋞"; +const curlyeqsucc$2 = "⋟"; +const curlyvee$2 = "⋎"; +const curlywedge$2 = "⋏"; +const curre$2 = "¤"; +const curren$2 = "¤"; +const curvearrowleft$2 = "↶"; +const curvearrowright$2 = "↷"; +const cuvee$2 = "⋎"; +const cuwed$2 = "⋏"; +const cwconint$2 = "∲"; +const cwint$2 = "∱"; +const cylcty$2 = "⌭"; +const dArr$2 = "⇓"; +const dHar$2 = "⥥"; +const dagger$2 = "†"; +const daleth$2 = "ℸ"; +const darr$2 = "↓"; +const dash$2 = "‐"; +const dashv$2 = "⊣"; +const dbkarow$2 = "⤏"; +const dblac$2 = "˝"; +const dcaron$2 = "ď"; +const dcy$2 = "д"; +const dd$2 = "ⅆ"; +const ddagger$2 = "‡"; +const ddarr$2 = "⇊"; +const ddotseq$2 = "⩷"; +const de$2 = "°"; +const deg$2 = "°"; +const delta$2 = "δ"; +const demptyv$2 = "⦱"; +const dfisht$2 = "⥿"; +const dfr$2 = "𝔡"; +const dharl$2 = "⇃"; +const dharr$2 = "⇂"; +const diam$2 = "⋄"; +const diamond$2 = "⋄"; +const diamondsuit$2 = "♦"; +const diams$2 = "♦"; +const die$2 = "¨"; +const digamma$2 = "ϝ"; +const disin$2 = "⋲"; +const div$2 = "÷"; +const divid$2 = "÷"; +const divide$2 = "÷"; +const divideontimes$2 = "⋇"; +const divonx$2 = "⋇"; +const djcy$2 = "ђ"; +const dlcorn$2 = "⌞"; +const dlcrop$2 = "⌍"; +const dollar$2 = "$"; +const dopf$2 = "𝕕"; +const dot$2 = "˙"; +const doteq$2 = "≐"; +const doteqdot$2 = "≑"; +const dotminus$2 = "∸"; +const dotplus$2 = "∔"; +const dotsquare$2 = "⊡"; +const doublebarwedge$2 = "⌆"; +const downarrow$2 = "↓"; +const downdownarrows$2 = "⇊"; +const downharpoonleft$2 = "⇃"; +const downharpoonright$2 = "⇂"; +const drbkarow$2 = "⤐"; +const drcorn$2 = "⌟"; +const drcrop$2 = "⌌"; +const dscr$2 = "𝒹"; +const dscy$2 = "ѕ"; +const dsol$2 = "⧶"; +const dstrok$2 = "đ"; +const dtdot$2 = "⋱"; +const dtri$2 = "▿"; +const dtrif$2 = "▾"; +const duarr$2 = "⇵"; +const duhar$2 = "⥯"; +const dwangle$2 = "⦦"; +const dzcy$2 = "џ"; +const dzigrarr$2 = "⟿"; +const eDDot$2 = "⩷"; +const eDot$2 = "≑"; +const eacut$2 = "é"; +const eacute$2 = "é"; +const easter$2 = "⩮"; +const ecaron$2 = "ě"; +const ecir$2 = "ê"; +const ecirc$2 = "ê"; +const ecolon$2 = "≕"; +const ecy$2 = "э"; +const edot$2 = "ė"; +const ee$2 = "ⅇ"; +const efDot$2 = "≒"; +const efr$2 = "𝔢"; +const eg$2 = "⪚"; +const egrav$2 = "è"; +const egrave$2 = "è"; +const egs$2 = "⪖"; +const egsdot$2 = "⪘"; +const el$2 = "⪙"; +const elinters$2 = "⏧"; +const ell$2 = "ℓ"; +const els$2 = "⪕"; +const elsdot$2 = "⪗"; +const emacr$2 = "ē"; +const empty$2 = "∅"; +const emptyset$2 = "∅"; +const emptyv$2 = "∅"; +const emsp13$2 = " "; +const emsp14$2 = " "; +const emsp$2 = " "; +const eng$2 = "ŋ"; +const ensp$2 = " "; +const eogon$2 = "ę"; +const eopf$2 = "𝕖"; +const epar$2 = "⋕"; +const eparsl$2 = "⧣"; +const eplus$2 = "⩱"; +const epsi$2 = "ε"; +const epsilon$2 = "ε"; +const epsiv$2 = "ϵ"; +const eqcirc$2 = "≖"; +const eqcolon$2 = "≕"; +const eqsim$2 = "≂"; +const eqslantgtr$2 = "⪖"; +const eqslantless$2 = "⪕"; +const equals$2 = "="; +const equest$2 = "≟"; +const equiv$2 = "≡"; +const equivDD$2 = "⩸"; +const eqvparsl$2 = "⧥"; +const erDot$2 = "≓"; +const erarr$2 = "⥱"; +const escr$2 = "ℯ"; +const esdot$2 = "≐"; +const esim$2 = "≂"; +const eta$2 = "η"; +const et$2 = "ð"; +const eth$2 = "ð"; +const eum$2 = "ë"; +const euml$2 = "ë"; +const euro$2 = "€"; +const excl$2 = "!"; +const exist$2 = "∃"; +const expectation$2 = "ℰ"; +const exponentiale$2 = "ⅇ"; +const fallingdotseq$2 = "≒"; +const fcy$2 = "ф"; +const female$2 = "♀"; +const ffilig$2 = "ffi"; +const fflig$2 = "ff"; +const ffllig$2 = "ffl"; +const ffr$2 = "𝔣"; +const filig$2 = "fi"; +const fjlig$2 = "fj"; +const flat$2 = "♭"; +const fllig$2 = "fl"; +const fltns$2 = "▱"; +const fnof$2 = "ƒ"; +const fopf$2 = "𝕗"; +const forall$2 = "∀"; +const fork$2 = "⋔"; +const forkv$2 = "⫙"; +const fpartint$2 = "⨍"; +const frac1$2 = "¼"; +const frac12$2 = "½"; +const frac13$2 = "⅓"; +const frac14$2 = "¼"; +const frac15$2 = "⅕"; +const frac16$2 = "⅙"; +const frac18$2 = "⅛"; +const frac23$2 = "⅔"; +const frac25$2 = "⅖"; +const frac3$2 = "¾"; +const frac34$2 = "¾"; +const frac35$2 = "⅗"; +const frac38$2 = "⅜"; +const frac45$2 = "⅘"; +const frac56$2 = "⅚"; +const frac58$2 = "⅝"; +const frac78$2 = "⅞"; +const frasl$2 = "⁄"; +const frown$2 = "⌢"; +const fscr$2 = "𝒻"; +const gE$2 = "≧"; +const gEl$2 = "⪌"; +const gacute$2 = "ǵ"; +const gamma$2 = "γ"; +const gammad$2 = "ϝ"; +const gap$2 = "⪆"; +const gbreve$2 = "ğ"; +const gcirc$2 = "ĝ"; +const gcy$2 = "г"; +const gdot$2 = "ġ"; +const ge$2 = "≥"; +const gel$2 = "⋛"; +const geq$2 = "≥"; +const geqq$2 = "≧"; +const geqslant$2 = "⩾"; +const ges$2 = "⩾"; +const gescc$2 = "⪩"; +const gesdot$2 = "⪀"; +const gesdoto$2 = "⪂"; +const gesdotol$2 = "⪄"; +const gesl$2 = "⋛︀"; +const gesles$2 = "⪔"; +const gfr$2 = "𝔤"; +const gg$2 = "≫"; +const ggg$2 = "⋙"; +const gimel$2 = "ℷ"; +const gjcy$2 = "ѓ"; +const gl$2 = "≷"; +const glE$2 = "⪒"; +const gla$2 = "⪥"; +const glj$2 = "⪤"; +const gnE$2 = "≩"; +const gnap$2 = "⪊"; +const gnapprox$2 = "⪊"; +const gne$2 = "⪈"; +const gneq$2 = "⪈"; +const gneqq$2 = "≩"; +const gnsim$2 = "⋧"; +const gopf$2 = "𝕘"; +const grave$2 = "`"; +const gscr$2 = "ℊ"; +const gsim$2 = "≳"; +const gsime$2 = "⪎"; +const gsiml$2 = "⪐"; +const g$2 = ">"; +const gt$2 = ">"; +const gtcc$2 = "⪧"; +const gtcir$2 = "⩺"; +const gtdot$2 = "⋗"; +const gtlPar$2 = "⦕"; +const gtquest$2 = "⩼"; +const gtrapprox$2 = "⪆"; +const gtrarr$2 = "⥸"; +const gtrdot$2 = "⋗"; +const gtreqless$2 = "⋛"; +const gtreqqless$2 = "⪌"; +const gtrless$2 = "≷"; +const gtrsim$2 = "≳"; +const gvertneqq$2 = "≩︀"; +const gvnE$2 = "≩︀"; +const hArr$2 = "⇔"; +const hairsp$2 = " "; +const half$2 = "½"; +const hamilt$2 = "ℋ"; +const hardcy$2 = "ъ"; +const harr$2 = "↔"; +const harrcir$2 = "⥈"; +const harrw$2 = "↭"; +const hbar$2 = "ℏ"; +const hcirc$2 = "ĥ"; +const hearts$2 = "♥"; +const heartsuit$2 = "♥"; +const hellip$2 = "…"; +const hercon$2 = "⊹"; +const hfr$2 = "𝔥"; +const hksearow$2 = "⤥"; +const hkswarow$2 = "⤦"; +const hoarr$2 = "⇿"; +const homtht$2 = "∻"; +const hookleftarrow$2 = "↩"; +const hookrightarrow$2 = "↪"; +const hopf$2 = "𝕙"; +const horbar$2 = "―"; +const hscr$2 = "𝒽"; +const hslash$2 = "ℏ"; +const hstrok$2 = "ħ"; +const hybull$2 = "⁃"; +const hyphen$2 = "‐"; +const iacut$2 = "í"; +const iacute$2 = "í"; +const ic$2 = "⁣"; +const icir$2 = "î"; +const icirc$2 = "î"; +const icy$2 = "и"; +const iecy$2 = "е"; +const iexc$2 = "¡"; +const iexcl$2 = "¡"; +const iff$2 = "⇔"; +const ifr$2 = "𝔦"; +const igrav$2 = "ì"; +const igrave$2 = "ì"; +const ii$2 = "ⅈ"; +const iiiint$2 = "⨌"; +const iiint$2 = "∭"; +const iinfin$2 = "⧜"; +const iiota$2 = "℩"; +const ijlig$2 = "ij"; +const imacr$2 = "ī"; +const image$3 = "ℑ"; +const imagline$2 = "ℐ"; +const imagpart$2 = "ℑ"; +const imath$2 = "ı"; +const imof$2 = "⊷"; +const imped$2 = "Ƶ"; +const incare$2 = "℅"; +const infin$2 = "∞"; +const infintie$2 = "⧝"; +const inodot$2 = "ı"; +const int$3 = "∫"; +const intcal$2 = "⊺"; +const integers$2 = "ℤ"; +const intercal$2 = "⊺"; +const intlarhk$2 = "⨗"; +const intprod$2 = "⨼"; +const iocy$2 = "ё"; +const iogon$2 = "į"; +const iopf$2 = "𝕚"; +const iota$2 = "ι"; +const iprod$2 = "⨼"; +const iques$2 = "¿"; +const iquest$2 = "¿"; +const iscr$2 = "𝒾"; +const isin$2 = "∈"; +const isinE$2 = "⋹"; +const isindot$2 = "⋵"; +const isins$2 = "⋴"; +const isinsv$2 = "⋳"; +const isinv$2 = "∈"; +const it$2 = "⁢"; +const itilde$2 = "ĩ"; +const iukcy$2 = "і"; +const ium$2 = "ï"; +const iuml$2 = "ï"; +const jcirc$2 = "ĵ"; +const jcy$2 = "й"; +const jfr$2 = "𝔧"; +const jmath$2 = "ȷ"; +const jopf$2 = "𝕛"; +const jscr$2 = "𝒿"; +const jsercy$2 = "ј"; +const jukcy$2 = "є"; +const kappa$2 = "κ"; +const kappav$2 = "ϰ"; +const kcedil$2 = "ķ"; +const kcy$2 = "к"; +const kfr$2 = "𝔨"; +const kgreen$2 = "ĸ"; +const khcy$2 = "х"; +const kjcy$2 = "ќ"; +const kopf$2 = "𝕜"; +const kscr$2 = "𝓀"; +const lAarr$2 = "⇚"; +const lArr$2 = "⇐"; +const lAtail$2 = "⤛"; +const lBarr$2 = "⤎"; +const lE$2 = "≦"; +const lEg$2 = "⪋"; +const lHar$2 = "⥢"; +const lacute$2 = "ĺ"; +const laemptyv$2 = "⦴"; +const lagran$2 = "ℒ"; +const lambda$2 = "λ"; +const lang$2 = "⟨"; +const langd$2 = "⦑"; +const langle$2 = "⟨"; +const lap$2 = "⪅"; +const laqu$2 = "«"; +const laquo$2 = "«"; +const larr$2 = "←"; +const larrb$2 = "⇤"; +const larrbfs$2 = "⤟"; +const larrfs$2 = "⤝"; +const larrhk$2 = "↩"; +const larrlp$2 = "↫"; +const larrpl$2 = "⤹"; +const larrsim$2 = "⥳"; +const larrtl$2 = "↢"; +const lat$2 = "⪫"; +const latail$2 = "⤙"; +const late$2 = "⪭"; +const lates$2 = "⪭︀"; +const lbarr$2 = "⤌"; +const lbbrk$2 = "❲"; +const lbrace$2 = "{"; +const lbrack$2 = "["; +const lbrke$2 = "⦋"; +const lbrksld$2 = "⦏"; +const lbrkslu$2 = "⦍"; +const lcaron$2 = "ľ"; +const lcedil$2 = "ļ"; +const lceil$2 = "⌈"; +const lcub$2 = "{"; +const lcy$2 = "л"; +const ldca$2 = "⤶"; +const ldquo$2 = "“"; +const ldquor$2 = "„"; +const ldrdhar$2 = "⥧"; +const ldrushar$2 = "⥋"; +const ldsh$2 = "↲"; +const le$2 = "≤"; +const leftarrow$2 = "←"; +const leftarrowtail$2 = "↢"; +const leftharpoondown$2 = "↽"; +const leftharpoonup$2 = "↼"; +const leftleftarrows$2 = "⇇"; +const leftrightarrow$2 = "↔"; +const leftrightarrows$2 = "⇆"; +const leftrightharpoons$2 = "⇋"; +const leftrightsquigarrow$2 = "↭"; +const leftthreetimes$2 = "⋋"; +const leg$2 = "⋚"; +const leq$2 = "≤"; +const leqq$2 = "≦"; +const leqslant$2 = "⩽"; +const les$2 = "⩽"; +const lescc$2 = "⪨"; +const lesdot$2 = "⩿"; +const lesdoto$2 = "⪁"; +const lesdotor$2 = "⪃"; +const lesg$2 = "⋚︀"; +const lesges$2 = "⪓"; +const lessapprox$2 = "⪅"; +const lessdot$2 = "⋖"; +const lesseqgtr$2 = "⋚"; +const lesseqqgtr$2 = "⪋"; +const lessgtr$2 = "≶"; +const lesssim$2 = "≲"; +const lfisht$2 = "⥼"; +const lfloor$2 = "⌊"; +const lfr$2 = "𝔩"; +const lg$2 = "≶"; +const lgE$2 = "⪑"; +const lhard$2 = "↽"; +const lharu$2 = "↼"; +const lharul$2 = "⥪"; +const lhblk$2 = "▄"; +const ljcy$2 = "љ"; +const ll$2 = "≪"; +const llarr$2 = "⇇"; +const llcorner$2 = "⌞"; +const llhard$2 = "⥫"; +const lltri$2 = "◺"; +const lmidot$2 = "ŀ"; +const lmoust$2 = "⎰"; +const lmoustache$2 = "⎰"; +const lnE$2 = "≨"; +const lnap$2 = "⪉"; +const lnapprox$2 = "⪉"; +const lne$2 = "⪇"; +const lneq$2 = "⪇"; +const lneqq$2 = "≨"; +const lnsim$2 = "⋦"; +const loang$2 = "⟬"; +const loarr$2 = "⇽"; +const lobrk$2 = "⟦"; +const longleftarrow$2 = "⟵"; +const longleftrightarrow$2 = "⟷"; +const longmapsto$2 = "⟼"; +const longrightarrow$2 = "⟶"; +const looparrowleft$2 = "↫"; +const looparrowright$2 = "↬"; +const lopar$2 = "⦅"; +const lopf$2 = "𝕝"; +const loplus$2 = "⨭"; +const lotimes$2 = "⨴"; +const lowast$2 = "∗"; +const lowbar$2 = "_"; +const loz$2 = "◊"; +const lozenge$2 = "◊"; +const lozf$2 = "⧫"; +const lpar$2 = "("; +const lparlt$2 = "⦓"; +const lrarr$2 = "⇆"; +const lrcorner$2 = "⌟"; +const lrhar$2 = "⇋"; +const lrhard$2 = "⥭"; +const lrm$2 = "‎"; +const lrtri$2 = "⊿"; +const lsaquo$2 = "‹"; +const lscr$2 = "𝓁"; +const lsh$2 = "↰"; +const lsim$2 = "≲"; +const lsime$2 = "⪍"; +const lsimg$2 = "⪏"; +const lsqb$2 = "["; +const lsquo$2 = "‘"; +const lsquor$2 = "‚"; +const lstrok$2 = "ł"; +const l$2 = "<"; +const lt$3 = "<"; +const ltcc$2 = "⪦"; +const ltcir$2 = "⩹"; +const ltdot$2 = "⋖"; +const lthree$2 = "⋋"; +const ltimes$2 = "⋉"; +const ltlarr$2 = "⥶"; +const ltquest$2 = "⩻"; +const ltrPar$2 = "⦖"; +const ltri$2 = "◃"; +const ltrie$2 = "⊴"; +const ltrif$2 = "◂"; +const lurdshar$2 = "⥊"; +const luruhar$2 = "⥦"; +const lvertneqq$2 = "≨︀"; +const lvnE$2 = "≨︀"; +const mDDot$2 = "∺"; +const mac$2 = "¯"; +const macr$2 = "¯"; +const male$2 = "♂"; +const malt$2 = "✠"; +const maltese$2 = "✠"; +const map$5 = "↦"; +const mapsto$2 = "↦"; +const mapstodown$2 = "↧"; +const mapstoleft$2 = "↤"; +const mapstoup$2 = "↥"; +const marker$2 = "▮"; +const mcomma$2 = "⨩"; +const mcy$2 = "м"; +const mdash$2 = "—"; +const measuredangle$2 = "∡"; +const mfr$2 = "𝔪"; +const mho$2 = "℧"; +const micr$2 = "µ"; +const micro$2 = "µ"; +const mid$2 = "∣"; +const midast$2 = "*"; +const midcir$2 = "⫰"; +const middo$2 = "·"; +const middot$2 = "·"; +const minus$2 = "−"; +const minusb$2 = "⊟"; +const minusd$2 = "∸"; +const minusdu$2 = "⨪"; +const mlcp$2 = "⫛"; +const mldr$2 = "…"; +const mnplus$2 = "∓"; +const models$2 = "⊧"; +const mopf$2 = "𝕞"; +const mp$2 = "∓"; +const mscr$2 = "𝓂"; +const mstpos$2 = "∾"; +const mu$2 = "μ"; +const multimap$2 = "⊸"; +const mumap$2 = "⊸"; +const nGg$2 = "⋙̸"; +const nGt$2 = "≫⃒"; +const nGtv$2 = "≫̸"; +const nLeftarrow$2 = "⇍"; +const nLeftrightarrow$2 = "⇎"; +const nLl$2 = "⋘̸"; +const nLt$2 = "≪⃒"; +const nLtv$2 = "≪̸"; +const nRightarrow$2 = "⇏"; +const nVDash$2 = "⊯"; +const nVdash$2 = "⊮"; +const nabla$2 = "∇"; +const nacute$2 = "ń"; +const nang$2 = "∠⃒"; +const nap$2 = "≉"; +const napE$2 = "⩰̸"; +const napid$2 = "≋̸"; +const napos$2 = "ʼn"; +const napprox$2 = "≉"; +const natur$2 = "♮"; +const natural$2 = "♮"; +const naturals$2 = "ℕ"; +const nbs$2 = " "; +const nbsp$2 = " "; +const nbump$2 = "≎̸"; +const nbumpe$2 = "≏̸"; +const ncap$2 = "⩃"; +const ncaron$2 = "ň"; +const ncedil$2 = "ņ"; +const ncong$2 = "≇"; +const ncongdot$2 = "⩭̸"; +const ncup$2 = "⩂"; +const ncy$2 = "н"; +const ndash$2 = "–"; +const ne$2 = "≠"; +const neArr$2 = "⇗"; +const nearhk$2 = "⤤"; +const nearr$2 = "↗"; +const nearrow$2 = "↗"; +const nedot$2 = "≐̸"; +const nequiv$2 = "≢"; +const nesear$2 = "⤨"; +const nesim$2 = "≂̸"; +const nexist$2 = "∄"; +const nexists$2 = "∄"; +const nfr$2 = "𝔫"; +const ngE$2 = "≧̸"; +const nge$2 = "≱"; +const ngeq$2 = "≱"; +const ngeqq$2 = "≧̸"; +const ngeqslant$2 = "⩾̸"; +const nges$2 = "⩾̸"; +const ngsim$2 = "≵"; +const ngt$2 = "≯"; +const ngtr$2 = "≯"; +const nhArr$2 = "⇎"; +const nharr$2 = "↮"; +const nhpar$2 = "⫲"; +const ni$2 = "∋"; +const nis$2 = "⋼"; +const nisd$2 = "⋺"; +const niv$2 = "∋"; +const njcy$2 = "њ"; +const nlArr$2 = "⇍"; +const nlE$2 = "≦̸"; +const nlarr$2 = "↚"; +const nldr$2 = "‥"; +const nle$2 = "≰"; +const nleftarrow$2 = "↚"; +const nleftrightarrow$2 = "↮"; +const nleq$2 = "≰"; +const nleqq$2 = "≦̸"; +const nleqslant$2 = "⩽̸"; +const nles$2 = "⩽̸"; +const nless$2 = "≮"; +const nlsim$2 = "≴"; +const nlt$2 = "≮"; +const nltri$2 = "⋪"; +const nltrie$2 = "⋬"; +const nmid$2 = "∤"; +const nopf$2 = "𝕟"; +const no$2 = "¬"; +const not$2 = "¬"; +const notin$2 = "∉"; +const notinE$2 = "⋹̸"; +const notindot$2 = "⋵̸"; +const notinva$2 = "∉"; +const notinvb$2 = "⋷"; +const notinvc$2 = "⋶"; +const notni$2 = "∌"; +const notniva$2 = "∌"; +const notnivb$2 = "⋾"; +const notnivc$2 = "⋽"; +const npar$2 = "∦"; +const nparallel$2 = "∦"; +const nparsl$2 = "⫽⃥"; +const npart$2 = "∂̸"; +const npolint$2 = "⨔"; +const npr$2 = "⊀"; +const nprcue$2 = "⋠"; +const npre$2 = "⪯̸"; +const nprec$2 = "⊀"; +const npreceq$2 = "⪯̸"; +const nrArr$2 = "⇏"; +const nrarr$2 = "↛"; +const nrarrc$2 = "⤳̸"; +const nrarrw$2 = "↝̸"; +const nrightarrow$2 = "↛"; +const nrtri$2 = "⋫"; +const nrtrie$2 = "⋭"; +const nsc$2 = "⊁"; +const nsccue$2 = "⋡"; +const nsce$2 = "⪰̸"; +const nscr$2 = "𝓃"; +const nshortmid$2 = "∤"; +const nshortparallel$2 = "∦"; +const nsim$2 = "≁"; +const nsime$2 = "≄"; +const nsimeq$2 = "≄"; +const nsmid$2 = "∤"; +const nspar$2 = "∦"; +const nsqsube$2 = "⋢"; +const nsqsupe$2 = "⋣"; +const nsub$2 = "⊄"; +const nsubE$2 = "⫅̸"; +const nsube$2 = "⊈"; +const nsubset$2 = "⊂⃒"; +const nsubseteq$2 = "⊈"; +const nsubseteqq$2 = "⫅̸"; +const nsucc$2 = "⊁"; +const nsucceq$2 = "⪰̸"; +const nsup$2 = "⊅"; +const nsupE$2 = "⫆̸"; +const nsupe$2 = "⊉"; +const nsupset$2 = "⊃⃒"; +const nsupseteq$2 = "⊉"; +const nsupseteqq$2 = "⫆̸"; +const ntgl$2 = "≹"; +const ntild$2 = "ñ"; +const ntilde$2 = "ñ"; +const ntlg$2 = "≸"; +const ntriangleleft$2 = "⋪"; +const ntrianglelefteq$2 = "⋬"; +const ntriangleright$2 = "⋫"; +const ntrianglerighteq$2 = "⋭"; +const nu$2 = "ν"; +const num$2 = "#"; +const numero$2 = "№"; +const numsp$2 = " "; +const nvDash$2 = "⊭"; +const nvHarr$2 = "⤄"; +const nvap$2 = "≍⃒"; +const nvdash$2 = "⊬"; +const nvge$2 = "≥⃒"; +const nvgt$2 = ">⃒"; +const nvinfin$2 = "⧞"; +const nvlArr$2 = "⤂"; +const nvle$2 = "≤⃒"; +const nvlt$2 = "<⃒"; +const nvltrie$2 = "⊴⃒"; +const nvrArr$2 = "⤃"; +const nvrtrie$2 = "⊵⃒"; +const nvsim$2 = "∼⃒"; +const nwArr$2 = "⇖"; +const nwarhk$2 = "⤣"; +const nwarr$2 = "↖"; +const nwarrow$2 = "↖"; +const nwnear$2 = "⤧"; +const oS$2 = "Ⓢ"; +const oacut$2 = "ó"; +const oacute$2 = "ó"; +const oast$2 = "⊛"; +const ocir$2 = "ô"; +const ocirc$2 = "ô"; +const ocy$2 = "о"; +const odash$2 = "⊝"; +const odblac$2 = "ő"; +const odiv$2 = "⨸"; +const odot$2 = "⊙"; +const odsold$2 = "⦼"; +const oelig$2 = "œ"; +const ofcir$2 = "⦿"; +const ofr$2 = "𝔬"; +const ogon$2 = "˛"; +const ograv$2 = "ò"; +const ograve$2 = "ò"; +const ogt$2 = "⧁"; +const ohbar$2 = "⦵"; +const ohm$2 = "Ω"; +const oint$2 = "∮"; +const olarr$2 = "↺"; +const olcir$2 = "⦾"; +const olcross$2 = "⦻"; +const oline$2 = "‾"; +const olt$2 = "⧀"; +const omacr$2 = "ō"; +const omega$2 = "ω"; +const omicron$2 = "ο"; +const omid$2 = "⦶"; +const ominus$2 = "⊖"; +const oopf$2 = "𝕠"; +const opar$2 = "⦷"; +const operp$2 = "⦹"; +const oplus$2 = "⊕"; +const or$2 = "∨"; +const orarr$2 = "↻"; +const ord$2 = "º"; +const order$2 = "ℴ"; +const orderof$2 = "ℴ"; +const ordf$2 = "ª"; +const ordm$2 = "º"; +const origof$2 = "⊶"; +const oror$2 = "⩖"; +const orslope$2 = "⩗"; +const orv$2 = "⩛"; +const oscr$2 = "ℴ"; +const oslas$2 = "ø"; +const oslash$2 = "ø"; +const osol$2 = "⊘"; +const otild$2 = "õ"; +const otilde$2 = "õ"; +const otimes$2 = "⊗"; +const otimesas$2 = "⨶"; +const oum$2 = "ö"; +const ouml$2 = "ö"; +const ovbar$2 = "⌽"; +const par$2 = "¶"; +const para$2 = "¶"; +const parallel$2 = "∥"; +const parsim$2 = "⫳"; +const parsl$2 = "⫽"; +const part$2 = "∂"; +const pcy$2 = "п"; +const percnt$2 = "%"; +const period$2 = "."; +const permil$2 = "‰"; +const perp$2 = "⊥"; +const pertenk$2 = "‱"; +const pfr$2 = "𝔭"; +const phi$2 = "φ"; +const phiv$2 = "ϕ"; +const phmmat$2 = "ℳ"; +const phone$2 = "☎"; +const pi$2 = "π"; +const pitchfork$2 = "⋔"; +const piv$2 = "ϖ"; +const planck$2 = "ℏ"; +const planckh$2 = "ℎ"; +const plankv$2 = "ℏ"; +const plus$2 = "+"; +const plusacir$2 = "⨣"; +const plusb$2 = "⊞"; +const pluscir$2 = "⨢"; +const plusdo$2 = "∔"; +const plusdu$2 = "⨥"; +const pluse$2 = "⩲"; +const plusm$2 = "±"; +const plusmn$2 = "±"; +const plussim$2 = "⨦"; +const plustwo$2 = "⨧"; +const pm$2 = "±"; +const pointint$2 = "⨕"; +const popf$2 = "𝕡"; +const poun$2 = "£"; +const pound$2 = "£"; +const pr$2 = "≺"; +const prE$2 = "⪳"; +const prap$2 = "⪷"; +const prcue$2 = "≼"; +const pre$2 = "⪯"; +const prec$2 = "≺"; +const precapprox$2 = "⪷"; +const preccurlyeq$2 = "≼"; +const preceq$2 = "⪯"; +const precnapprox$2 = "⪹"; +const precneqq$2 = "⪵"; +const precnsim$2 = "⋨"; +const precsim$2 = "≾"; +const prime$2 = "′"; +const primes$2 = "ℙ"; +const prnE$2 = "⪵"; +const prnap$2 = "⪹"; +const prnsim$2 = "⋨"; +const prod$2 = "∏"; +const profalar$2 = "⌮"; +const profline$2 = "⌒"; +const profsurf$2 = "⌓"; +const prop$2 = "∝"; +const propto$2 = "∝"; +const prsim$2 = "≾"; +const prurel$2 = "⊰"; +const pscr$2 = "𝓅"; +const psi$2 = "ψ"; +const puncsp$2 = " "; +const qfr$2 = "𝔮"; +const qint$2 = "⨌"; +const qopf$2 = "𝕢"; +const qprime$2 = "⁗"; +const qscr$2 = "𝓆"; +const quaternions$2 = "ℍ"; +const quatint$2 = "⨖"; +const quest$2 = "?"; +const questeq$2 = "≟"; +const quo$2 = "\""; +const quot$2 = "\""; +const rAarr$2 = "⇛"; +const rArr$2 = "⇒"; +const rAtail$2 = "⤜"; +const rBarr$2 = "⤏"; +const rHar$2 = "⥤"; +const race$2 = "∽̱"; +const racute$2 = "ŕ"; +const radic$2 = "√"; +const raemptyv$2 = "⦳"; +const rang$2 = "⟩"; +const rangd$2 = "⦒"; +const range$2 = "⦥"; +const rangle$2 = "⟩"; +const raqu$2 = "»"; +const raquo$2 = "»"; +const rarr$2 = "→"; +const rarrap$2 = "⥵"; +const rarrb$2 = "⇥"; +const rarrbfs$2 = "⤠"; +const rarrc$2 = "⤳"; +const rarrfs$2 = "⤞"; +const rarrhk$2 = "↪"; +const rarrlp$2 = "↬"; +const rarrpl$2 = "⥅"; +const rarrsim$2 = "⥴"; +const rarrtl$2 = "↣"; +const rarrw$2 = "↝"; +const ratail$2 = "⤚"; +const ratio$2 = "∶"; +const rationals$2 = "ℚ"; +const rbarr$2 = "⤍"; +const rbbrk$2 = "❳"; +const rbrace$2 = "}"; +const rbrack$2 = "]"; +const rbrke$2 = "⦌"; +const rbrksld$2 = "⦎"; +const rbrkslu$2 = "⦐"; +const rcaron$2 = "ř"; +const rcedil$2 = "ŗ"; +const rceil$2 = "⌉"; +const rcub$2 = "}"; +const rcy$2 = "р"; +const rdca$2 = "⤷"; +const rdldhar$2 = "⥩"; +const rdquo$2 = "”"; +const rdquor$2 = "”"; +const rdsh$2 = "↳"; +const real$2 = "ℜ"; +const realine$2 = "ℛ"; +const realpart$2 = "ℜ"; +const reals$2 = "ℝ"; +const rect$2 = "▭"; +const re$6 = "®"; +const reg$2 = "®"; +const rfisht$2 = "⥽"; +const rfloor$2 = "⌋"; +const rfr$2 = "𝔯"; +const rhard$2 = "⇁"; +const rharu$2 = "⇀"; +const rharul$2 = "⥬"; +const rho$2 = "ρ"; +const rhov$2 = "ϱ"; +const rightarrow$2 = "→"; +const rightarrowtail$2 = "↣"; +const rightharpoondown$2 = "⇁"; +const rightharpoonup$2 = "⇀"; +const rightleftarrows$2 = "⇄"; +const rightleftharpoons$2 = "⇌"; +const rightrightarrows$2 = "⇉"; +const rightsquigarrow$2 = "↝"; +const rightthreetimes$2 = "⋌"; +const ring$2 = "˚"; +const risingdotseq$2 = "≓"; +const rlarr$2 = "⇄"; +const rlhar$2 = "⇌"; +const rlm$2 = "‏"; +const rmoust$2 = "⎱"; +const rmoustache$2 = "⎱"; +const rnmid$2 = "⫮"; +const roang$2 = "⟭"; +const roarr$2 = "⇾"; +const robrk$2 = "⟧"; +const ropar$2 = "⦆"; +const ropf$2 = "𝕣"; +const roplus$2 = "⨮"; +const rotimes$2 = "⨵"; +const rpar$2 = ")"; +const rpargt$2 = "⦔"; +const rppolint$2 = "⨒"; +const rrarr$2 = "⇉"; +const rsaquo$2 = "›"; +const rscr$2 = "𝓇"; +const rsh$2 = "↱"; +const rsqb$2 = "]"; +const rsquo$2 = "’"; +const rsquor$2 = "’"; +const rthree$2 = "⋌"; +const rtimes$2 = "⋊"; +const rtri$2 = "▹"; +const rtrie$2 = "⊵"; +const rtrif$2 = "▸"; +const rtriltri$2 = "⧎"; +const ruluhar$2 = "⥨"; +const rx$2 = "℞"; +const sacute$2 = "ś"; +const sbquo$2 = "‚"; +const sc$2 = "≻"; +const scE$2 = "⪴"; +const scap$2 = "⪸"; +const scaron$2 = "š"; +const sccue$2 = "≽"; +const sce$2 = "⪰"; +const scedil$2 = "ş"; +const scirc$2 = "ŝ"; +const scnE$2 = "⪶"; +const scnap$2 = "⪺"; +const scnsim$2 = "⋩"; +const scpolint$2 = "⨓"; +const scsim$2 = "≿"; +const scy$2 = "с"; +const sdot$2 = "⋅"; +const sdotb$2 = "⊡"; +const sdote$2 = "⩦"; +const seArr$2 = "⇘"; +const searhk$2 = "⤥"; +const searr$2 = "↘"; +const searrow$2 = "↘"; +const sec$2 = "§"; +const sect$2 = "§"; +const semi$2 = ";"; +const seswar$2 = "⤩"; +const setminus$2 = "∖"; +const setmn$2 = "∖"; +const sext$2 = "✶"; +const sfr$2 = "𝔰"; +const sfrown$2 = "⌢"; +const sharp$2 = "♯"; +const shchcy$2 = "щ"; +const shcy$2 = "ш"; +const shortmid$2 = "∣"; +const shortparallel$2 = "∥"; +const sh$2 = "­"; +const shy$2 = "­"; +const sigma$2 = "σ"; +const sigmaf$2 = "ς"; +const sigmav$2 = "ς"; +const sim$2 = "∼"; +const simdot$2 = "⩪"; +const sime$2 = "≃"; +const simeq$2 = "≃"; +const simg$2 = "⪞"; +const simgE$2 = "⪠"; +const siml$2 = "⪝"; +const simlE$2 = "⪟"; +const simne$2 = "≆"; +const simplus$2 = "⨤"; +const simrarr$2 = "⥲"; +const slarr$2 = "←"; +const smallsetminus$2 = "∖"; +const smashp$2 = "⨳"; +const smeparsl$2 = "⧤"; +const smid$2 = "∣"; +const smile$2 = "⌣"; +const smt$2 = "⪪"; +const smte$2 = "⪬"; +const smtes$2 = "⪬︀"; +const softcy$2 = "ь"; +const sol$2 = "/"; +const solb$2 = "⧄"; +const solbar$2 = "⌿"; +const sopf$2 = "𝕤"; +const spades$2 = "♠"; +const spadesuit$2 = "♠"; +const spar$2 = "∥"; +const sqcap$2 = "⊓"; +const sqcaps$2 = "⊓︀"; +const sqcup$2 = "⊔"; +const sqcups$2 = "⊔︀"; +const sqsub$2 = "⊏"; +const sqsube$2 = "⊑"; +const sqsubset$2 = "⊏"; +const sqsubseteq$2 = "⊑"; +const sqsup$2 = "⊐"; +const sqsupe$2 = "⊒"; +const sqsupset$2 = "⊐"; +const sqsupseteq$2 = "⊒"; +const squ$2 = "□"; +const square$2 = "□"; +const squarf$2 = "▪"; +const squf$2 = "▪"; +const srarr$2 = "→"; +const sscr$2 = "𝓈"; +const ssetmn$2 = "∖"; +const ssmile$2 = "⌣"; +const sstarf$2 = "⋆"; +const star$2 = "☆"; +const starf$2 = "★"; +const straightepsilon$2 = "ϵ"; +const straightphi$2 = "ϕ"; +const strns$2 = "¯"; +const sub$2 = "⊂"; +const subE$2 = "⫅"; +const subdot$2 = "⪽"; +const sube$2 = "⊆"; +const subedot$2 = "⫃"; +const submult$2 = "⫁"; +const subnE$2 = "⫋"; +const subne$2 = "⊊"; +const subplus$2 = "⪿"; +const subrarr$2 = "⥹"; +const subset$2 = "⊂"; +const subseteq$2 = "⊆"; +const subseteqq$2 = "⫅"; +const subsetneq$2 = "⊊"; +const subsetneqq$2 = "⫋"; +const subsim$2 = "⫇"; +const subsub$2 = "⫕"; +const subsup$2 = "⫓"; +const succ$2 = "≻"; +const succapprox$2 = "⪸"; +const succcurlyeq$2 = "≽"; +const succeq$2 = "⪰"; +const succnapprox$2 = "⪺"; +const succneqq$2 = "⪶"; +const succnsim$2 = "⋩"; +const succsim$2 = "≿"; +const sum$2 = "∑"; +const sung$2 = "♪"; +const sup$2 = "⊃"; +const sup1$2 = "¹"; +const sup2$2 = "²"; +const sup3$2 = "³"; +const supE$2 = "⫆"; +const supdot$2 = "⪾"; +const supdsub$2 = "⫘"; +const supe$2 = "⊇"; +const supedot$2 = "⫄"; +const suphsol$2 = "⟉"; +const suphsub$2 = "⫗"; +const suplarr$2 = "⥻"; +const supmult$2 = "⫂"; +const supnE$2 = "⫌"; +const supne$2 = "⊋"; +const supplus$2 = "⫀"; +const supset$2 = "⊃"; +const supseteq$2 = "⊇"; +const supseteqq$2 = "⫆"; +const supsetneq$2 = "⊋"; +const supsetneqq$2 = "⫌"; +const supsim$2 = "⫈"; +const supsub$2 = "⫔"; +const supsup$2 = "⫖"; +const swArr$2 = "⇙"; +const swarhk$2 = "⤦"; +const swarr$2 = "↙"; +const swarrow$2 = "↙"; +const swnwar$2 = "⤪"; +const szli$2 = "ß"; +const szlig$2 = "ß"; +const target$2 = "⌖"; +const tau$2 = "τ"; +const tbrk$2 = "⎴"; +const tcaron$2 = "ť"; +const tcedil$2 = "ţ"; +const tcy$2 = "т"; +const tdot$2 = "⃛"; +const telrec$2 = "⌕"; +const tfr$2 = "𝔱"; +const there4$2 = "∴"; +const therefore$2 = "∴"; +const theta$2 = "θ"; +const thetasym$2 = "ϑ"; +const thetav$2 = "ϑ"; +const thickapprox$2 = "≈"; +const thicksim$2 = "∼"; +const thinsp$2 = " "; +const thkap$2 = "≈"; +const thksim$2 = "∼"; +const thor$2 = "þ"; +const thorn$2 = "þ"; +const tilde$2 = "˜"; +const time$2 = "×"; +const times$2 = "×"; +const timesb$2 = "⊠"; +const timesbar$2 = "⨱"; +const timesd$2 = "⨰"; +const tint$2 = "∭"; +const toea$2 = "⤨"; +const top$2 = "⊤"; +const topbot$2 = "⌶"; +const topcir$2 = "⫱"; +const topf$2 = "𝕥"; +const topfork$2 = "⫚"; +const tosa$2 = "⤩"; +const tprime$2 = "‴"; +const trade$2 = "™"; +const triangle$2 = "▵"; +const triangledown$2 = "▿"; +const triangleleft$2 = "◃"; +const trianglelefteq$2 = "⊴"; +const triangleq$2 = "≜"; +const triangleright$2 = "▹"; +const trianglerighteq$2 = "⊵"; +const tridot$2 = "◬"; +const trie$2 = "≜"; +const triminus$2 = "⨺"; +const triplus$2 = "⨹"; +const trisb$2 = "⧍"; +const tritime$2 = "⨻"; +const trpezium$2 = "⏢"; +const tscr$2 = "𝓉"; +const tscy$2 = "ц"; +const tshcy$2 = "ћ"; +const tstrok$2 = "ŧ"; +const twixt$2 = "≬"; +const twoheadleftarrow$2 = "↞"; +const twoheadrightarrow$2 = "↠"; +const uArr$2 = "⇑"; +const uHar$2 = "⥣"; +const uacut$2 = "ú"; +const uacute$2 = "ú"; +const uarr$2 = "↑"; +const ubrcy$2 = "ў"; +const ubreve$2 = "ŭ"; +const ucir$2 = "û"; +const ucirc$2 = "û"; +const ucy$2 = "у"; +const udarr$2 = "⇅"; +const udblac$2 = "ű"; +const udhar$2 = "⥮"; +const ufisht$2 = "⥾"; +const ufr$2 = "𝔲"; +const ugrav$2 = "ù"; +const ugrave$2 = "ù"; +const uharl$2 = "↿"; +const uharr$2 = "↾"; +const uhblk$2 = "▀"; +const ulcorn$2 = "⌜"; +const ulcorner$2 = "⌜"; +const ulcrop$2 = "⌏"; +const ultri$2 = "◸"; +const umacr$2 = "ū"; +const um$2 = "¨"; +const uml$2 = "¨"; +const uogon$2 = "ų"; +const uopf$2 = "𝕦"; +const uparrow$2 = "↑"; +const updownarrow$2 = "↕"; +const upharpoonleft$2 = "↿"; +const upharpoonright$2 = "↾"; +const uplus$2 = "⊎"; +const upsi$2 = "υ"; +const upsih$2 = "ϒ"; +const upsilon$2 = "υ"; +const upuparrows$2 = "⇈"; +const urcorn$2 = "⌝"; +const urcorner$2 = "⌝"; +const urcrop$2 = "⌎"; +const uring$2 = "ů"; +const urtri$2 = "◹"; +const uscr$2 = "𝓊"; +const utdot$2 = "⋰"; +const utilde$2 = "ũ"; +const utri$2 = "▵"; +const utrif$2 = "▴"; +const uuarr$2 = "⇈"; +const uum$2 = "ü"; +const uuml$2 = "ü"; +const uwangle$2 = "⦧"; +const vArr$2 = "⇕"; +const vBar$2 = "⫨"; +const vBarv$2 = "⫩"; +const vDash$2 = "⊨"; +const vangrt$2 = "⦜"; +const varepsilon$2 = "ϵ"; +const varkappa$2 = "ϰ"; +const varnothing$2 = "∅"; +const varphi$2 = "ϕ"; +const varpi$2 = "ϖ"; +const varpropto$2 = "∝"; +const varr$2 = "↕"; +const varrho$2 = "ϱ"; +const varsigma$2 = "ς"; +const varsubsetneq$2 = "⊊︀"; +const varsubsetneqq$2 = "⫋︀"; +const varsupsetneq$2 = "⊋︀"; +const varsupsetneqq$2 = "⫌︀"; +const vartheta$2 = "ϑ"; +const vartriangleleft$2 = "⊲"; +const vartriangleright$2 = "⊳"; +const vcy$2 = "в"; +const vdash$2 = "⊢"; +const vee$2 = "∨"; +const veebar$2 = "⊻"; +const veeeq$2 = "≚"; +const vellip$2 = "⋮"; +const verbar$2 = "|"; +const vert$2 = "|"; +const vfr$2 = "𝔳"; +const vltri$2 = "⊲"; +const vnsub$2 = "⊂⃒"; +const vnsup$2 = "⊃⃒"; +const vopf$2 = "𝕧"; +const vprop$2 = "∝"; +const vrtri$2 = "⊳"; +const vscr$2 = "𝓋"; +const vsubnE$2 = "⫋︀"; +const vsubne$2 = "⊊︀"; +const vsupnE$2 = "⫌︀"; +const vsupne$2 = "⊋︀"; +const vzigzag$2 = "⦚"; +const wcirc$2 = "ŵ"; +const wedbar$2 = "⩟"; +const wedge$2 = "∧"; +const wedgeq$2 = "≙"; +const weierp$2 = "℘"; +const wfr$2 = "𝔴"; +const wopf$2 = "𝕨"; +const wp$2 = "℘"; +const wr$2 = "≀"; +const wreath$2 = "≀"; +const wscr$2 = "𝓌"; +const xcap$2 = "⋂"; +const xcirc$2 = "◯"; +const xcup$2 = "⋃"; +const xdtri$2 = "▽"; +const xfr$2 = "𝔵"; +const xhArr$2 = "⟺"; +const xharr$2 = "⟷"; +const xi$2 = "ξ"; +const xlArr$2 = "⟸"; +const xlarr$2 = "⟵"; +const xmap$2 = "⟼"; +const xnis$2 = "⋻"; +const xodot$2 = "⨀"; +const xopf$2 = "𝕩"; +const xoplus$2 = "⨁"; +const xotime$2 = "⨂"; +const xrArr$2 = "⟹"; +const xrarr$2 = "⟶"; +const xscr$2 = "𝓍"; +const xsqcup$2 = "⨆"; +const xuplus$2 = "⨄"; +const xutri$2 = "△"; +const xvee$2 = "⋁"; +const xwedge$2 = "⋀"; +const yacut$2 = "ý"; +const yacute$2 = "ý"; +const yacy$2 = "я"; +const ycirc$2 = "ŷ"; +const ycy$2 = "ы"; +const ye$2 = "¥"; +const yen$2 = "¥"; +const yfr$2 = "𝔶"; +const yicy$2 = "ї"; +const yopf$2 = "𝕪"; +const yscr$2 = "𝓎"; +const yucy$2 = "ю"; +const yum$2 = "ÿ"; +const yuml$2 = "ÿ"; +const zacute$2 = "ź"; +const zcaron$2 = "ž"; +const zcy$2 = "з"; +const zdot$2 = "ż"; +const zeetrf$2 = "ℨ"; +const zeta$2 = "ζ"; +const zfr$2 = "𝔷"; +const zhcy$2 = "ж"; +const zigrarr$2 = "⇝"; +const zopf$2 = "𝕫"; +const zscr$2 = "𝓏"; +const zwj$2 = "‍"; +const zwnj$2 = "‌"; +var require$$0$2 = { + AEli: AEli$2, + AElig: AElig$2, + AM: AM$2, + AMP: AMP$2, + Aacut: Aacut$2, + Aacute: Aacute$2, + Abreve: Abreve$2, + Acir: Acir$2, + Acirc: Acirc$2, + Acy: Acy$2, + Afr: Afr$2, + Agrav: Agrav$2, + Agrave: Agrave$2, + Alpha: Alpha$2, + Amacr: Amacr$2, + And: And$2, + Aogon: Aogon$2, + Aopf: Aopf$2, + ApplyFunction: ApplyFunction$2, + Arin: Arin$2, + Aring: Aring$2, + Ascr: Ascr$2, + Assign: Assign$2, + Atild: Atild$2, + Atilde: Atilde$2, + Aum: Aum$2, + Auml: Auml$2, + Backslash: Backslash$2, + Barv: Barv$2, + Barwed: Barwed$2, + Bcy: Bcy$2, + Because: Because$2, + Bernoullis: Bernoullis$2, + Beta: Beta$2, + Bfr: Bfr$2, + Bopf: Bopf$2, + Breve: Breve$2, + Bscr: Bscr$2, + Bumpeq: Bumpeq$2, + CHcy: CHcy$2, + COP: COP$2, + COPY: COPY$2, + Cacute: Cacute$2, + Cap: Cap$2, + CapitalDifferentialD: CapitalDifferentialD$2, + Cayleys: Cayleys$2, + Ccaron: Ccaron$2, + Ccedi: Ccedi$2, + Ccedil: Ccedil$2, + Ccirc: Ccirc$2, + Cconint: Cconint$2, + Cdot: Cdot$2, + Cedilla: Cedilla$2, + CenterDot: CenterDot$2, + Cfr: Cfr$2, + Chi: Chi$2, + CircleDot: CircleDot$2, + CircleMinus: CircleMinus$2, + CirclePlus: CirclePlus$2, + CircleTimes: CircleTimes$2, + ClockwiseContourIntegral: ClockwiseContourIntegral$2, + CloseCurlyDoubleQuote: CloseCurlyDoubleQuote$2, + CloseCurlyQuote: CloseCurlyQuote$2, + Colon: Colon$2, + Colone: Colone$2, + Congruent: Congruent$2, + Conint: Conint$2, + ContourIntegral: ContourIntegral$2, + Copf: Copf$2, + Coproduct: Coproduct$2, + CounterClockwiseContourIntegral: CounterClockwiseContourIntegral$2, + Cross: Cross$2, + Cscr: Cscr$2, + Cup: Cup$2, + CupCap: CupCap$2, + DD: DD$2, + DDotrahd: DDotrahd$2, + DJcy: DJcy$2, + DScy: DScy$2, + DZcy: DZcy$2, + Dagger: Dagger$2, + Darr: Darr$2, + Dashv: Dashv$2, + Dcaron: Dcaron$2, + Dcy: Dcy$2, + Del: Del$2, + Delta: Delta$2, + Dfr: Dfr$2, + DiacriticalAcute: DiacriticalAcute$2, + DiacriticalDot: DiacriticalDot$2, + DiacriticalDoubleAcute: DiacriticalDoubleAcute$2, + DiacriticalGrave: DiacriticalGrave$2, + DiacriticalTilde: DiacriticalTilde$2, + Diamond: Diamond$2, + DifferentialD: DifferentialD$2, + Dopf: Dopf$2, + Dot: Dot$2, + DotDot: DotDot$2, + DotEqual: DotEqual$2, + DoubleContourIntegral: DoubleContourIntegral$2, + DoubleDot: DoubleDot$2, + DoubleDownArrow: DoubleDownArrow$2, + DoubleLeftArrow: DoubleLeftArrow$2, + DoubleLeftRightArrow: DoubleLeftRightArrow$2, + DoubleLeftTee: DoubleLeftTee$2, + DoubleLongLeftArrow: DoubleLongLeftArrow$2, + DoubleLongLeftRightArrow: DoubleLongLeftRightArrow$2, + DoubleLongRightArrow: DoubleLongRightArrow$2, + DoubleRightArrow: DoubleRightArrow$2, + DoubleRightTee: DoubleRightTee$2, + DoubleUpArrow: DoubleUpArrow$2, + DoubleUpDownArrow: DoubleUpDownArrow$2, + DoubleVerticalBar: DoubleVerticalBar$2, + DownArrow: DownArrow$2, + DownArrowBar: DownArrowBar$2, + DownArrowUpArrow: DownArrowUpArrow$2, + DownBreve: DownBreve$2, + DownLeftRightVector: DownLeftRightVector$2, + DownLeftTeeVector: DownLeftTeeVector$2, + DownLeftVector: DownLeftVector$2, + DownLeftVectorBar: DownLeftVectorBar$2, + DownRightTeeVector: DownRightTeeVector$2, + DownRightVector: DownRightVector$2, + DownRightVectorBar: DownRightVectorBar$2, + DownTee: DownTee$2, + DownTeeArrow: DownTeeArrow$2, + Downarrow: Downarrow$2, + Dscr: Dscr$2, + Dstrok: Dstrok$2, + ENG: ENG$2, + ET: ET$2, + ETH: ETH$2, + Eacut: Eacut$2, + Eacute: Eacute$2, + Ecaron: Ecaron$2, + Ecir: Ecir$2, + Ecirc: Ecirc$2, + Ecy: Ecy$2, + Edot: Edot$2, + Efr: Efr$2, + Egrav: Egrav$2, + Egrave: Egrave$2, + Element: Element$2, + Emacr: Emacr$2, + EmptySmallSquare: EmptySmallSquare$2, + EmptyVerySmallSquare: EmptyVerySmallSquare$2, + Eogon: Eogon$2, + Eopf: Eopf$2, + Epsilon: Epsilon$2, + Equal: Equal$2, + EqualTilde: EqualTilde$2, + Equilibrium: Equilibrium$2, + Escr: Escr$2, + Esim: Esim$2, + Eta: Eta$2, + Eum: Eum$2, + Euml: Euml$2, + Exists: Exists$2, + ExponentialE: ExponentialE$2, + Fcy: Fcy$2, + Ffr: Ffr$2, + FilledSmallSquare: FilledSmallSquare$2, + FilledVerySmallSquare: FilledVerySmallSquare$2, + Fopf: Fopf$2, + ForAll: ForAll$2, + Fouriertrf: Fouriertrf$2, + Fscr: Fscr$2, + GJcy: GJcy$2, + G: G$2, + GT: GT$2, + Gamma: Gamma$2, + Gammad: Gammad$2, + Gbreve: Gbreve$2, + Gcedil: Gcedil$2, + Gcirc: Gcirc$2, + Gcy: Gcy$2, + Gdot: Gdot$2, + Gfr: Gfr$2, + Gg: Gg$2, + Gopf: Gopf$2, + GreaterEqual: GreaterEqual$2, + GreaterEqualLess: GreaterEqualLess$2, + GreaterFullEqual: GreaterFullEqual$2, + GreaterGreater: GreaterGreater$2, + GreaterLess: GreaterLess$2, + GreaterSlantEqual: GreaterSlantEqual$2, + GreaterTilde: GreaterTilde$2, + Gscr: Gscr$2, + Gt: Gt$2, + HARDcy: HARDcy$2, + Hacek: Hacek$2, + Hat: Hat$2, + Hcirc: Hcirc$2, + Hfr: Hfr$2, + HilbertSpace: HilbertSpace$2, + Hopf: Hopf$2, + HorizontalLine: HorizontalLine$2, + Hscr: Hscr$2, + Hstrok: Hstrok$2, + HumpDownHump: HumpDownHump$2, + HumpEqual: HumpEqual$2, + IEcy: IEcy$2, + IJlig: IJlig$2, + IOcy: IOcy$2, + Iacut: Iacut$2, + Iacute: Iacute$2, + Icir: Icir$2, + Icirc: Icirc$2, + Icy: Icy$2, + Idot: Idot$2, + Ifr: Ifr$2, + Igrav: Igrav$2, + Igrave: Igrave$2, + Im: Im$2, + Imacr: Imacr$2, + ImaginaryI: ImaginaryI$2, + Implies: Implies$2, + Int: Int$2, + Integral: Integral$2, + Intersection: Intersection$2, + InvisibleComma: InvisibleComma$2, + InvisibleTimes: InvisibleTimes$2, + Iogon: Iogon$2, + Iopf: Iopf$2, + Iota: Iota$2, + Iscr: Iscr$2, + Itilde: Itilde$2, + Iukcy: Iukcy$2, + Ium: Ium$2, + Iuml: Iuml$2, + Jcirc: Jcirc$2, + Jcy: Jcy$2, + Jfr: Jfr$2, + Jopf: Jopf$2, + Jscr: Jscr$2, + Jsercy: Jsercy$2, + Jukcy: Jukcy$2, + KHcy: KHcy$2, + KJcy: KJcy$2, + Kappa: Kappa$2, + Kcedil: Kcedil$2, + Kcy: Kcy$2, + Kfr: Kfr$2, + Kopf: Kopf$2, + Kscr: Kscr$2, + LJcy: LJcy$2, + L: L$2, + LT: LT$2, + Lacute: Lacute$2, + Lambda: Lambda$2, + Lang: Lang$2, + Laplacetrf: Laplacetrf$2, + Larr: Larr$2, + Lcaron: Lcaron$2, + Lcedil: Lcedil$2, + Lcy: Lcy$2, + LeftAngleBracket: LeftAngleBracket$2, + LeftArrow: LeftArrow$2, + LeftArrowBar: LeftArrowBar$2, + LeftArrowRightArrow: LeftArrowRightArrow$2, + LeftCeiling: LeftCeiling$2, + LeftDoubleBracket: LeftDoubleBracket$2, + LeftDownTeeVector: LeftDownTeeVector$2, + LeftDownVector: LeftDownVector$2, + LeftDownVectorBar: LeftDownVectorBar$2, + LeftFloor: LeftFloor$2, + LeftRightArrow: LeftRightArrow$2, + LeftRightVector: LeftRightVector$2, + LeftTee: LeftTee$2, + LeftTeeArrow: LeftTeeArrow$2, + LeftTeeVector: LeftTeeVector$2, + LeftTriangle: LeftTriangle$2, + LeftTriangleBar: LeftTriangleBar$2, + LeftTriangleEqual: LeftTriangleEqual$2, + LeftUpDownVector: LeftUpDownVector$2, + LeftUpTeeVector: LeftUpTeeVector$2, + LeftUpVector: LeftUpVector$2, + LeftUpVectorBar: LeftUpVectorBar$2, + LeftVector: LeftVector$2, + LeftVectorBar: LeftVectorBar$2, + Leftarrow: Leftarrow$2, + Leftrightarrow: Leftrightarrow$2, + LessEqualGreater: LessEqualGreater$2, + LessFullEqual: LessFullEqual$2, + LessGreater: LessGreater$2, + LessLess: LessLess$2, + LessSlantEqual: LessSlantEqual$2, + LessTilde: LessTilde$2, + Lfr: Lfr$2, + Ll: Ll$2, + Lleftarrow: Lleftarrow$2, + Lmidot: Lmidot$2, + LongLeftArrow: LongLeftArrow$2, + LongLeftRightArrow: LongLeftRightArrow$2, + LongRightArrow: LongRightArrow$2, + Longleftarrow: Longleftarrow$2, + Longleftrightarrow: Longleftrightarrow$2, + Longrightarrow: Longrightarrow$2, + Lopf: Lopf$2, + LowerLeftArrow: LowerLeftArrow$2, + LowerRightArrow: LowerRightArrow$2, + Lscr: Lscr$2, + Lsh: Lsh$2, + Lstrok: Lstrok$2, + Lt: Lt$2, + "Map": "⤅", + Mcy: Mcy$2, + MediumSpace: MediumSpace$2, + Mellintrf: Mellintrf$2, + Mfr: Mfr$2, + MinusPlus: MinusPlus$2, + Mopf: Mopf$2, + Mscr: Mscr$2, + Mu: Mu$2, + NJcy: NJcy$2, + Nacute: Nacute$2, + Ncaron: Ncaron$2, + Ncedil: Ncedil$2, + Ncy: Ncy$2, + NegativeMediumSpace: NegativeMediumSpace$2, + NegativeThickSpace: NegativeThickSpace$2, + NegativeThinSpace: NegativeThinSpace$2, + NegativeVeryThinSpace: NegativeVeryThinSpace$2, + NestedGreaterGreater: NestedGreaterGreater$2, + NestedLessLess: NestedLessLess$2, + NewLine: NewLine$2, + Nfr: Nfr$2, + NoBreak: NoBreak$2, + NonBreakingSpace: NonBreakingSpace$2, + Nopf: Nopf$2, + Not: Not$2, + NotCongruent: NotCongruent$2, + NotCupCap: NotCupCap$2, + NotDoubleVerticalBar: NotDoubleVerticalBar$2, + NotElement: NotElement$2, + NotEqual: NotEqual$2, + NotEqualTilde: NotEqualTilde$2, + NotExists: NotExists$2, + NotGreater: NotGreater$2, + NotGreaterEqual: NotGreaterEqual$2, + NotGreaterFullEqual: NotGreaterFullEqual$2, + NotGreaterGreater: NotGreaterGreater$2, + NotGreaterLess: NotGreaterLess$2, + NotGreaterSlantEqual: NotGreaterSlantEqual$2, + NotGreaterTilde: NotGreaterTilde$2, + NotHumpDownHump: NotHumpDownHump$2, + NotHumpEqual: NotHumpEqual$2, + NotLeftTriangle: NotLeftTriangle$2, + NotLeftTriangleBar: NotLeftTriangleBar$2, + NotLeftTriangleEqual: NotLeftTriangleEqual$2, + NotLess: NotLess$2, + NotLessEqual: NotLessEqual$2, + NotLessGreater: NotLessGreater$2, + NotLessLess: NotLessLess$2, + NotLessSlantEqual: NotLessSlantEqual$2, + NotLessTilde: NotLessTilde$2, + NotNestedGreaterGreater: NotNestedGreaterGreater$2, + NotNestedLessLess: NotNestedLessLess$2, + NotPrecedes: NotPrecedes$2, + NotPrecedesEqual: NotPrecedesEqual$2, + NotPrecedesSlantEqual: NotPrecedesSlantEqual$2, + NotReverseElement: NotReverseElement$2, + NotRightTriangle: NotRightTriangle$2, + NotRightTriangleBar: NotRightTriangleBar$2, + NotRightTriangleEqual: NotRightTriangleEqual$2, + NotSquareSubset: NotSquareSubset$2, + NotSquareSubsetEqual: NotSquareSubsetEqual$2, + NotSquareSuperset: NotSquareSuperset$2, + NotSquareSupersetEqual: NotSquareSupersetEqual$2, + NotSubset: NotSubset$2, + NotSubsetEqual: NotSubsetEqual$2, + NotSucceeds: NotSucceeds$2, + NotSucceedsEqual: NotSucceedsEqual$2, + NotSucceedsSlantEqual: NotSucceedsSlantEqual$2, + NotSucceedsTilde: NotSucceedsTilde$2, + NotSuperset: NotSuperset$2, + NotSupersetEqual: NotSupersetEqual$2, + NotTilde: NotTilde$2, + NotTildeEqual: NotTildeEqual$2, + NotTildeFullEqual: NotTildeFullEqual$2, + NotTildeTilde: NotTildeTilde$2, + NotVerticalBar: NotVerticalBar$2, + Nscr: Nscr$2, + Ntild: Ntild$2, + Ntilde: Ntilde$2, + Nu: Nu$2, + OElig: OElig$2, + Oacut: Oacut$2, + Oacute: Oacute$2, + Ocir: Ocir$2, + Ocirc: Ocirc$2, + Ocy: Ocy$2, + Odblac: Odblac$2, + Ofr: Ofr$2, + Ograv: Ograv$2, + Ograve: Ograve$2, + Omacr: Omacr$2, + Omega: Omega$2, + Omicron: Omicron$2, + Oopf: Oopf$2, + OpenCurlyDoubleQuote: OpenCurlyDoubleQuote$2, + OpenCurlyQuote: OpenCurlyQuote$2, + Or: Or$2, + Oscr: Oscr$2, + Oslas: Oslas$2, + Oslash: Oslash$2, + Otild: Otild$2, + Otilde: Otilde$2, + Otimes: Otimes$2, + Oum: Oum$2, + Ouml: Ouml$2, + OverBar: OverBar$2, + OverBrace: OverBrace$2, + OverBracket: OverBracket$2, + OverParenthesis: OverParenthesis$2, + PartialD: PartialD$2, + Pcy: Pcy$2, + Pfr: Pfr$2, + Phi: Phi$2, + Pi: Pi$2, + PlusMinus: PlusMinus$2, + Poincareplane: Poincareplane$2, + Popf: Popf$2, + Pr: Pr$2, + Precedes: Precedes$2, + PrecedesEqual: PrecedesEqual$2, + PrecedesSlantEqual: PrecedesSlantEqual$2, + PrecedesTilde: PrecedesTilde$2, + Prime: Prime$2, + Product: Product$2, + Proportion: Proportion$2, + Proportional: Proportional$2, + Pscr: Pscr$2, + Psi: Psi$2, + QUO: QUO$2, + QUOT: QUOT$2, + Qfr: Qfr$2, + Qopf: Qopf$2, + Qscr: Qscr$2, + RBarr: RBarr$2, + RE: RE$2, + REG: REG$2, + Racute: Racute$2, + Rang: Rang$2, + Rarr: Rarr$2, + Rarrtl: Rarrtl$2, + Rcaron: Rcaron$2, + Rcedil: Rcedil$2, + Rcy: Rcy$2, + Re: Re$2, + ReverseElement: ReverseElement$2, + ReverseEquilibrium: ReverseEquilibrium$2, + ReverseUpEquilibrium: ReverseUpEquilibrium$2, + Rfr: Rfr$2, + Rho: Rho$2, + RightAngleBracket: RightAngleBracket$2, + RightArrow: RightArrow$2, + RightArrowBar: RightArrowBar$2, + RightArrowLeftArrow: RightArrowLeftArrow$2, + RightCeiling: RightCeiling$2, + RightDoubleBracket: RightDoubleBracket$2, + RightDownTeeVector: RightDownTeeVector$2, + RightDownVector: RightDownVector$2, + RightDownVectorBar: RightDownVectorBar$2, + RightFloor: RightFloor$2, + RightTee: RightTee$2, + RightTeeArrow: RightTeeArrow$2, + RightTeeVector: RightTeeVector$2, + RightTriangle: RightTriangle$2, + RightTriangleBar: RightTriangleBar$2, + RightTriangleEqual: RightTriangleEqual$2, + RightUpDownVector: RightUpDownVector$2, + RightUpTeeVector: RightUpTeeVector$2, + RightUpVector: RightUpVector$2, + RightUpVectorBar: RightUpVectorBar$2, + RightVector: RightVector$2, + RightVectorBar: RightVectorBar$2, + Rightarrow: Rightarrow$2, + Ropf: Ropf$2, + RoundImplies: RoundImplies$2, + Rrightarrow: Rrightarrow$2, + Rscr: Rscr$2, + Rsh: Rsh$2, + RuleDelayed: RuleDelayed$2, + SHCHcy: SHCHcy$2, + SHcy: SHcy$2, + SOFTcy: SOFTcy$2, + Sacute: Sacute$2, + Sc: Sc$2, + Scaron: Scaron$2, + Scedil: Scedil$2, + Scirc: Scirc$2, + Scy: Scy$2, + Sfr: Sfr$2, + ShortDownArrow: ShortDownArrow$2, + ShortLeftArrow: ShortLeftArrow$2, + ShortRightArrow: ShortRightArrow$2, + ShortUpArrow: ShortUpArrow$2, + Sigma: Sigma$2, + SmallCircle: SmallCircle$2, + Sopf: Sopf$2, + Sqrt: Sqrt$2, + Square: Square$2, + SquareIntersection: SquareIntersection$2, + SquareSubset: SquareSubset$2, + SquareSubsetEqual: SquareSubsetEqual$2, + SquareSuperset: SquareSuperset$2, + SquareSupersetEqual: SquareSupersetEqual$2, + SquareUnion: SquareUnion$2, + Sscr: Sscr$2, + Star: Star$2, + Sub: Sub$2, + Subset: Subset$2, + SubsetEqual: SubsetEqual$2, + Succeeds: Succeeds$2, + SucceedsEqual: SucceedsEqual$2, + SucceedsSlantEqual: SucceedsSlantEqual$2, + SucceedsTilde: SucceedsTilde$2, + SuchThat: SuchThat$2, + Sum: Sum$2, + Sup: Sup$2, + Superset: Superset$2, + SupersetEqual: SupersetEqual$2, + Supset: Supset$2, + THOR: THOR$2, + THORN: THORN$2, + TRADE: TRADE$2, + TSHcy: TSHcy$2, + TScy: TScy$2, + Tab: Tab$2, + Tau: Tau$2, + Tcaron: Tcaron$2, + Tcedil: Tcedil$2, + Tcy: Tcy$2, + Tfr: Tfr$2, + Therefore: Therefore$2, + Theta: Theta$2, + ThickSpace: ThickSpace$2, + ThinSpace: ThinSpace$2, + Tilde: Tilde$2, + TildeEqual: TildeEqual$2, + TildeFullEqual: TildeFullEqual$2, + TildeTilde: TildeTilde$2, + Topf: Topf$2, + TripleDot: TripleDot$2, + Tscr: Tscr$2, + Tstrok: Tstrok$2, + Uacut: Uacut$2, + Uacute: Uacute$2, + Uarr: Uarr$2, + Uarrocir: Uarrocir$2, + Ubrcy: Ubrcy$2, + Ubreve: Ubreve$2, + Ucir: Ucir$2, + Ucirc: Ucirc$2, + Ucy: Ucy$2, + Udblac: Udblac$2, + Ufr: Ufr$2, + Ugrav: Ugrav$2, + Ugrave: Ugrave$2, + Umacr: Umacr$2, + UnderBar: UnderBar$2, + UnderBrace: UnderBrace$2, + UnderBracket: UnderBracket$2, + UnderParenthesis: UnderParenthesis$2, + Union: Union$2, + UnionPlus: UnionPlus$2, + Uogon: Uogon$2, + Uopf: Uopf$2, + UpArrow: UpArrow$2, + UpArrowBar: UpArrowBar$2, + UpArrowDownArrow: UpArrowDownArrow$2, + UpDownArrow: UpDownArrow$2, + UpEquilibrium: UpEquilibrium$2, + UpTee: UpTee$2, + UpTeeArrow: UpTeeArrow$2, + Uparrow: Uparrow$2, + Updownarrow: Updownarrow$2, + UpperLeftArrow: UpperLeftArrow$2, + UpperRightArrow: UpperRightArrow$2, + Upsi: Upsi$2, + Upsilon: Upsilon$2, + Uring: Uring$2, + Uscr: Uscr$2, + Utilde: Utilde$2, + Uum: Uum$2, + Uuml: Uuml$2, + VDash: VDash$2, + Vbar: Vbar$2, + Vcy: Vcy$2, + Vdash: Vdash$2, + Vdashl: Vdashl$2, + Vee: Vee$2, + Verbar: Verbar$2, + Vert: Vert$2, + VerticalBar: VerticalBar$2, + VerticalLine: VerticalLine$2, + VerticalSeparator: VerticalSeparator$2, + VerticalTilde: VerticalTilde$2, + VeryThinSpace: VeryThinSpace$2, + Vfr: Vfr$2, + Vopf: Vopf$2, + Vscr: Vscr$2, + Vvdash: Vvdash$2, + Wcirc: Wcirc$2, + Wedge: Wedge$2, + Wfr: Wfr$2, + Wopf: Wopf$2, + Wscr: Wscr$2, + Xfr: Xfr$2, + Xi: Xi$2, + Xopf: Xopf$2, + Xscr: Xscr$2, + YAcy: YAcy$2, + YIcy: YIcy$2, + YUcy: YUcy$2, + Yacut: Yacut$2, + Yacute: Yacute$2, + Ycirc: Ycirc$2, + Ycy: Ycy$2, + Yfr: Yfr$2, + Yopf: Yopf$2, + Yscr: Yscr$2, + Yuml: Yuml$2, + ZHcy: ZHcy$2, + Zacute: Zacute$2, + Zcaron: Zcaron$2, + Zcy: Zcy$2, + Zdot: Zdot$2, + ZeroWidthSpace: ZeroWidthSpace$2, + Zeta: Zeta$2, + Zfr: Zfr$2, + Zopf: Zopf$2, + Zscr: Zscr$2, + aacut: aacut$2, + aacute: aacute$2, + abreve: abreve$2, + ac: ac$2, + acE: acE$2, + acd: acd$2, + acir: acir$2, + acirc: acirc$2, + acut: acut$2, + acute: acute$2, + acy: acy$2, + aeli: aeli$2, + aelig: aelig$2, + af: af$2, + afr: afr$2, + agrav: agrav$2, + agrave: agrave$2, + alefsym: alefsym$2, + aleph: aleph$2, + alpha: alpha$2, + amacr: amacr$2, + amalg: amalg$2, + am: am$2, + amp: amp$2, + and: and$2, + andand: andand$2, + andd: andd$2, + andslope: andslope$2, + andv: andv$2, + ang: ang$2, + ange: ange$2, + angle: angle$2, + angmsd: angmsd$2, + angmsdaa: angmsdaa$2, + angmsdab: angmsdab$2, + angmsdac: angmsdac$2, + angmsdad: angmsdad$2, + angmsdae: angmsdae$2, + angmsdaf: angmsdaf$2, + angmsdag: angmsdag$2, + angmsdah: angmsdah$2, + angrt: angrt$2, + angrtvb: angrtvb$2, + angrtvbd: angrtvbd$2, + angsph: angsph$2, + angst: angst$2, + angzarr: angzarr$2, + aogon: aogon$2, + aopf: aopf$2, + ap: ap$2, + apE: apE$2, + apacir: apacir$2, + ape: ape$2, + apid: apid$2, + apos: apos$2, + approx: approx$2, + approxeq: approxeq$2, + arin: arin$2, + aring: aring$2, + ascr: ascr$2, + ast: ast$2, + asymp: asymp$2, + asympeq: asympeq$2, + atild: atild$2, + atilde: atilde$2, + aum: aum$2, + auml: auml$2, + awconint: awconint$2, + awint: awint$2, + bNot: bNot$2, + backcong: backcong$2, + backepsilon: backepsilon$2, + backprime: backprime$2, + backsim: backsim$2, + backsimeq: backsimeq$2, + barvee: barvee$2, + barwed: barwed$2, + barwedge: barwedge$2, + bbrk: bbrk$2, + bbrktbrk: bbrktbrk$2, + bcong: bcong$2, + bcy: bcy$2, + bdquo: bdquo$2, + becaus: becaus$2, + because: because$2, + bemptyv: bemptyv$2, + bepsi: bepsi$2, + bernou: bernou$2, + beta: beta$2, + beth: beth$2, + between: between$2, + bfr: bfr$2, + bigcap: bigcap$2, + bigcirc: bigcirc$2, + bigcup: bigcup$2, + bigodot: bigodot$2, + bigoplus: bigoplus$2, + bigotimes: bigotimes$2, + bigsqcup: bigsqcup$2, + bigstar: bigstar$2, + bigtriangledown: bigtriangledown$2, + bigtriangleup: bigtriangleup$2, + biguplus: biguplus$2, + bigvee: bigvee$2, + bigwedge: bigwedge$2, + bkarow: bkarow$2, + blacklozenge: blacklozenge$2, + blacksquare: blacksquare$2, + blacktriangle: blacktriangle$2, + blacktriangledown: blacktriangledown$2, + blacktriangleleft: blacktriangleleft$2, + blacktriangleright: blacktriangleright$2, + blank: blank$2, + blk12: blk12$2, + blk14: blk14$2, + blk34: blk34$2, + block: block$2, + bne: bne$2, + bnequiv: bnequiv$2, + bnot: bnot$2, + bopf: bopf$2, + bot: bot$2, + bottom: bottom$2, + bowtie: bowtie$2, + boxDL: boxDL$2, + boxDR: boxDR$2, + boxDl: boxDl$2, + boxDr: boxDr$2, + boxH: boxH$2, + boxHD: boxHD$2, + boxHU: boxHU$2, + boxHd: boxHd$2, + boxHu: boxHu$2, + boxUL: boxUL$2, + boxUR: boxUR$2, + boxUl: boxUl$2, + boxUr: boxUr$2, + boxV: boxV$2, + boxVH: boxVH$2, + boxVL: boxVL$2, + boxVR: boxVR$2, + boxVh: boxVh$2, + boxVl: boxVl$2, + boxVr: boxVr$2, + boxbox: boxbox$2, + boxdL: boxdL$2, + boxdR: boxdR$2, + boxdl: boxdl$2, + boxdr: boxdr$2, + boxh: boxh$2, + boxhD: boxhD$2, + boxhU: boxhU$2, + boxhd: boxhd$2, + boxhu: boxhu$2, + boxminus: boxminus$2, + boxplus: boxplus$2, + boxtimes: boxtimes$2, + boxuL: boxuL$2, + boxuR: boxuR$2, + boxul: boxul$2, + boxur: boxur$2, + boxv: boxv$2, + boxvH: boxvH$2, + boxvL: boxvL$2, + boxvR: boxvR$2, + boxvh: boxvh$2, + boxvl: boxvl$2, + boxvr: boxvr$2, + bprime: bprime$2, + breve: breve$2, + brvba: brvba$2, + brvbar: brvbar$2, + bscr: bscr$2, + bsemi: bsemi$2, + bsim: bsim$2, + bsime: bsime$2, + bsol: bsol$2, + bsolb: bsolb$2, + bsolhsub: bsolhsub$2, + bull: bull$2, + bullet: bullet$2, + bump: bump$2, + bumpE: bumpE$2, + bumpe: bumpe$2, + bumpeq: bumpeq$2, + cacute: cacute$2, + cap: cap$2, + capand: capand$2, + capbrcup: capbrcup$2, + capcap: capcap$2, + capcup: capcup$2, + capdot: capdot$2, + caps: caps$2, + caret: caret$2, + caron: caron$2, + ccaps: ccaps$2, + ccaron: ccaron$2, + ccedi: ccedi$2, + ccedil: ccedil$2, + ccirc: ccirc$2, + ccups: ccups$2, + ccupssm: ccupssm$2, + cdot: cdot$2, + cedi: cedi$2, + cedil: cedil$2, + cemptyv: cemptyv$2, + cen: cen$2, + cent: cent$2, + centerdot: centerdot$2, + cfr: cfr$2, + chcy: chcy$2, + check: check$3, + checkmark: checkmark$2, + chi: chi$2, + cir: cir$2, + cirE: cirE$2, + circ: circ$2, + circeq: circeq$2, + circlearrowleft: circlearrowleft$2, + circlearrowright: circlearrowright$2, + circledR: circledR$2, + circledS: circledS$2, + circledast: circledast$2, + circledcirc: circledcirc$2, + circleddash: circleddash$2, + cire: cire$2, + cirfnint: cirfnint$2, + cirmid: cirmid$2, + cirscir: cirscir$2, + clubs: clubs$2, + clubsuit: clubsuit$2, + colon: colon$2, + colone: colone$2, + coloneq: coloneq$2, + comma: comma$2, + commat: commat$2, + comp: comp$2, + compfn: compfn$2, + complement: complement$2, + complexes: complexes$2, + cong: cong$2, + congdot: congdot$2, + conint: conint$2, + copf: copf$2, + coprod: coprod$2, + cop: cop$2, + copy: copy$2, + copysr: copysr$2, + crarr: crarr$2, + cross: cross$2, + cscr: cscr$2, + csub: csub$2, + csube: csube$2, + csup: csup$2, + csupe: csupe$2, + ctdot: ctdot$2, + cudarrl: cudarrl$2, + cudarrr: cudarrr$2, + cuepr: cuepr$2, + cuesc: cuesc$2, + cularr: cularr$2, + cularrp: cularrp$2, + cup: cup$2, + cupbrcap: cupbrcap$2, + cupcap: cupcap$2, + cupcup: cupcup$2, + cupdot: cupdot$2, + cupor: cupor$2, + cups: cups$2, + curarr: curarr$2, + curarrm: curarrm$2, + curlyeqprec: curlyeqprec$2, + curlyeqsucc: curlyeqsucc$2, + curlyvee: curlyvee$2, + curlywedge: curlywedge$2, + curre: curre$2, + curren: curren$2, + curvearrowleft: curvearrowleft$2, + curvearrowright: curvearrowright$2, + cuvee: cuvee$2, + cuwed: cuwed$2, + cwconint: cwconint$2, + cwint: cwint$2, + cylcty: cylcty$2, + dArr: dArr$2, + dHar: dHar$2, + dagger: dagger$2, + daleth: daleth$2, + darr: darr$2, + dash: dash$2, + dashv: dashv$2, + dbkarow: dbkarow$2, + dblac: dblac$2, + dcaron: dcaron$2, + dcy: dcy$2, + dd: dd$2, + ddagger: ddagger$2, + ddarr: ddarr$2, + ddotseq: ddotseq$2, + de: de$2, + deg: deg$2, + delta: delta$2, + demptyv: demptyv$2, + dfisht: dfisht$2, + dfr: dfr$2, + dharl: dharl$2, + dharr: dharr$2, + diam: diam$2, + diamond: diamond$2, + diamondsuit: diamondsuit$2, + diams: diams$2, + die: die$2, + digamma: digamma$2, + disin: disin$2, + div: div$2, + divid: divid$2, + divide: divide$2, + divideontimes: divideontimes$2, + divonx: divonx$2, + djcy: djcy$2, + dlcorn: dlcorn$2, + dlcrop: dlcrop$2, + dollar: dollar$2, + dopf: dopf$2, + dot: dot$2, + doteq: doteq$2, + doteqdot: doteqdot$2, + dotminus: dotminus$2, + dotplus: dotplus$2, + dotsquare: dotsquare$2, + doublebarwedge: doublebarwedge$2, + downarrow: downarrow$2, + downdownarrows: downdownarrows$2, + downharpoonleft: downharpoonleft$2, + downharpoonright: downharpoonright$2, + drbkarow: drbkarow$2, + drcorn: drcorn$2, + drcrop: drcrop$2, + dscr: dscr$2, + dscy: dscy$2, + dsol: dsol$2, + dstrok: dstrok$2, + dtdot: dtdot$2, + dtri: dtri$2, + dtrif: dtrif$2, + duarr: duarr$2, + duhar: duhar$2, + dwangle: dwangle$2, + dzcy: dzcy$2, + dzigrarr: dzigrarr$2, + eDDot: eDDot$2, + eDot: eDot$2, + eacut: eacut$2, + eacute: eacute$2, + easter: easter$2, + ecaron: ecaron$2, + ecir: ecir$2, + ecirc: ecirc$2, + ecolon: ecolon$2, + ecy: ecy$2, + edot: edot$2, + ee: ee$2, + efDot: efDot$2, + efr: efr$2, + eg: eg$2, + egrav: egrav$2, + egrave: egrave$2, + egs: egs$2, + egsdot: egsdot$2, + el: el$2, + elinters: elinters$2, + ell: ell$2, + els: els$2, + elsdot: elsdot$2, + emacr: emacr$2, + empty: empty$2, + emptyset: emptyset$2, + emptyv: emptyv$2, + emsp13: emsp13$2, + emsp14: emsp14$2, + emsp: emsp$2, + eng: eng$2, + ensp: ensp$2, + eogon: eogon$2, + eopf: eopf$2, + epar: epar$2, + eparsl: eparsl$2, + eplus: eplus$2, + epsi: epsi$2, + epsilon: epsilon$2, + epsiv: epsiv$2, + eqcirc: eqcirc$2, + eqcolon: eqcolon$2, + eqsim: eqsim$2, + eqslantgtr: eqslantgtr$2, + eqslantless: eqslantless$2, + equals: equals$2, + equest: equest$2, + equiv: equiv$2, + equivDD: equivDD$2, + eqvparsl: eqvparsl$2, + erDot: erDot$2, + erarr: erarr$2, + escr: escr$2, + esdot: esdot$2, + esim: esim$2, + eta: eta$2, + et: et$2, + eth: eth$2, + eum: eum$2, + euml: euml$2, + euro: euro$2, + excl: excl$2, + exist: exist$2, + expectation: expectation$2, + exponentiale: exponentiale$2, + fallingdotseq: fallingdotseq$2, + fcy: fcy$2, + female: female$2, + ffilig: ffilig$2, + fflig: fflig$2, + ffllig: ffllig$2, + ffr: ffr$2, + filig: filig$2, + fjlig: fjlig$2, + flat: flat$2, + fllig: fllig$2, + fltns: fltns$2, + fnof: fnof$2, + fopf: fopf$2, + forall: forall$2, + fork: fork$2, + forkv: forkv$2, + fpartint: fpartint$2, + frac1: frac1$2, + frac12: frac12$2, + frac13: frac13$2, + frac14: frac14$2, + frac15: frac15$2, + frac16: frac16$2, + frac18: frac18$2, + frac23: frac23$2, + frac25: frac25$2, + frac3: frac3$2, + frac34: frac34$2, + frac35: frac35$2, + frac38: frac38$2, + frac45: frac45$2, + frac56: frac56$2, + frac58: frac58$2, + frac78: frac78$2, + frasl: frasl$2, + frown: frown$2, + fscr: fscr$2, + gE: gE$2, + gEl: gEl$2, + gacute: gacute$2, + gamma: gamma$2, + gammad: gammad$2, + gap: gap$2, + gbreve: gbreve$2, + gcirc: gcirc$2, + gcy: gcy$2, + gdot: gdot$2, + ge: ge$2, + gel: gel$2, + geq: geq$2, + geqq: geqq$2, + geqslant: geqslant$2, + ges: ges$2, + gescc: gescc$2, + gesdot: gesdot$2, + gesdoto: gesdoto$2, + gesdotol: gesdotol$2, + gesl: gesl$2, + gesles: gesles$2, + gfr: gfr$2, + gg: gg$2, + ggg: ggg$2, + gimel: gimel$2, + gjcy: gjcy$2, + gl: gl$2, + glE: glE$2, + gla: gla$2, + glj: glj$2, + gnE: gnE$2, + gnap: gnap$2, + gnapprox: gnapprox$2, + gne: gne$2, + gneq: gneq$2, + gneqq: gneqq$2, + gnsim: gnsim$2, + gopf: gopf$2, + grave: grave$2, + gscr: gscr$2, + gsim: gsim$2, + gsime: gsime$2, + gsiml: gsiml$2, + g: g$2, + gt: gt$2, + gtcc: gtcc$2, + gtcir: gtcir$2, + gtdot: gtdot$2, + gtlPar: gtlPar$2, + gtquest: gtquest$2, + gtrapprox: gtrapprox$2, + gtrarr: gtrarr$2, + gtrdot: gtrdot$2, + gtreqless: gtreqless$2, + gtreqqless: gtreqqless$2, + gtrless: gtrless$2, + gtrsim: gtrsim$2, + gvertneqq: gvertneqq$2, + gvnE: gvnE$2, + hArr: hArr$2, + hairsp: hairsp$2, + half: half$2, + hamilt: hamilt$2, + hardcy: hardcy$2, + harr: harr$2, + harrcir: harrcir$2, + harrw: harrw$2, + hbar: hbar$2, + hcirc: hcirc$2, + hearts: hearts$2, + heartsuit: heartsuit$2, + hellip: hellip$2, + hercon: hercon$2, + hfr: hfr$2, + hksearow: hksearow$2, + hkswarow: hkswarow$2, + hoarr: hoarr$2, + homtht: homtht$2, + hookleftarrow: hookleftarrow$2, + hookrightarrow: hookrightarrow$2, + hopf: hopf$2, + horbar: horbar$2, + hscr: hscr$2, + hslash: hslash$2, + hstrok: hstrok$2, + hybull: hybull$2, + hyphen: hyphen$2, + iacut: iacut$2, + iacute: iacute$2, + ic: ic$2, + icir: icir$2, + icirc: icirc$2, + icy: icy$2, + iecy: iecy$2, + iexc: iexc$2, + iexcl: iexcl$2, + iff: iff$2, + ifr: ifr$2, + igrav: igrav$2, + igrave: igrave$2, + ii: ii$2, + iiiint: iiiint$2, + iiint: iiint$2, + iinfin: iinfin$2, + iiota: iiota$2, + ijlig: ijlig$2, + imacr: imacr$2, + image: image$3, + imagline: imagline$2, + imagpart: imagpart$2, + imath: imath$2, + imof: imof$2, + imped: imped$2, + "in": "∈", + incare: incare$2, + infin: infin$2, + infintie: infintie$2, + inodot: inodot$2, + int: int$3, + intcal: intcal$2, + integers: integers$2, + intercal: intercal$2, + intlarhk: intlarhk$2, + intprod: intprod$2, + iocy: iocy$2, + iogon: iogon$2, + iopf: iopf$2, + iota: iota$2, + iprod: iprod$2, + iques: iques$2, + iquest: iquest$2, + iscr: iscr$2, + isin: isin$2, + isinE: isinE$2, + isindot: isindot$2, + isins: isins$2, + isinsv: isinsv$2, + isinv: isinv$2, + it: it$2, + itilde: itilde$2, + iukcy: iukcy$2, + ium: ium$2, + iuml: iuml$2, + jcirc: jcirc$2, + jcy: jcy$2, + jfr: jfr$2, + jmath: jmath$2, + jopf: jopf$2, + jscr: jscr$2, + jsercy: jsercy$2, + jukcy: jukcy$2, + kappa: kappa$2, + kappav: kappav$2, + kcedil: kcedil$2, + kcy: kcy$2, + kfr: kfr$2, + kgreen: kgreen$2, + khcy: khcy$2, + kjcy: kjcy$2, + kopf: kopf$2, + kscr: kscr$2, + lAarr: lAarr$2, + lArr: lArr$2, + lAtail: lAtail$2, + lBarr: lBarr$2, + lE: lE$2, + lEg: lEg$2, + lHar: lHar$2, + lacute: lacute$2, + laemptyv: laemptyv$2, + lagran: lagran$2, + lambda: lambda$2, + lang: lang$2, + langd: langd$2, + langle: langle$2, + lap: lap$2, + laqu: laqu$2, + laquo: laquo$2, + larr: larr$2, + larrb: larrb$2, + larrbfs: larrbfs$2, + larrfs: larrfs$2, + larrhk: larrhk$2, + larrlp: larrlp$2, + larrpl: larrpl$2, + larrsim: larrsim$2, + larrtl: larrtl$2, + lat: lat$2, + latail: latail$2, + late: late$2, + lates: lates$2, + lbarr: lbarr$2, + lbbrk: lbbrk$2, + lbrace: lbrace$2, + lbrack: lbrack$2, + lbrke: lbrke$2, + lbrksld: lbrksld$2, + lbrkslu: lbrkslu$2, + lcaron: lcaron$2, + lcedil: lcedil$2, + lceil: lceil$2, + lcub: lcub$2, + lcy: lcy$2, + ldca: ldca$2, + ldquo: ldquo$2, + ldquor: ldquor$2, + ldrdhar: ldrdhar$2, + ldrushar: ldrushar$2, + ldsh: ldsh$2, + le: le$2, + leftarrow: leftarrow$2, + leftarrowtail: leftarrowtail$2, + leftharpoondown: leftharpoondown$2, + leftharpoonup: leftharpoonup$2, + leftleftarrows: leftleftarrows$2, + leftrightarrow: leftrightarrow$2, + leftrightarrows: leftrightarrows$2, + leftrightharpoons: leftrightharpoons$2, + leftrightsquigarrow: leftrightsquigarrow$2, + leftthreetimes: leftthreetimes$2, + leg: leg$2, + leq: leq$2, + leqq: leqq$2, + leqslant: leqslant$2, + les: les$2, + lescc: lescc$2, + lesdot: lesdot$2, + lesdoto: lesdoto$2, + lesdotor: lesdotor$2, + lesg: lesg$2, + lesges: lesges$2, + lessapprox: lessapprox$2, + lessdot: lessdot$2, + lesseqgtr: lesseqgtr$2, + lesseqqgtr: lesseqqgtr$2, + lessgtr: lessgtr$2, + lesssim: lesssim$2, + lfisht: lfisht$2, + lfloor: lfloor$2, + lfr: lfr$2, + lg: lg$2, + lgE: lgE$2, + lhard: lhard$2, + lharu: lharu$2, + lharul: lharul$2, + lhblk: lhblk$2, + ljcy: ljcy$2, + ll: ll$2, + llarr: llarr$2, + llcorner: llcorner$2, + llhard: llhard$2, + lltri: lltri$2, + lmidot: lmidot$2, + lmoust: lmoust$2, + lmoustache: lmoustache$2, + lnE: lnE$2, + lnap: lnap$2, + lnapprox: lnapprox$2, + lne: lne$2, + lneq: lneq$2, + lneqq: lneqq$2, + lnsim: lnsim$2, + loang: loang$2, + loarr: loarr$2, + lobrk: lobrk$2, + longleftarrow: longleftarrow$2, + longleftrightarrow: longleftrightarrow$2, + longmapsto: longmapsto$2, + longrightarrow: longrightarrow$2, + looparrowleft: looparrowleft$2, + looparrowright: looparrowright$2, + lopar: lopar$2, + lopf: lopf$2, + loplus: loplus$2, + lotimes: lotimes$2, + lowast: lowast$2, + lowbar: lowbar$2, + loz: loz$2, + lozenge: lozenge$2, + lozf: lozf$2, + lpar: lpar$2, + lparlt: lparlt$2, + lrarr: lrarr$2, + lrcorner: lrcorner$2, + lrhar: lrhar$2, + lrhard: lrhard$2, + lrm: lrm$2, + lrtri: lrtri$2, + lsaquo: lsaquo$2, + lscr: lscr$2, + lsh: lsh$2, + lsim: lsim$2, + lsime: lsime$2, + lsimg: lsimg$2, + lsqb: lsqb$2, + lsquo: lsquo$2, + lsquor: lsquor$2, + lstrok: lstrok$2, + l: l$2, + lt: lt$3, + ltcc: ltcc$2, + ltcir: ltcir$2, + ltdot: ltdot$2, + lthree: lthree$2, + ltimes: ltimes$2, + ltlarr: ltlarr$2, + ltquest: ltquest$2, + ltrPar: ltrPar$2, + ltri: ltri$2, + ltrie: ltrie$2, + ltrif: ltrif$2, + lurdshar: lurdshar$2, + luruhar: luruhar$2, + lvertneqq: lvertneqq$2, + lvnE: lvnE$2, + mDDot: mDDot$2, + mac: mac$2, + macr: macr$2, + male: male$2, + malt: malt$2, + maltese: maltese$2, + map: map$5, + mapsto: mapsto$2, + mapstodown: mapstodown$2, + mapstoleft: mapstoleft$2, + mapstoup: mapstoup$2, + marker: marker$2, + mcomma: mcomma$2, + mcy: mcy$2, + mdash: mdash$2, + measuredangle: measuredangle$2, + mfr: mfr$2, + mho: mho$2, + micr: micr$2, + micro: micro$2, + mid: mid$2, + midast: midast$2, + midcir: midcir$2, + middo: middo$2, + middot: middot$2, + minus: minus$2, + minusb: minusb$2, + minusd: minusd$2, + minusdu: minusdu$2, + mlcp: mlcp$2, + mldr: mldr$2, + mnplus: mnplus$2, + models: models$2, + mopf: mopf$2, + mp: mp$2, + mscr: mscr$2, + mstpos: mstpos$2, + mu: mu$2, + multimap: multimap$2, + mumap: mumap$2, + nGg: nGg$2, + nGt: nGt$2, + nGtv: nGtv$2, + nLeftarrow: nLeftarrow$2, + nLeftrightarrow: nLeftrightarrow$2, + nLl: nLl$2, + nLt: nLt$2, + nLtv: nLtv$2, + nRightarrow: nRightarrow$2, + nVDash: nVDash$2, + nVdash: nVdash$2, + nabla: nabla$2, + nacute: nacute$2, + nang: nang$2, + nap: nap$2, + napE: napE$2, + napid: napid$2, + napos: napos$2, + napprox: napprox$2, + natur: natur$2, + natural: natural$2, + naturals: naturals$2, + nbs: nbs$2, + nbsp: nbsp$2, + nbump: nbump$2, + nbumpe: nbumpe$2, + ncap: ncap$2, + ncaron: ncaron$2, + ncedil: ncedil$2, + ncong: ncong$2, + ncongdot: ncongdot$2, + ncup: ncup$2, + ncy: ncy$2, + ndash: ndash$2, + ne: ne$2, + neArr: neArr$2, + nearhk: nearhk$2, + nearr: nearr$2, + nearrow: nearrow$2, + nedot: nedot$2, + nequiv: nequiv$2, + nesear: nesear$2, + nesim: nesim$2, + nexist: nexist$2, + nexists: nexists$2, + nfr: nfr$2, + ngE: ngE$2, + nge: nge$2, + ngeq: ngeq$2, + ngeqq: ngeqq$2, + ngeqslant: ngeqslant$2, + nges: nges$2, + ngsim: ngsim$2, + ngt: ngt$2, + ngtr: ngtr$2, + nhArr: nhArr$2, + nharr: nharr$2, + nhpar: nhpar$2, + ni: ni$2, + nis: nis$2, + nisd: nisd$2, + niv: niv$2, + njcy: njcy$2, + nlArr: nlArr$2, + nlE: nlE$2, + nlarr: nlarr$2, + nldr: nldr$2, + nle: nle$2, + nleftarrow: nleftarrow$2, + nleftrightarrow: nleftrightarrow$2, + nleq: nleq$2, + nleqq: nleqq$2, + nleqslant: nleqslant$2, + nles: nles$2, + nless: nless$2, + nlsim: nlsim$2, + nlt: nlt$2, + nltri: nltri$2, + nltrie: nltrie$2, + nmid: nmid$2, + nopf: nopf$2, + no: no$2, + not: not$2, + notin: notin$2, + notinE: notinE$2, + notindot: notindot$2, + notinva: notinva$2, + notinvb: notinvb$2, + notinvc: notinvc$2, + notni: notni$2, + notniva: notniva$2, + notnivb: notnivb$2, + notnivc: notnivc$2, + npar: npar$2, + nparallel: nparallel$2, + nparsl: nparsl$2, + npart: npart$2, + npolint: npolint$2, + npr: npr$2, + nprcue: nprcue$2, + npre: npre$2, + nprec: nprec$2, + npreceq: npreceq$2, + nrArr: nrArr$2, + nrarr: nrarr$2, + nrarrc: nrarrc$2, + nrarrw: nrarrw$2, + nrightarrow: nrightarrow$2, + nrtri: nrtri$2, + nrtrie: nrtrie$2, + nsc: nsc$2, + nsccue: nsccue$2, + nsce: nsce$2, + nscr: nscr$2, + nshortmid: nshortmid$2, + nshortparallel: nshortparallel$2, + nsim: nsim$2, + nsime: nsime$2, + nsimeq: nsimeq$2, + nsmid: nsmid$2, + nspar: nspar$2, + nsqsube: nsqsube$2, + nsqsupe: nsqsupe$2, + nsub: nsub$2, + nsubE: nsubE$2, + nsube: nsube$2, + nsubset: nsubset$2, + nsubseteq: nsubseteq$2, + nsubseteqq: nsubseteqq$2, + nsucc: nsucc$2, + nsucceq: nsucceq$2, + nsup: nsup$2, + nsupE: nsupE$2, + nsupe: nsupe$2, + nsupset: nsupset$2, + nsupseteq: nsupseteq$2, + nsupseteqq: nsupseteqq$2, + ntgl: ntgl$2, + ntild: ntild$2, + ntilde: ntilde$2, + ntlg: ntlg$2, + ntriangleleft: ntriangleleft$2, + ntrianglelefteq: ntrianglelefteq$2, + ntriangleright: ntriangleright$2, + ntrianglerighteq: ntrianglerighteq$2, + nu: nu$2, + num: num$2, + numero: numero$2, + numsp: numsp$2, + nvDash: nvDash$2, + nvHarr: nvHarr$2, + nvap: nvap$2, + nvdash: nvdash$2, + nvge: nvge$2, + nvgt: nvgt$2, + nvinfin: nvinfin$2, + nvlArr: nvlArr$2, + nvle: nvle$2, + nvlt: nvlt$2, + nvltrie: nvltrie$2, + nvrArr: nvrArr$2, + nvrtrie: nvrtrie$2, + nvsim: nvsim$2, + nwArr: nwArr$2, + nwarhk: nwarhk$2, + nwarr: nwarr$2, + nwarrow: nwarrow$2, + nwnear: nwnear$2, + oS: oS$2, + oacut: oacut$2, + oacute: oacute$2, + oast: oast$2, + ocir: ocir$2, + ocirc: ocirc$2, + ocy: ocy$2, + odash: odash$2, + odblac: odblac$2, + odiv: odiv$2, + odot: odot$2, + odsold: odsold$2, + oelig: oelig$2, + ofcir: ofcir$2, + ofr: ofr$2, + ogon: ogon$2, + ograv: ograv$2, + ograve: ograve$2, + ogt: ogt$2, + ohbar: ohbar$2, + ohm: ohm$2, + oint: oint$2, + olarr: olarr$2, + olcir: olcir$2, + olcross: olcross$2, + oline: oline$2, + olt: olt$2, + omacr: omacr$2, + omega: omega$2, + omicron: omicron$2, + omid: omid$2, + ominus: ominus$2, + oopf: oopf$2, + opar: opar$2, + operp: operp$2, + oplus: oplus$2, + or: or$2, + orarr: orarr$2, + ord: ord$2, + order: order$2, + orderof: orderof$2, + ordf: ordf$2, + ordm: ordm$2, + origof: origof$2, + oror: oror$2, + orslope: orslope$2, + orv: orv$2, + oscr: oscr$2, + oslas: oslas$2, + oslash: oslash$2, + osol: osol$2, + otild: otild$2, + otilde: otilde$2, + otimes: otimes$2, + otimesas: otimesas$2, + oum: oum$2, + ouml: ouml$2, + ovbar: ovbar$2, + par: par$2, + para: para$2, + parallel: parallel$2, + parsim: parsim$2, + parsl: parsl$2, + part: part$2, + pcy: pcy$2, + percnt: percnt$2, + period: period$2, + permil: permil$2, + perp: perp$2, + pertenk: pertenk$2, + pfr: pfr$2, + phi: phi$2, + phiv: phiv$2, + phmmat: phmmat$2, + phone: phone$2, + pi: pi$2, + pitchfork: pitchfork$2, + piv: piv$2, + planck: planck$2, + planckh: planckh$2, + plankv: plankv$2, + plus: plus$2, + plusacir: plusacir$2, + plusb: plusb$2, + pluscir: pluscir$2, + plusdo: plusdo$2, + plusdu: plusdu$2, + pluse: pluse$2, + plusm: plusm$2, + plusmn: plusmn$2, + plussim: plussim$2, + plustwo: plustwo$2, + pm: pm$2, + pointint: pointint$2, + popf: popf$2, + poun: poun$2, + pound: pound$2, + pr: pr$2, + prE: prE$2, + prap: prap$2, + prcue: prcue$2, + pre: pre$2, + prec: prec$2, + precapprox: precapprox$2, + preccurlyeq: preccurlyeq$2, + preceq: preceq$2, + precnapprox: precnapprox$2, + precneqq: precneqq$2, + precnsim: precnsim$2, + precsim: precsim$2, + prime: prime$2, + primes: primes$2, + prnE: prnE$2, + prnap: prnap$2, + prnsim: prnsim$2, + prod: prod$2, + profalar: profalar$2, + profline: profline$2, + profsurf: profsurf$2, + prop: prop$2, + propto: propto$2, + prsim: prsim$2, + prurel: prurel$2, + pscr: pscr$2, + psi: psi$2, + puncsp: puncsp$2, + qfr: qfr$2, + qint: qint$2, + qopf: qopf$2, + qprime: qprime$2, + qscr: qscr$2, + quaternions: quaternions$2, + quatint: quatint$2, + quest: quest$2, + questeq: questeq$2, + quo: quo$2, + quot: quot$2, + rAarr: rAarr$2, + rArr: rArr$2, + rAtail: rAtail$2, + rBarr: rBarr$2, + rHar: rHar$2, + race: race$2, + racute: racute$2, + radic: radic$2, + raemptyv: raemptyv$2, + rang: rang$2, + rangd: rangd$2, + range: range$2, + rangle: rangle$2, + raqu: raqu$2, + raquo: raquo$2, + rarr: rarr$2, + rarrap: rarrap$2, + rarrb: rarrb$2, + rarrbfs: rarrbfs$2, + rarrc: rarrc$2, + rarrfs: rarrfs$2, + rarrhk: rarrhk$2, + rarrlp: rarrlp$2, + rarrpl: rarrpl$2, + rarrsim: rarrsim$2, + rarrtl: rarrtl$2, + rarrw: rarrw$2, + ratail: ratail$2, + ratio: ratio$2, + rationals: rationals$2, + rbarr: rbarr$2, + rbbrk: rbbrk$2, + rbrace: rbrace$2, + rbrack: rbrack$2, + rbrke: rbrke$2, + rbrksld: rbrksld$2, + rbrkslu: rbrkslu$2, + rcaron: rcaron$2, + rcedil: rcedil$2, + rceil: rceil$2, + rcub: rcub$2, + rcy: rcy$2, + rdca: rdca$2, + rdldhar: rdldhar$2, + rdquo: rdquo$2, + rdquor: rdquor$2, + rdsh: rdsh$2, + real: real$2, + realine: realine$2, + realpart: realpart$2, + reals: reals$2, + rect: rect$2, + re: re$6, + reg: reg$2, + rfisht: rfisht$2, + rfloor: rfloor$2, + rfr: rfr$2, + rhard: rhard$2, + rharu: rharu$2, + rharul: rharul$2, + rho: rho$2, + rhov: rhov$2, + rightarrow: rightarrow$2, + rightarrowtail: rightarrowtail$2, + rightharpoondown: rightharpoondown$2, + rightharpoonup: rightharpoonup$2, + rightleftarrows: rightleftarrows$2, + rightleftharpoons: rightleftharpoons$2, + rightrightarrows: rightrightarrows$2, + rightsquigarrow: rightsquigarrow$2, + rightthreetimes: rightthreetimes$2, + ring: ring$2, + risingdotseq: risingdotseq$2, + rlarr: rlarr$2, + rlhar: rlhar$2, + rlm: rlm$2, + rmoust: rmoust$2, + rmoustache: rmoustache$2, + rnmid: rnmid$2, + roang: roang$2, + roarr: roarr$2, + robrk: robrk$2, + ropar: ropar$2, + ropf: ropf$2, + roplus: roplus$2, + rotimes: rotimes$2, + rpar: rpar$2, + rpargt: rpargt$2, + rppolint: rppolint$2, + rrarr: rrarr$2, + rsaquo: rsaquo$2, + rscr: rscr$2, + rsh: rsh$2, + rsqb: rsqb$2, + rsquo: rsquo$2, + rsquor: rsquor$2, + rthree: rthree$2, + rtimes: rtimes$2, + rtri: rtri$2, + rtrie: rtrie$2, + rtrif: rtrif$2, + rtriltri: rtriltri$2, + ruluhar: ruluhar$2, + rx: rx$2, + sacute: sacute$2, + sbquo: sbquo$2, + sc: sc$2, + scE: scE$2, + scap: scap$2, + scaron: scaron$2, + sccue: sccue$2, + sce: sce$2, + scedil: scedil$2, + scirc: scirc$2, + scnE: scnE$2, + scnap: scnap$2, + scnsim: scnsim$2, + scpolint: scpolint$2, + scsim: scsim$2, + scy: scy$2, + sdot: sdot$2, + sdotb: sdotb$2, + sdote: sdote$2, + seArr: seArr$2, + searhk: searhk$2, + searr: searr$2, + searrow: searrow$2, + sec: sec$2, + sect: sect$2, + semi: semi$2, + seswar: seswar$2, + setminus: setminus$2, + setmn: setmn$2, + sext: sext$2, + sfr: sfr$2, + sfrown: sfrown$2, + sharp: sharp$2, + shchcy: shchcy$2, + shcy: shcy$2, + shortmid: shortmid$2, + shortparallel: shortparallel$2, + sh: sh$2, + shy: shy$2, + sigma: sigma$2, + sigmaf: sigmaf$2, + sigmav: sigmav$2, + sim: sim$2, + simdot: simdot$2, + sime: sime$2, + simeq: simeq$2, + simg: simg$2, + simgE: simgE$2, + siml: siml$2, + simlE: simlE$2, + simne: simne$2, + simplus: simplus$2, + simrarr: simrarr$2, + slarr: slarr$2, + smallsetminus: smallsetminus$2, + smashp: smashp$2, + smeparsl: smeparsl$2, + smid: smid$2, + smile: smile$2, + smt: smt$2, + smte: smte$2, + smtes: smtes$2, + softcy: softcy$2, + sol: sol$2, + solb: solb$2, + solbar: solbar$2, + sopf: sopf$2, + spades: spades$2, + spadesuit: spadesuit$2, + spar: spar$2, + sqcap: sqcap$2, + sqcaps: sqcaps$2, + sqcup: sqcup$2, + sqcups: sqcups$2, + sqsub: sqsub$2, + sqsube: sqsube$2, + sqsubset: sqsubset$2, + sqsubseteq: sqsubseteq$2, + sqsup: sqsup$2, + sqsupe: sqsupe$2, + sqsupset: sqsupset$2, + sqsupseteq: sqsupseteq$2, + squ: squ$2, + square: square$2, + squarf: squarf$2, + squf: squf$2, + srarr: srarr$2, + sscr: sscr$2, + ssetmn: ssetmn$2, + ssmile: ssmile$2, + sstarf: sstarf$2, + star: star$2, + starf: starf$2, + straightepsilon: straightepsilon$2, + straightphi: straightphi$2, + strns: strns$2, + sub: sub$2, + subE: subE$2, + subdot: subdot$2, + sube: sube$2, + subedot: subedot$2, + submult: submult$2, + subnE: subnE$2, + subne: subne$2, + subplus: subplus$2, + subrarr: subrarr$2, + subset: subset$2, + subseteq: subseteq$2, + subseteqq: subseteqq$2, + subsetneq: subsetneq$2, + subsetneqq: subsetneqq$2, + subsim: subsim$2, + subsub: subsub$2, + subsup: subsup$2, + succ: succ$2, + succapprox: succapprox$2, + succcurlyeq: succcurlyeq$2, + succeq: succeq$2, + succnapprox: succnapprox$2, + succneqq: succneqq$2, + succnsim: succnsim$2, + succsim: succsim$2, + sum: sum$2, + sung: sung$2, + sup: sup$2, + sup1: sup1$2, + sup2: sup2$2, + sup3: sup3$2, + supE: supE$2, + supdot: supdot$2, + supdsub: supdsub$2, + supe: supe$2, + supedot: supedot$2, + suphsol: suphsol$2, + suphsub: suphsub$2, + suplarr: suplarr$2, + supmult: supmult$2, + supnE: supnE$2, + supne: supne$2, + supplus: supplus$2, + supset: supset$2, + supseteq: supseteq$2, + supseteqq: supseteqq$2, + supsetneq: supsetneq$2, + supsetneqq: supsetneqq$2, + supsim: supsim$2, + supsub: supsub$2, + supsup: supsup$2, + swArr: swArr$2, + swarhk: swarhk$2, + swarr: swarr$2, + swarrow: swarrow$2, + swnwar: swnwar$2, + szli: szli$2, + szlig: szlig$2, + target: target$2, + tau: tau$2, + tbrk: tbrk$2, + tcaron: tcaron$2, + tcedil: tcedil$2, + tcy: tcy$2, + tdot: tdot$2, + telrec: telrec$2, + tfr: tfr$2, + there4: there4$2, + therefore: therefore$2, + theta: theta$2, + thetasym: thetasym$2, + thetav: thetav$2, + thickapprox: thickapprox$2, + thicksim: thicksim$2, + thinsp: thinsp$2, + thkap: thkap$2, + thksim: thksim$2, + thor: thor$2, + thorn: thorn$2, + tilde: tilde$2, + time: time$2, + times: times$2, + timesb: timesb$2, + timesbar: timesbar$2, + timesd: timesd$2, + tint: tint$2, + toea: toea$2, + top: top$2, + topbot: topbot$2, + topcir: topcir$2, + topf: topf$2, + topfork: topfork$2, + tosa: tosa$2, + tprime: tprime$2, + trade: trade$2, + triangle: triangle$2, + triangledown: triangledown$2, + triangleleft: triangleleft$2, + trianglelefteq: trianglelefteq$2, + triangleq: triangleq$2, + triangleright: triangleright$2, + trianglerighteq: trianglerighteq$2, + tridot: tridot$2, + trie: trie$2, + triminus: triminus$2, + triplus: triplus$2, + trisb: trisb$2, + tritime: tritime$2, + trpezium: trpezium$2, + tscr: tscr$2, + tscy: tscy$2, + tshcy: tshcy$2, + tstrok: tstrok$2, + twixt: twixt$2, + twoheadleftarrow: twoheadleftarrow$2, + twoheadrightarrow: twoheadrightarrow$2, + uArr: uArr$2, + uHar: uHar$2, + uacut: uacut$2, + uacute: uacute$2, + uarr: uarr$2, + ubrcy: ubrcy$2, + ubreve: ubreve$2, + ucir: ucir$2, + ucirc: ucirc$2, + ucy: ucy$2, + udarr: udarr$2, + udblac: udblac$2, + udhar: udhar$2, + ufisht: ufisht$2, + ufr: ufr$2, + ugrav: ugrav$2, + ugrave: ugrave$2, + uharl: uharl$2, + uharr: uharr$2, + uhblk: uhblk$2, + ulcorn: ulcorn$2, + ulcorner: ulcorner$2, + ulcrop: ulcrop$2, + ultri: ultri$2, + umacr: umacr$2, + um: um$2, + uml: uml$2, + uogon: uogon$2, + uopf: uopf$2, + uparrow: uparrow$2, + updownarrow: updownarrow$2, + upharpoonleft: upharpoonleft$2, + upharpoonright: upharpoonright$2, + uplus: uplus$2, + upsi: upsi$2, + upsih: upsih$2, + upsilon: upsilon$2, + upuparrows: upuparrows$2, + urcorn: urcorn$2, + urcorner: urcorner$2, + urcrop: urcrop$2, + uring: uring$2, + urtri: urtri$2, + uscr: uscr$2, + utdot: utdot$2, + utilde: utilde$2, + utri: utri$2, + utrif: utrif$2, + uuarr: uuarr$2, + uum: uum$2, + uuml: uuml$2, + uwangle: uwangle$2, + vArr: vArr$2, + vBar: vBar$2, + vBarv: vBarv$2, + vDash: vDash$2, + vangrt: vangrt$2, + varepsilon: varepsilon$2, + varkappa: varkappa$2, + varnothing: varnothing$2, + varphi: varphi$2, + varpi: varpi$2, + varpropto: varpropto$2, + varr: varr$2, + varrho: varrho$2, + varsigma: varsigma$2, + varsubsetneq: varsubsetneq$2, + varsubsetneqq: varsubsetneqq$2, + varsupsetneq: varsupsetneq$2, + varsupsetneqq: varsupsetneqq$2, + vartheta: vartheta$2, + vartriangleleft: vartriangleleft$2, + vartriangleright: vartriangleright$2, + vcy: vcy$2, + vdash: vdash$2, + vee: vee$2, + veebar: veebar$2, + veeeq: veeeq$2, + vellip: vellip$2, + verbar: verbar$2, + vert: vert$2, + vfr: vfr$2, + vltri: vltri$2, + vnsub: vnsub$2, + vnsup: vnsup$2, + vopf: vopf$2, + vprop: vprop$2, + vrtri: vrtri$2, + vscr: vscr$2, + vsubnE: vsubnE$2, + vsubne: vsubne$2, + vsupnE: vsupnE$2, + vsupne: vsupne$2, + vzigzag: vzigzag$2, + wcirc: wcirc$2, + wedbar: wedbar$2, + wedge: wedge$2, + wedgeq: wedgeq$2, + weierp: weierp$2, + wfr: wfr$2, + wopf: wopf$2, + wp: wp$2, + wr: wr$2, + wreath: wreath$2, + wscr: wscr$2, + xcap: xcap$2, + xcirc: xcirc$2, + xcup: xcup$2, + xdtri: xdtri$2, + xfr: xfr$2, + xhArr: xhArr$2, + xharr: xharr$2, + xi: xi$2, + xlArr: xlArr$2, + xlarr: xlarr$2, + xmap: xmap$2, + xnis: xnis$2, + xodot: xodot$2, + xopf: xopf$2, + xoplus: xoplus$2, + xotime: xotime$2, + xrArr: xrArr$2, + xrarr: xrarr$2, + xscr: xscr$2, + xsqcup: xsqcup$2, + xuplus: xuplus$2, + xutri: xutri$2, + xvee: xvee$2, + xwedge: xwedge$2, + yacut: yacut$2, + yacute: yacute$2, + yacy: yacy$2, + ycirc: ycirc$2, + ycy: ycy$2, + ye: ye$2, + yen: yen$2, + yfr: yfr$2, + yicy: yicy$2, + yopf: yopf$2, + yscr: yscr$2, + yucy: yucy$2, + yum: yum$2, + yuml: yuml$2, + zacute: zacute$2, + zcaron: zcaron$2, + zcy: zcy$2, + zdot: zdot$2, + zeetrf: zeetrf$2, + zeta: zeta$2, + zfr: zfr$2, + zhcy: zhcy$2, + zigrarr: zigrarr$2, + zopf: zopf$2, + zscr: zscr$2, + zwj: zwj$2, + zwnj: zwnj$2 +}; -const AEli = "Æ"; -const AElig = "Æ"; -const AM = "&"; -const AMP = "&"; -const Aacut = "Á"; -const Aacute = "Á"; -const Abreve = "Ă"; -const Acir = "Â"; -const Acirc = "Â"; -const Acy = "А"; -const Afr = "𝔄"; -const Agrav = "À"; -const Agrave = "À"; -const Alpha = "Α"; -const Amacr = "Ā"; -const And = "⩓"; -const Aogon = "Ą"; -const Aopf = "𝔸"; -const ApplyFunction = "⁡"; -const Arin = "Å"; -const Aring = "Å"; -const Ascr = "𝒜"; -const Assign = "≔"; -const Atild = "Ã"; -const Atilde = "Ã"; -const Aum = "Ä"; -const Auml = "Ä"; -const Backslash = "∖"; -const Barv = "⫧"; -const Barwed = "⌆"; -const Bcy = "Б"; -const Because = "∵"; -const Bernoullis = "ℬ"; -const Beta = "Β"; -const Bfr = "𝔅"; -const Bopf = "𝔹"; -const Breve = "˘"; -const Bscr = "ℬ"; -const Bumpeq = "≎"; -const CHcy = "Ч"; -const COP = "©"; -const COPY = "©"; -const Cacute = "Ć"; -const Cap = "⋒"; -const CapitalDifferentialD = "ⅅ"; -const Cayleys = "ℭ"; -const Ccaron = "Č"; -const Ccedi = "Ç"; -const Ccedil = "Ç"; -const Ccirc = "Ĉ"; -const Cconint = "∰"; -const Cdot = "Ċ"; -const Cedilla = "¸"; -const CenterDot = "·"; -const Cfr = "ℭ"; -const Chi = "Χ"; -const CircleDot = "⊙"; -const CircleMinus = "⊖"; -const CirclePlus = "⊕"; -const CircleTimes = "⊗"; -const ClockwiseContourIntegral = "∲"; -const CloseCurlyDoubleQuote = "”"; -const CloseCurlyQuote = "’"; -const Colon = "∷"; -const Colone = "⩴"; -const Congruent = "≡"; -const Conint = "∯"; -const ContourIntegral = "∮"; -const Copf = "ℂ"; -const Coproduct = "∐"; -const CounterClockwiseContourIntegral = "∳"; -const Cross = "⨯"; -const Cscr = "𝒞"; -const Cup = "⋓"; -const CupCap = "≍"; -const DD = "ⅅ"; -const DDotrahd = "⤑"; -const DJcy = "Ђ"; -const DScy = "Ѕ"; -const DZcy = "Џ"; -const Dagger = "‡"; -const Darr = "↡"; -const Dashv = "⫤"; -const Dcaron = "Ď"; -const Dcy = "Д"; -const Del = "∇"; -const Delta = "Δ"; -const Dfr = "𝔇"; -const DiacriticalAcute = "´"; -const DiacriticalDot = "˙"; -const DiacriticalDoubleAcute = "˝"; -const DiacriticalGrave = "`"; -const DiacriticalTilde = "˜"; -const Diamond = "⋄"; -const DifferentialD = "ⅆ"; -const Dopf = "𝔻"; -const Dot = "¨"; -const DotDot = "⃜"; -const DotEqual = "≐"; -const DoubleContourIntegral = "∯"; -const DoubleDot = "¨"; -const DoubleDownArrow = "⇓"; -const DoubleLeftArrow = "⇐"; -const DoubleLeftRightArrow = "⇔"; -const DoubleLeftTee = "⫤"; -const DoubleLongLeftArrow = "⟸"; -const DoubleLongLeftRightArrow = "⟺"; -const DoubleLongRightArrow = "⟹"; -const DoubleRightArrow = "⇒"; -const DoubleRightTee = "⊨"; -const DoubleUpArrow = "⇑"; -const DoubleUpDownArrow = "⇕"; -const DoubleVerticalBar = "∥"; -const DownArrow = "↓"; -const DownArrowBar = "⤓"; -const DownArrowUpArrow = "⇵"; -const DownBreve = "̑"; -const DownLeftRightVector = "⥐"; -const DownLeftTeeVector = "⥞"; -const DownLeftVector = "↽"; -const DownLeftVectorBar = "⥖"; -const DownRightTeeVector = "⥟"; -const DownRightVector = "⇁"; -const DownRightVectorBar = "⥗"; -const DownTee = "⊤"; -const DownTeeArrow = "↧"; -const Downarrow = "⇓"; -const Dscr = "𝒟"; -const Dstrok = "Đ"; -const ENG = "Ŋ"; -const ET = "Ð"; -const ETH = "Ð"; -const Eacut = "É"; -const Eacute = "É"; -const Ecaron = "Ě"; -const Ecir = "Ê"; -const Ecirc = "Ê"; -const Ecy = "Э"; -const Edot = "Ė"; -const Efr = "𝔈"; -const Egrav = "È"; -const Egrave = "È"; -const Element = "∈"; -const Emacr = "Ē"; -const EmptySmallSquare = "◻"; -const EmptyVerySmallSquare = "▫"; -const Eogon = "Ę"; -const Eopf = "𝔼"; -const Epsilon = "Ε"; -const Equal = "⩵"; -const EqualTilde = "≂"; -const Equilibrium = "⇌"; -const Escr = "ℰ"; -const Esim = "⩳"; -const Eta = "Η"; -const Eum = "Ë"; -const Euml = "Ë"; -const Exists = "∃"; -const ExponentialE = "ⅇ"; -const Fcy = "Ф"; -const Ffr = "𝔉"; -const FilledSmallSquare = "◼"; -const FilledVerySmallSquare = "▪"; -const Fopf = "𝔽"; -const ForAll = "∀"; -const Fouriertrf = "ℱ"; -const Fscr = "ℱ"; -const GJcy = "Ѓ"; -const G = ">"; -const GT = ">"; -const Gamma = "Γ"; -const Gammad = "Ϝ"; -const Gbreve = "Ğ"; -const Gcedil = "Ģ"; -const Gcirc = "Ĝ"; -const Gcy = "Г"; -const Gdot = "Ġ"; -const Gfr = "𝔊"; -const Gg = "⋙"; -const Gopf = "𝔾"; -const GreaterEqual = "≥"; -const GreaterEqualLess = "⋛"; -const GreaterFullEqual = "≧"; -const GreaterGreater = "⪢"; -const GreaterLess = "≷"; -const GreaterSlantEqual = "⩾"; -const GreaterTilde = "≳"; -const Gscr = "𝒢"; -const Gt = "≫"; -const HARDcy = "Ъ"; -const Hacek = "ˇ"; -const Hat = "^"; -const Hcirc = "Ĥ"; -const Hfr = "ℌ"; -const HilbertSpace = "ℋ"; -const Hopf = "ℍ"; -const HorizontalLine = "─"; -const Hscr = "ℋ"; -const Hstrok = "Ħ"; -const HumpDownHump = "≎"; -const HumpEqual = "≏"; -const IEcy = "Е"; -const IJlig = "IJ"; -const IOcy = "Ё"; -const Iacut = "Í"; -const Iacute = "Í"; -const Icir = "Î"; -const Icirc = "Î"; -const Icy = "И"; -const Idot = "İ"; -const Ifr = "ℑ"; -const Igrav = "Ì"; -const Igrave = "Ì"; -const Im = "ℑ"; -const Imacr = "Ī"; -const ImaginaryI = "ⅈ"; -const Implies = "⇒"; -const Int = "∬"; -const Integral = "∫"; -const Intersection = "⋂"; -const InvisibleComma = "⁣"; -const InvisibleTimes = "⁢"; -const Iogon = "Į"; -const Iopf = "𝕀"; -const Iota = "Ι"; -const Iscr = "ℐ"; -const Itilde = "Ĩ"; -const Iukcy = "І"; -const Ium = "Ï"; -const Iuml = "Ï"; -const Jcirc = "Ĵ"; -const Jcy = "Й"; -const Jfr = "𝔍"; -const Jopf = "𝕁"; -const Jscr = "𝒥"; -const Jsercy = "Ј"; -const Jukcy = "Є"; -const KHcy = "Х"; -const KJcy = "Ќ"; -const Kappa = "Κ"; -const Kcedil = "Ķ"; -const Kcy = "К"; -const Kfr = "𝔎"; -const Kopf = "𝕂"; -const Kscr = "𝒦"; -const LJcy = "Љ"; -const L = "<"; -const LT = "<"; -const Lacute = "Ĺ"; -const Lambda = "Λ"; -const Lang = "⟪"; -const Laplacetrf = "ℒ"; -const Larr = "↞"; -const Lcaron = "Ľ"; -const Lcedil = "Ļ"; -const Lcy = "Л"; -const LeftAngleBracket = "⟨"; -const LeftArrow = "←"; -const LeftArrowBar = "⇤"; -const LeftArrowRightArrow = "⇆"; -const LeftCeiling = "⌈"; -const LeftDoubleBracket = "⟦"; -const LeftDownTeeVector = "⥡"; -const LeftDownVector = "⇃"; -const LeftDownVectorBar = "⥙"; -const LeftFloor = "⌊"; -const LeftRightArrow = "↔"; -const LeftRightVector = "⥎"; -const LeftTee = "⊣"; -const LeftTeeArrow = "↤"; -const LeftTeeVector = "⥚"; -const LeftTriangle = "⊲"; -const LeftTriangleBar = "⧏"; -const LeftTriangleEqual = "⊴"; -const LeftUpDownVector = "⥑"; -const LeftUpTeeVector = "⥠"; -const LeftUpVector = "↿"; -const LeftUpVectorBar = "⥘"; -const LeftVector = "↼"; -const LeftVectorBar = "⥒"; -const Leftarrow = "⇐"; -const Leftrightarrow = "⇔"; -const LessEqualGreater = "⋚"; -const LessFullEqual = "≦"; -const LessGreater = "≶"; -const LessLess = "⪡"; -const LessSlantEqual = "⩽"; -const LessTilde = "≲"; -const Lfr = "𝔏"; -const Ll = "⋘"; -const Lleftarrow = "⇚"; -const Lmidot = "Ŀ"; -const LongLeftArrow = "⟵"; -const LongLeftRightArrow = "⟷"; -const LongRightArrow = "⟶"; -const Longleftarrow = "⟸"; -const Longleftrightarrow = "⟺"; -const Longrightarrow = "⟹"; -const Lopf = "𝕃"; -const LowerLeftArrow = "↙"; -const LowerRightArrow = "↘"; -const Lscr = "ℒ"; -const Lsh = "↰"; -const Lstrok = "Ł"; -const Lt = "≪"; -const Mcy = "М"; -const MediumSpace = " "; -const Mellintrf = "ℳ"; -const Mfr = "𝔐"; -const MinusPlus = "∓"; -const Mopf = "𝕄"; -const Mscr = "ℳ"; -const Mu = "Μ"; -const NJcy = "Њ"; -const Nacute = "Ń"; -const Ncaron = "Ň"; -const Ncedil = "Ņ"; -const Ncy = "Н"; -const NegativeMediumSpace = "​"; -const NegativeThickSpace = "​"; -const NegativeThinSpace = "​"; -const NegativeVeryThinSpace = "​"; -const NestedGreaterGreater = "≫"; -const NestedLessLess = "≪"; -const NewLine = "\n"; -const Nfr = "𝔑"; -const NoBreak = "⁠"; -const NonBreakingSpace = " "; -const Nopf = "ℕ"; -const Not = "⫬"; -const NotCongruent = "≢"; -const NotCupCap = "≭"; -const NotDoubleVerticalBar = "∦"; -const NotElement = "∉"; -const NotEqual = "≠"; -const NotEqualTilde = "≂̸"; -const NotExists = "∄"; -const NotGreater = "≯"; -const NotGreaterEqual = "≱"; -const NotGreaterFullEqual = "≧̸"; -const NotGreaterGreater = "≫̸"; -const NotGreaterLess = "≹"; -const NotGreaterSlantEqual = "⩾̸"; -const NotGreaterTilde = "≵"; -const NotHumpDownHump = "≎̸"; -const NotHumpEqual = "≏̸"; -const NotLeftTriangle = "⋪"; -const NotLeftTriangleBar = "⧏̸"; -const NotLeftTriangleEqual = "⋬"; -const NotLess = "≮"; -const NotLessEqual = "≰"; -const NotLessGreater = "≸"; -const NotLessLess = "≪̸"; -const NotLessSlantEqual = "⩽̸"; -const NotLessTilde = "≴"; -const NotNestedGreaterGreater = "⪢̸"; -const NotNestedLessLess = "⪡̸"; -const NotPrecedes = "⊀"; -const NotPrecedesEqual = "⪯̸"; -const NotPrecedesSlantEqual = "⋠"; -const NotReverseElement = "∌"; -const NotRightTriangle = "⋫"; -const NotRightTriangleBar = "⧐̸"; -const NotRightTriangleEqual = "⋭"; -const NotSquareSubset = "⊏̸"; -const NotSquareSubsetEqual = "⋢"; -const NotSquareSuperset = "⊐̸"; -const NotSquareSupersetEqual = "⋣"; -const NotSubset = "⊂⃒"; -const NotSubsetEqual = "⊈"; -const NotSucceeds = "⊁"; -const NotSucceedsEqual = "⪰̸"; -const NotSucceedsSlantEqual = "⋡"; -const NotSucceedsTilde = "≿̸"; -const NotSuperset = "⊃⃒"; -const NotSupersetEqual = "⊉"; -const NotTilde = "≁"; -const NotTildeEqual = "≄"; -const NotTildeFullEqual = "≇"; -const NotTildeTilde = "≉"; -const NotVerticalBar = "∤"; -const Nscr = "𝒩"; -const Ntild = "Ñ"; -const Ntilde = "Ñ"; -const Nu = "Ν"; -const OElig = "Œ"; -const Oacut = "Ó"; -const Oacute = "Ó"; -const Ocir = "Ô"; -const Ocirc = "Ô"; -const Ocy = "О"; -const Odblac = "Ő"; -const Ofr = "𝔒"; -const Ograv = "Ò"; -const Ograve = "Ò"; -const Omacr = "Ō"; -const Omega = "Ω"; -const Omicron = "Ο"; -const Oopf = "𝕆"; -const OpenCurlyDoubleQuote = "“"; -const OpenCurlyQuote = "‘"; -const Or = "⩔"; -const Oscr = "𝒪"; -const Oslas = "Ø"; -const Oslash = "Ø"; -const Otild = "Õ"; -const Otilde = "Õ"; -const Otimes = "⨷"; -const Oum = "Ö"; -const Ouml = "Ö"; -const OverBar = "‾"; -const OverBrace = "⏞"; -const OverBracket = "⎴"; -const OverParenthesis = "⏜"; -const PartialD = "∂"; -const Pcy = "П"; -const Pfr = "𝔓"; -const Phi = "Φ"; -const Pi = "Π"; -const PlusMinus = "±"; -const Poincareplane = "ℌ"; -const Popf = "ℙ"; -const Pr = "⪻"; -const Precedes = "≺"; -const PrecedesEqual = "⪯"; -const PrecedesSlantEqual = "≼"; -const PrecedesTilde = "≾"; -const Prime = "″"; -const Product = "∏"; -const Proportion = "∷"; -const Proportional = "∝"; -const Pscr = "𝒫"; -const Psi = "Ψ"; -const QUO = "\""; -const QUOT = "\""; -const Qfr = "𝔔"; -const Qopf = "ℚ"; -const Qscr = "𝒬"; -const RBarr = "⤐"; -const RE = "®"; -const REG = "®"; -const Racute = "Ŕ"; -const Rang = "⟫"; -const Rarr = "↠"; -const Rarrtl = "⤖"; -const Rcaron = "Ř"; -const Rcedil = "Ŗ"; -const Rcy = "Р"; -const Re = "ℜ"; -const ReverseElement = "∋"; -const ReverseEquilibrium = "⇋"; -const ReverseUpEquilibrium = "⥯"; -const Rfr = "ℜ"; -const Rho = "Ρ"; -const RightAngleBracket = "⟩"; -const RightArrow = "→"; -const RightArrowBar = "⇥"; -const RightArrowLeftArrow = "⇄"; -const RightCeiling = "⌉"; -const RightDoubleBracket = "⟧"; -const RightDownTeeVector = "⥝"; -const RightDownVector = "⇂"; -const RightDownVectorBar = "⥕"; -const RightFloor = "⌋"; -const RightTee = "⊢"; -const RightTeeArrow = "↦"; -const RightTeeVector = "⥛"; -const RightTriangle = "⊳"; -const RightTriangleBar = "⧐"; -const RightTriangleEqual = "⊵"; -const RightUpDownVector = "⥏"; -const RightUpTeeVector = "⥜"; -const RightUpVector = "↾"; -const RightUpVectorBar = "⥔"; -const RightVector = "⇀"; -const RightVectorBar = "⥓"; -const Rightarrow = "⇒"; -const Ropf = "ℝ"; -const RoundImplies = "⥰"; -const Rrightarrow = "⇛"; -const Rscr = "ℛ"; -const Rsh = "↱"; -const RuleDelayed = "⧴"; -const SHCHcy = "Щ"; -const SHcy = "Ш"; -const SOFTcy = "Ь"; -const Sacute = "Ś"; -const Sc = "⪼"; -const Scaron = "Š"; -const Scedil = "Ş"; -const Scirc = "Ŝ"; -const Scy = "С"; -const Sfr = "𝔖"; -const ShortDownArrow = "↓"; -const ShortLeftArrow = "←"; -const ShortRightArrow = "→"; -const ShortUpArrow = "↑"; -const Sigma = "Σ"; -const SmallCircle = "∘"; -const Sopf = "𝕊"; -const Sqrt = "√"; -const Square = "□"; -const SquareIntersection = "⊓"; -const SquareSubset = "⊏"; -const SquareSubsetEqual = "⊑"; -const SquareSuperset = "⊐"; -const SquareSupersetEqual = "⊒"; -const SquareUnion = "⊔"; -const Sscr = "𝒮"; -const Star = "⋆"; -const Sub = "⋐"; -const Subset = "⋐"; -const SubsetEqual = "⊆"; -const Succeeds = "≻"; -const SucceedsEqual = "⪰"; -const SucceedsSlantEqual = "≽"; -const SucceedsTilde = "≿"; -const SuchThat = "∋"; -const Sum = "∑"; -const Sup = "⋑"; -const Superset = "⊃"; -const SupersetEqual = "⊇"; -const Supset = "⋑"; -const THOR = "Þ"; -const THORN = "Þ"; -const TRADE = "™"; -const TSHcy = "Ћ"; -const TScy = "Ц"; -const Tab = "\t"; -const Tau = "Τ"; -const Tcaron = "Ť"; -const Tcedil = "Ţ"; -const Tcy = "Т"; -const Tfr = "𝔗"; -const Therefore = "∴"; -const Theta = "Θ"; -const ThickSpace = "  "; -const ThinSpace = " "; -const Tilde = "∼"; -const TildeEqual = "≃"; -const TildeFullEqual = "≅"; -const TildeTilde = "≈"; -const Topf = "𝕋"; -const TripleDot = "⃛"; -const Tscr = "𝒯"; -const Tstrok = "Ŧ"; -const Uacut = "Ú"; -const Uacute = "Ú"; -const Uarr = "↟"; -const Uarrocir = "⥉"; -const Ubrcy = "Ў"; -const Ubreve = "Ŭ"; -const Ucir = "Û"; -const Ucirc = "Û"; -const Ucy = "У"; -const Udblac = "Ű"; -const Ufr = "𝔘"; -const Ugrav = "Ù"; -const Ugrave = "Ù"; -const Umacr = "Ū"; -const UnderBar = "_"; -const UnderBrace = "⏟"; -const UnderBracket = "⎵"; -const UnderParenthesis = "⏝"; -const Union = "⋃"; -const UnionPlus = "⊎"; -const Uogon = "Ų"; -const Uopf = "𝕌"; -const UpArrow = "↑"; -const UpArrowBar = "⤒"; -const UpArrowDownArrow = "⇅"; -const UpDownArrow = "↕"; -const UpEquilibrium = "⥮"; -const UpTee = "⊥"; -const UpTeeArrow = "↥"; -const Uparrow = "⇑"; -const Updownarrow = "⇕"; -const UpperLeftArrow = "↖"; -const UpperRightArrow = "↗"; -const Upsi = "ϒ"; -const Upsilon = "Υ"; -const Uring = "Ů"; -const Uscr = "𝒰"; -const Utilde = "Ũ"; -const Uum = "Ü"; -const Uuml = "Ü"; -const VDash = "⊫"; -const Vbar = "⫫"; -const Vcy = "В"; -const Vdash = "⊩"; -const Vdashl = "⫦"; -const Vee = "⋁"; -const Verbar = "‖"; -const Vert = "‖"; -const VerticalBar = "∣"; -const VerticalLine = "|"; -const VerticalSeparator = "❘"; -const VerticalTilde = "≀"; -const VeryThinSpace = " "; -const Vfr = "𝔙"; -const Vopf = "𝕍"; -const Vscr = "𝒱"; -const Vvdash = "⊪"; -const Wcirc = "Ŵ"; -const Wedge = "⋀"; -const Wfr = "𝔚"; -const Wopf = "𝕎"; -const Wscr = "𝒲"; -const Xfr = "𝔛"; -const Xi = "Ξ"; -const Xopf = "𝕏"; -const Xscr = "𝒳"; -const YAcy = "Я"; -const YIcy = "Ї"; -const YUcy = "Ю"; -const Yacut = "Ý"; -const Yacute = "Ý"; -const Ycirc = "Ŷ"; -const Ycy = "Ы"; -const Yfr = "𝔜"; -const Yopf = "𝕐"; -const Yscr = "𝒴"; -const Yuml = "Ÿ"; -const ZHcy = "Ж"; -const Zacute = "Ź"; -const Zcaron = "Ž"; -const Zcy = "З"; -const Zdot = "Ż"; -const ZeroWidthSpace = "​"; -const Zeta = "Ζ"; -const Zfr = "ℨ"; -const Zopf = "ℤ"; -const Zscr = "𝒵"; -const aacut = "á"; -const aacute = "á"; -const abreve = "ă"; -const ac = "∾"; -const acE = "∾̳"; -const acd = "∿"; -const acir = "â"; -const acirc = "â"; -const acut = "´"; -const acute = "´"; -const acy = "а"; -const aeli = "æ"; -const aelig = "æ"; -const af = "⁡"; -const afr = "𝔞"; -const agrav = "à"; -const agrave = "à"; -const alefsym = "ℵ"; -const aleph = "ℵ"; -const alpha = "α"; -const amacr = "ā"; -const amalg = "⨿"; -const am = "&"; -const amp = "&"; -const and = "∧"; -const andand = "⩕"; -const andd = "⩜"; -const andslope = "⩘"; -const andv = "⩚"; -const ang = "∠"; -const ange = "⦤"; -const angle = "∠"; -const angmsd = "∡"; -const angmsdaa = "⦨"; -const angmsdab = "⦩"; -const angmsdac = "⦪"; -const angmsdad = "⦫"; -const angmsdae = "⦬"; -const angmsdaf = "⦭"; -const angmsdag = "⦮"; -const angmsdah = "⦯"; -const angrt = "∟"; -const angrtvb = "⊾"; -const angrtvbd = "⦝"; -const angsph = "∢"; -const angst = "Å"; -const angzarr = "⍼"; -const aogon = "ą"; -const aopf = "𝕒"; -const ap = "≈"; -const apE = "⩰"; -const apacir = "⩯"; -const ape = "≊"; -const apid = "≋"; -const apos = "'"; -const approx = "≈"; -const approxeq = "≊"; -const arin = "å"; -const aring = "å"; -const ascr = "𝒶"; -const ast = "*"; -const asymp = "≈"; -const asympeq = "≍"; -const atild = "ã"; -const atilde = "ã"; -const aum = "ä"; -const auml = "ä"; -const awconint = "∳"; -const awint = "⨑"; -const bNot = "⫭"; -const backcong = "≌"; -const backepsilon = "϶"; -const backprime = "‵"; -const backsim = "∽"; -const backsimeq = "⋍"; -const barvee = "⊽"; -const barwed = "⌅"; -const barwedge = "⌅"; -const bbrk = "⎵"; -const bbrktbrk = "⎶"; -const bcong = "≌"; -const bcy = "б"; -const bdquo = "„"; -const becaus = "∵"; -const because = "∵"; -const bemptyv = "⦰"; -const bepsi = "϶"; -const bernou = "ℬ"; -const beta = "β"; -const beth = "ℶ"; -const between = "≬"; -const bfr = "𝔟"; -const bigcap = "⋂"; -const bigcirc = "◯"; -const bigcup = "⋃"; -const bigodot = "⨀"; -const bigoplus = "⨁"; -const bigotimes = "⨂"; -const bigsqcup = "⨆"; -const bigstar = "★"; -const bigtriangledown = "▽"; -const bigtriangleup = "△"; -const biguplus = "⨄"; -const bigvee = "⋁"; -const bigwedge = "⋀"; -const bkarow = "⤍"; -const blacklozenge = "⧫"; -const blacksquare = "▪"; -const blacktriangle = "▴"; -const blacktriangledown = "▾"; -const blacktriangleleft = "◂"; -const blacktriangleright = "▸"; -const blank = "␣"; -const blk12 = "▒"; -const blk14 = "░"; -const blk34 = "▓"; -const block = "█"; -const bne = "=⃥"; -const bnequiv = "≡⃥"; -const bnot = "⌐"; -const bopf = "𝕓"; -const bot = "⊥"; -const bottom = "⊥"; -const bowtie = "⋈"; -const boxDL = "╗"; -const boxDR = "╔"; -const boxDl = "╖"; -const boxDr = "╓"; -const boxH = "═"; -const boxHD = "╦"; -const boxHU = "╩"; -const boxHd = "╤"; -const boxHu = "╧"; -const boxUL = "╝"; -const boxUR = "╚"; -const boxUl = "╜"; -const boxUr = "╙"; -const boxV = "║"; -const boxVH = "╬"; -const boxVL = "╣"; -const boxVR = "╠"; -const boxVh = "╫"; -const boxVl = "╢"; -const boxVr = "╟"; -const boxbox = "⧉"; -const boxdL = "╕"; -const boxdR = "╒"; -const boxdl = "┐"; -const boxdr = "┌"; -const boxh = "─"; -const boxhD = "╥"; -const boxhU = "╨"; -const boxhd = "┬"; -const boxhu = "┴"; -const boxminus = "⊟"; -const boxplus = "⊞"; -const boxtimes = "⊠"; -const boxuL = "╛"; -const boxuR = "╘"; -const boxul = "┘"; -const boxur = "└"; -const boxv = "│"; -const boxvH = "╪"; -const boxvL = "╡"; -const boxvR = "╞"; -const boxvh = "┼"; -const boxvl = "┤"; -const boxvr = "├"; -const bprime = "‵"; -const breve = "˘"; -const brvba = "¦"; -const brvbar = "¦"; -const bscr = "𝒷"; -const bsemi = "⁏"; -const bsim = "∽"; -const bsime = "⋍"; -const bsol = "\\"; -const bsolb = "⧅"; -const bsolhsub = "⟈"; -const bull = "•"; -const bullet = "•"; -const bump = "≎"; -const bumpE = "⪮"; -const bumpe = "≏"; -const bumpeq = "≏"; -const cacute = "ć"; -const cap = "∩"; -const capand = "⩄"; -const capbrcup = "⩉"; -const capcap = "⩋"; -const capcup = "⩇"; -const capdot = "⩀"; -const caps = "∩︀"; -const caret = "⁁"; -const caron = "ˇ"; -const ccaps = "⩍"; -const ccaron = "č"; -const ccedi = "ç"; -const ccedil = "ç"; -const ccirc = "ĉ"; -const ccups = "⩌"; -const ccupssm = "⩐"; -const cdot = "ċ"; -const cedi = "¸"; -const cedil = "¸"; -const cemptyv = "⦲"; -const cen = "¢"; -const cent = "¢"; -const centerdot = "·"; -const cfr = "𝔠"; -const chcy = "ч"; -const check$2 = "✓"; -const checkmark = "✓"; -const chi = "χ"; -const cir = "○"; -const cirE = "⧃"; -const circ = "ˆ"; -const circeq = "≗"; -const circlearrowleft = "↺"; -const circlearrowright = "↻"; -const circledR = "®"; -const circledS = "Ⓢ"; -const circledast = "⊛"; -const circledcirc = "⊚"; -const circleddash = "⊝"; -const cire = "≗"; -const cirfnint = "⨐"; -const cirmid = "⫯"; -const cirscir = "⧂"; -const clubs = "♣"; -const clubsuit = "♣"; -const colon = ":"; -const colone = "≔"; -const coloneq = "≔"; -const comma = ","; -const commat = "@"; -const comp = "∁"; -const compfn = "∘"; -const complement = "∁"; -const complexes = "ℂ"; -const cong = "≅"; -const congdot = "⩭"; -const conint = "∮"; -const copf = "𝕔"; -const coprod = "∐"; -const cop = "©"; -const copy$1 = "©"; -const copysr = "℗"; -const crarr = "↵"; -const cross = "✗"; -const cscr = "𝒸"; -const csub = "⫏"; -const csube = "⫑"; -const csup = "⫐"; -const csupe = "⫒"; -const ctdot = "⋯"; -const cudarrl = "⤸"; -const cudarrr = "⤵"; -const cuepr = "⋞"; -const cuesc = "⋟"; -const cularr = "↶"; -const cularrp = "⤽"; -const cup = "∪"; -const cupbrcap = "⩈"; -const cupcap = "⩆"; -const cupcup = "⩊"; -const cupdot = "⊍"; -const cupor = "⩅"; -const cups = "∪︀"; -const curarr = "↷"; -const curarrm = "⤼"; -const curlyeqprec = "⋞"; -const curlyeqsucc = "⋟"; -const curlyvee = "⋎"; -const curlywedge = "⋏"; -const curre = "¤"; -const curren = "¤"; -const curvearrowleft = "↶"; -const curvearrowright = "↷"; -const cuvee = "⋎"; -const cuwed = "⋏"; -const cwconint = "∲"; -const cwint = "∱"; -const cylcty = "⌭"; -const dArr = "⇓"; -const dHar = "⥥"; -const dagger = "†"; -const daleth = "ℸ"; -const darr = "↓"; -const dash = "‐"; -const dashv = "⊣"; -const dbkarow = "⤏"; -const dblac = "˝"; -const dcaron = "ď"; -const dcy = "д"; -const dd = "ⅆ"; -const ddagger = "‡"; -const ddarr = "⇊"; -const ddotseq = "⩷"; -const de = "°"; -const deg = "°"; -const delta = "δ"; -const demptyv = "⦱"; -const dfisht = "⥿"; -const dfr = "𝔡"; -const dharl = "⇃"; -const dharr = "⇂"; -const diam = "⋄"; -const diamond = "⋄"; -const diamondsuit = "♦"; -const diams = "♦"; -const die = "¨"; -const digamma = "ϝ"; -const disin = "⋲"; -const div = "÷"; -const divid = "÷"; -const divide = "÷"; -const divideontimes = "⋇"; -const divonx = "⋇"; -const djcy = "ђ"; -const dlcorn = "⌞"; -const dlcrop = "⌍"; -const dollar = "$"; -const dopf = "𝕕"; -const dot = "˙"; -const doteq = "≐"; -const doteqdot = "≑"; -const dotminus = "∸"; -const dotplus = "∔"; -const dotsquare = "⊡"; -const doublebarwedge = "⌆"; -const downarrow = "↓"; -const downdownarrows = "⇊"; -const downharpoonleft = "⇃"; -const downharpoonright = "⇂"; -const drbkarow = "⤐"; -const drcorn = "⌟"; -const drcrop = "⌌"; -const dscr = "𝒹"; -const dscy = "ѕ"; -const dsol = "⧶"; -const dstrok = "đ"; -const dtdot = "⋱"; -const dtri = "▿"; -const dtrif = "▾"; -const duarr = "⇵"; -const duhar = "⥯"; -const dwangle = "⦦"; -const dzcy = "џ"; -const dzigrarr = "⟿"; -const eDDot = "⩷"; -const eDot = "≑"; -const eacut = "é"; -const eacute = "é"; -const easter = "⩮"; -const ecaron = "ě"; -const ecir = "ê"; -const ecirc = "ê"; -const ecolon = "≕"; -const ecy = "э"; -const edot = "ė"; -const ee = "ⅇ"; -const efDot = "≒"; -const efr = "𝔢"; -const eg = "⪚"; -const egrav = "è"; -const egrave = "è"; -const egs = "⪖"; -const egsdot = "⪘"; -const el = "⪙"; -const elinters = "⏧"; -const ell = "ℓ"; -const els = "⪕"; -const elsdot = "⪗"; -const emacr = "ē"; -const empty = "∅"; -const emptyset = "∅"; -const emptyv = "∅"; -const emsp13 = " "; -const emsp14 = " "; -const emsp = " "; -const eng = "ŋ"; -const ensp = " "; -const eogon = "ę"; -const eopf = "𝕖"; -const epar = "⋕"; -const eparsl = "⧣"; -const eplus = "⩱"; -const epsi = "ε"; -const epsilon = "ε"; -const epsiv = "ϵ"; -const eqcirc = "≖"; -const eqcolon = "≕"; -const eqsim = "≂"; -const eqslantgtr = "⪖"; -const eqslantless = "⪕"; -const equals = "="; -const equest = "≟"; -const equiv = "≡"; -const equivDD = "⩸"; -const eqvparsl = "⧥"; -const erDot = "≓"; -const erarr = "⥱"; -const escr = "ℯ"; -const esdot = "≐"; -const esim = "≂"; -const eta = "η"; -const et = "ð"; -const eth = "ð"; -const eum = "ë"; -const euml = "ë"; -const euro = "€"; -const excl = "!"; -const exist = "∃"; -const expectation = "ℰ"; -const exponentiale = "ⅇ"; -const fallingdotseq = "≒"; -const fcy = "ф"; -const female = "♀"; -const ffilig = "ffi"; -const fflig = "ff"; -const ffllig = "ffl"; -const ffr = "𝔣"; -const filig = "fi"; -const fjlig = "fj"; -const flat = "♭"; -const fllig = "fl"; -const fltns = "▱"; -const fnof = "ƒ"; -const fopf = "𝕗"; -const forall = "∀"; -const fork = "⋔"; -const forkv = "⫙"; -const fpartint = "⨍"; -const frac1 = "¼"; -const frac12 = "½"; -const frac13 = "⅓"; -const frac14 = "¼"; -const frac15 = "⅕"; -const frac16 = "⅙"; -const frac18 = "⅛"; -const frac23 = "⅔"; -const frac25 = "⅖"; -const frac3 = "¾"; -const frac34 = "¾"; -const frac35 = "⅗"; -const frac38 = "⅜"; -const frac45 = "⅘"; -const frac56 = "⅚"; -const frac58 = "⅝"; -const frac78 = "⅞"; -const frasl = "⁄"; -const frown = "⌢"; -const fscr = "𝒻"; -const gE = "≧"; -const gEl = "⪌"; -const gacute = "ǵ"; -const gamma = "γ"; -const gammad = "ϝ"; -const gap = "⪆"; -const gbreve = "ğ"; -const gcirc = "ĝ"; -const gcy = "г"; -const gdot = "ġ"; -const ge = "≥"; -const gel = "⋛"; -const geq = "≥"; -const geqq = "≧"; -const geqslant = "⩾"; -const ges = "⩾"; -const gescc = "⪩"; -const gesdot = "⪀"; -const gesdoto = "⪂"; -const gesdotol = "⪄"; -const gesl = "⋛︀"; -const gesles = "⪔"; -const gfr = "𝔤"; -const gg = "≫"; -const ggg = "⋙"; -const gimel = "ℷ"; -const gjcy = "ѓ"; -const gl = "≷"; -const glE = "⪒"; -const gla = "⪥"; -const glj = "⪤"; -const gnE = "≩"; -const gnap = "⪊"; -const gnapprox = "⪊"; -const gne = "⪈"; -const gneq = "⪈"; -const gneqq = "≩"; -const gnsim = "⋧"; -const gopf = "𝕘"; -const grave = "`"; -const gscr = "ℊ"; -const gsim = "≳"; -const gsime = "⪎"; -const gsiml = "⪐"; -const g = ">"; -const gt = ">"; -const gtcc = "⪧"; -const gtcir = "⩺"; -const gtdot = "⋗"; -const gtlPar = "⦕"; -const gtquest = "⩼"; -const gtrapprox = "⪆"; -const gtrarr = "⥸"; -const gtrdot = "⋗"; -const gtreqless = "⋛"; -const gtreqqless = "⪌"; -const gtrless = "≷"; -const gtrsim = "≳"; -const gvertneqq = "≩︀"; -const gvnE = "≩︀"; -const hArr = "⇔"; -const hairsp = " "; -const half = "½"; -const hamilt = "ℋ"; -const hardcy = "ъ"; -const harr = "↔"; -const harrcir = "⥈"; -const harrw = "↭"; -const hbar = "ℏ"; -const hcirc = "ĥ"; -const hearts = "♥"; -const heartsuit = "♥"; -const hellip = "…"; -const hercon = "⊹"; -const hfr = "𝔥"; -const hksearow = "⤥"; -const hkswarow = "⤦"; -const hoarr = "⇿"; -const homtht = "∻"; -const hookleftarrow = "↩"; -const hookrightarrow = "↪"; -const hopf = "𝕙"; -const horbar = "―"; -const hscr = "𝒽"; -const hslash = "ℏ"; -const hstrok = "ħ"; -const hybull = "⁃"; -const hyphen = "‐"; -const iacut = "í"; -const iacute = "í"; -const ic = "⁣"; -const icir = "î"; -const icirc = "î"; -const icy = "и"; -const iecy = "е"; -const iexc = "¡"; -const iexcl = "¡"; -const iff = "⇔"; -const ifr = "𝔦"; -const igrav = "ì"; -const igrave = "ì"; -const ii = "ⅈ"; -const iiiint = "⨌"; -const iiint = "∭"; -const iinfin = "⧜"; -const iiota = "℩"; -const ijlig = "ij"; -const imacr = "ī"; -const image = "ℑ"; -const imagline = "ℐ"; -const imagpart = "ℑ"; -const imath = "ı"; -const imof = "⊷"; -const imped = "Ƶ"; -const incare = "℅"; -const infin = "∞"; -const infintie = "⧝"; -const inodot = "ı"; -const int$1 = "∫"; -const intcal = "⊺"; -const integers = "ℤ"; -const intercal = "⊺"; -const intlarhk = "⨗"; -const intprod = "⨼"; -const iocy = "ё"; -const iogon = "į"; -const iopf = "𝕚"; -const iota = "ι"; -const iprod = "⨼"; -const iques = "¿"; -const iquest = "¿"; -const iscr = "𝒾"; -const isin = "∈"; -const isinE = "⋹"; -const isindot = "⋵"; -const isins = "⋴"; -const isinsv = "⋳"; -const isinv = "∈"; -const it = "⁢"; -const itilde = "ĩ"; -const iukcy = "і"; -const ium = "ï"; -const iuml = "ï"; -const jcirc = "ĵ"; -const jcy = "й"; -const jfr = "𝔧"; -const jmath = "ȷ"; -const jopf = "𝕛"; -const jscr = "𝒿"; -const jsercy = "ј"; -const jukcy = "є"; -const kappa = "κ"; -const kappav = "ϰ"; -const kcedil = "ķ"; -const kcy = "к"; -const kfr = "𝔨"; -const kgreen = "ĸ"; -const khcy = "х"; -const kjcy = "ќ"; -const kopf = "𝕜"; -const kscr = "𝓀"; -const lAarr = "⇚"; -const lArr = "⇐"; -const lAtail = "⤛"; -const lBarr = "⤎"; -const lE = "≦"; -const lEg = "⪋"; -const lHar = "⥢"; -const lacute = "ĺ"; -const laemptyv = "⦴"; -const lagran = "ℒ"; -const lambda = "λ"; -const lang = "⟨"; -const langd = "⦑"; -const langle = "⟨"; -const lap = "⪅"; -const laqu = "«"; -const laquo = "«"; -const larr = "←"; -const larrb = "⇤"; -const larrbfs = "⤟"; -const larrfs = "⤝"; -const larrhk = "↩"; -const larrlp = "↫"; -const larrpl = "⤹"; -const larrsim = "⥳"; -const larrtl = "↢"; -const lat = "⪫"; -const latail = "⤙"; -const late = "⪭"; -const lates = "⪭︀"; -const lbarr = "⤌"; -const lbbrk = "❲"; -const lbrace = "{"; -const lbrack = "["; -const lbrke = "⦋"; -const lbrksld = "⦏"; -const lbrkslu = "⦍"; -const lcaron = "ľ"; -const lcedil = "ļ"; -const lceil = "⌈"; -const lcub = "{"; -const lcy = "л"; -const ldca = "⤶"; -const ldquo = "“"; -const ldquor = "„"; -const ldrdhar = "⥧"; -const ldrushar = "⥋"; -const ldsh = "↲"; -const le = "≤"; -const leftarrow = "←"; -const leftarrowtail = "↢"; -const leftharpoondown = "↽"; -const leftharpoonup = "↼"; -const leftleftarrows = "⇇"; -const leftrightarrow = "↔"; -const leftrightarrows = "⇆"; -const leftrightharpoons = "⇋"; -const leftrightsquigarrow = "↭"; -const leftthreetimes = "⋋"; -const leg = "⋚"; -const leq = "≤"; -const leqq = "≦"; -const leqslant = "⩽"; -const les = "⩽"; -const lescc = "⪨"; -const lesdot = "⩿"; -const lesdoto = "⪁"; -const lesdotor = "⪃"; -const lesg = "⋚︀"; -const lesges = "⪓"; -const lessapprox = "⪅"; -const lessdot = "⋖"; -const lesseqgtr = "⋚"; -const lesseqqgtr = "⪋"; -const lessgtr = "≶"; -const lesssim = "≲"; -const lfisht = "⥼"; -const lfloor = "⌊"; -const lfr = "𝔩"; -const lg = "≶"; -const lgE = "⪑"; -const lhard = "↽"; -const lharu = "↼"; -const lharul = "⥪"; -const lhblk = "▄"; -const ljcy = "љ"; -const ll = "≪"; -const llarr = "⇇"; -const llcorner = "⌞"; -const llhard = "⥫"; -const lltri = "◺"; -const lmidot = "ŀ"; -const lmoust = "⎰"; -const lmoustache = "⎰"; -const lnE = "≨"; -const lnap = "⪉"; -const lnapprox = "⪉"; -const lne = "⪇"; -const lneq = "⪇"; -const lneqq = "≨"; -const lnsim = "⋦"; -const loang = "⟬"; -const loarr = "⇽"; -const lobrk = "⟦"; -const longleftarrow = "⟵"; -const longleftrightarrow = "⟷"; -const longmapsto = "⟼"; -const longrightarrow = "⟶"; -const looparrowleft = "↫"; -const looparrowright = "↬"; -const lopar = "⦅"; -const lopf = "𝕝"; -const loplus = "⨭"; -const lotimes = "⨴"; -const lowast = "∗"; -const lowbar = "_"; -const loz = "◊"; -const lozenge = "◊"; -const lozf = "⧫"; -const lpar = "("; -const lparlt = "⦓"; -const lrarr = "⇆"; -const lrcorner = "⌟"; -const lrhar = "⇋"; -const lrhard = "⥭"; -const lrm = "‎"; -const lrtri = "⊿"; -const lsaquo = "‹"; -const lscr = "𝓁"; -const lsh = "↰"; -const lsim = "≲"; -const lsime = "⪍"; -const lsimg = "⪏"; -const lsqb = "["; -const lsquo = "‘"; -const lsquor = "‚"; -const lstrok = "ł"; -const l = "<"; -const lt = "<"; -const ltcc = "⪦"; -const ltcir = "⩹"; -const ltdot = "⋖"; -const lthree = "⋋"; -const ltimes = "⋉"; -const ltlarr = "⥶"; -const ltquest = "⩻"; -const ltrPar = "⦖"; -const ltri = "◃"; -const ltrie = "⊴"; -const ltrif = "◂"; -const lurdshar = "⥊"; -const luruhar = "⥦"; -const lvertneqq = "≨︀"; -const lvnE = "≨︀"; -const mDDot = "∺"; -const mac = "¯"; -const macr = "¯"; -const male = "♂"; -const malt = "✠"; -const maltese = "✠"; -const map$2 = "↦"; -const mapsto = "↦"; -const mapstodown = "↧"; -const mapstoleft = "↤"; -const mapstoup = "↥"; -const marker = "▮"; -const mcomma = "⨩"; -const mcy = "м"; -const mdash = "—"; -const measuredangle = "∡"; -const mfr = "𝔪"; -const mho = "℧"; -const micr = "µ"; -const micro = "µ"; -const mid = "∣"; -const midast = "*"; -const midcir = "⫰"; -const middo = "·"; -const middot = "·"; -const minus = "−"; -const minusb = "⊟"; -const minusd = "∸"; -const minusdu = "⨪"; -const mlcp = "⫛"; -const mldr = "…"; -const mnplus = "∓"; -const models$2 = "⊧"; -const mopf = "𝕞"; -const mp = "∓"; -const mscr = "𝓂"; -const mstpos = "∾"; -const mu = "μ"; -const multimap = "⊸"; -const mumap = "⊸"; -const nGg = "⋙̸"; -const nGt = "≫⃒"; -const nGtv = "≫̸"; -const nLeftarrow = "⇍"; -const nLeftrightarrow = "⇎"; -const nLl = "⋘̸"; -const nLt = "≪⃒"; -const nLtv = "≪̸"; -const nRightarrow = "⇏"; -const nVDash = "⊯"; -const nVdash = "⊮"; -const nabla = "∇"; -const nacute = "ń"; -const nang = "∠⃒"; -const nap = "≉"; -const napE = "⩰̸"; -const napid = "≋̸"; -const napos = "ʼn"; -const napprox = "≉"; -const natur = "♮"; -const natural = "♮"; -const naturals = "ℕ"; -const nbs = " "; -const nbsp = " "; -const nbump = "≎̸"; -const nbumpe = "≏̸"; -const ncap = "⩃"; -const ncaron = "ň"; -const ncedil = "ņ"; -const ncong = "≇"; -const ncongdot = "⩭̸"; -const ncup = "⩂"; -const ncy = "н"; -const ndash = "–"; -const ne = "≠"; -const neArr = "⇗"; -const nearhk = "⤤"; -const nearr = "↗"; -const nearrow = "↗"; -const nedot = "≐̸"; -const nequiv = "≢"; -const nesear = "⤨"; -const nesim = "≂̸"; -const nexist = "∄"; -const nexists = "∄"; -const nfr = "𝔫"; -const ngE = "≧̸"; -const nge = "≱"; -const ngeq = "≱"; -const ngeqq = "≧̸"; -const ngeqslant = "⩾̸"; -const nges = "⩾̸"; -const ngsim = "≵"; -const ngt = "≯"; -const ngtr = "≯"; -const nhArr = "⇎"; -const nharr = "↮"; -const nhpar = "⫲"; -const ni = "∋"; -const nis = "⋼"; -const nisd = "⋺"; -const niv = "∋"; -const njcy = "њ"; -const nlArr = "⇍"; -const nlE = "≦̸"; -const nlarr = "↚"; -const nldr = "‥"; -const nle = "≰"; -const nleftarrow = "↚"; -const nleftrightarrow = "↮"; -const nleq = "≰"; -const nleqq = "≦̸"; -const nleqslant = "⩽̸"; -const nles = "⩽̸"; -const nless = "≮"; -const nlsim = "≴"; -const nlt = "≮"; -const nltri = "⋪"; -const nltrie = "⋬"; -const nmid = "∤"; -const nopf = "𝕟"; -const no = "¬"; -const not = "¬"; -const notin = "∉"; -const notinE = "⋹̸"; -const notindot = "⋵̸"; -const notinva = "∉"; -const notinvb = "⋷"; -const notinvc = "⋶"; -const notni = "∌"; -const notniva = "∌"; -const notnivb = "⋾"; -const notnivc = "⋽"; -const npar = "∦"; -const nparallel = "∦"; -const nparsl = "⫽⃥"; -const npart = "∂̸"; -const npolint = "⨔"; -const npr = "⊀"; -const nprcue = "⋠"; -const npre = "⪯̸"; -const nprec = "⊀"; -const npreceq = "⪯̸"; -const nrArr = "⇏"; -const nrarr = "↛"; -const nrarrc = "⤳̸"; -const nrarrw = "↝̸"; -const nrightarrow = "↛"; -const nrtri = "⋫"; -const nrtrie = "⋭"; -const nsc = "⊁"; -const nsccue = "⋡"; -const nsce = "⪰̸"; -const nscr = "𝓃"; -const nshortmid = "∤"; -const nshortparallel = "∦"; -const nsim = "≁"; -const nsime = "≄"; -const nsimeq = "≄"; -const nsmid = "∤"; -const nspar = "∦"; -const nsqsube = "⋢"; -const nsqsupe = "⋣"; -const nsub = "⊄"; -const nsubE = "⫅̸"; -const nsube = "⊈"; -const nsubset = "⊂⃒"; -const nsubseteq = "⊈"; -const nsubseteqq = "⫅̸"; -const nsucc = "⊁"; -const nsucceq = "⪰̸"; -const nsup = "⊅"; -const nsupE = "⫆̸"; -const nsupe = "⊉"; -const nsupset = "⊃⃒"; -const nsupseteq = "⊉"; -const nsupseteqq = "⫆̸"; -const ntgl = "≹"; -const ntild = "ñ"; -const ntilde = "ñ"; -const ntlg = "≸"; -const ntriangleleft = "⋪"; -const ntrianglelefteq = "⋬"; -const ntriangleright = "⋫"; -const ntrianglerighteq = "⋭"; -const nu = "ν"; -const num = "#"; -const numero = "№"; -const numsp = " "; -const nvDash = "⊭"; -const nvHarr = "⤄"; -const nvap = "≍⃒"; -const nvdash = "⊬"; -const nvge = "≥⃒"; -const nvgt = ">⃒"; -const nvinfin = "⧞"; -const nvlArr = "⤂"; -const nvle = "≤⃒"; -const nvlt = "<⃒"; -const nvltrie = "⊴⃒"; -const nvrArr = "⤃"; -const nvrtrie = "⊵⃒"; -const nvsim = "∼⃒"; -const nwArr = "⇖"; -const nwarhk = "⤣"; -const nwarr = "↖"; -const nwarrow = "↖"; -const nwnear = "⤧"; -const oS = "Ⓢ"; -const oacut = "ó"; -const oacute = "ó"; -const oast = "⊛"; -const ocir = "ô"; -const ocirc = "ô"; -const ocy = "о"; -const odash = "⊝"; -const odblac = "ő"; -const odiv = "⨸"; -const odot = "⊙"; -const odsold = "⦼"; -const oelig = "œ"; -const ofcir = "⦿"; -const ofr = "𝔬"; -const ogon = "˛"; -const ograv = "ò"; -const ograve = "ò"; -const ogt = "⧁"; -const ohbar = "⦵"; -const ohm = "Ω"; -const oint = "∮"; -const olarr = "↺"; -const olcir = "⦾"; -const olcross = "⦻"; -const oline = "‾"; -const olt = "⧀"; -const omacr = "ō"; -const omega = "ω"; -const omicron = "ο"; -const omid = "⦶"; -const ominus = "⊖"; -const oopf = "𝕠"; -const opar = "⦷"; -const operp = "⦹"; -const oplus = "⊕"; -const or = "∨"; -const orarr = "↻"; -const ord = "º"; -const order$1 = "ℴ"; -const orderof = "ℴ"; -const ordf = "ª"; -const ordm = "º"; -const origof = "⊶"; -const oror = "⩖"; -const orslope = "⩗"; -const orv = "⩛"; -const oscr = "ℴ"; -const oslas = "ø"; -const oslash = "ø"; -const osol = "⊘"; -const otild = "õ"; -const otilde = "õ"; -const otimes = "⊗"; -const otimesas = "⨶"; -const oum = "ö"; -const ouml = "ö"; -const ovbar = "⌽"; -const par = "¶"; -const para = "¶"; -const parallel = "∥"; -const parsim = "⫳"; -const parsl = "⫽"; -const part = "∂"; -const pcy = "п"; -const percnt = "%"; -const period = "."; -const permil = "‰"; -const perp = "⊥"; -const pertenk = "‱"; -const pfr = "𝔭"; -const phi = "φ"; -const phiv = "ϕ"; -const phmmat = "ℳ"; -const phone = "☎"; -const pi = "π"; -const pitchfork = "⋔"; -const piv = "ϖ"; -const planck = "ℏ"; -const planckh = "ℎ"; -const plankv = "ℏ"; -const plus = "+"; -const plusacir = "⨣"; -const plusb = "⊞"; -const pluscir = "⨢"; -const plusdo = "∔"; -const plusdu = "⨥"; -const pluse = "⩲"; -const plusm = "±"; -const plusmn = "±"; -const plussim = "⨦"; -const plustwo = "⨧"; -const pm = "±"; -const pointint = "⨕"; -const popf = "𝕡"; -const poun = "£"; -const pound = "£"; -const pr = "≺"; -const prE = "⪳"; -const prap = "⪷"; -const prcue = "≼"; -const pre = "⪯"; -const prec = "≺"; -const precapprox = "⪷"; -const preccurlyeq = "≼"; -const preceq = "⪯"; -const precnapprox = "⪹"; -const precneqq = "⪵"; -const precnsim = "⋨"; -const precsim = "≾"; -const prime = "′"; -const primes = "ℙ"; -const prnE = "⪵"; -const prnap = "⪹"; -const prnsim = "⋨"; -const prod = "∏"; -const profalar = "⌮"; -const profline = "⌒"; -const profsurf = "⌓"; -const prop = "∝"; -const propto = "∝"; -const prsim = "≾"; -const prurel = "⊰"; -const pscr = "𝓅"; -const psi = "ψ"; -const puncsp = " "; -const qfr = "𝔮"; -const qint = "⨌"; -const qopf = "𝕢"; -const qprime = "⁗"; -const qscr = "𝓆"; -const quaternions = "ℍ"; -const quatint = "⨖"; -const quest = "?"; -const questeq = "≟"; -const quo = "\""; -const quot = "\""; -const rAarr = "⇛"; -const rArr = "⇒"; -const rAtail = "⤜"; -const rBarr = "⤏"; -const rHar = "⥤"; -const race = "∽̱"; -const racute = "ŕ"; -const radic = "√"; -const raemptyv = "⦳"; -const rang = "⟩"; -const rangd = "⦒"; -const range$1 = "⦥"; -const rangle = "⟩"; -const raqu = "»"; -const raquo = "»"; -const rarr = "→"; -const rarrap = "⥵"; -const rarrb = "⇥"; -const rarrbfs = "⤠"; -const rarrc = "⤳"; -const rarrfs = "⤞"; -const rarrhk = "↪"; -const rarrlp = "↬"; -const rarrpl = "⥅"; -const rarrsim = "⥴"; -const rarrtl = "↣"; -const rarrw = "↝"; -const ratail = "⤚"; -const ratio = "∶"; -const rationals = "ℚ"; -const rbarr = "⤍"; -const rbbrk = "❳"; -const rbrace = "}"; -const rbrack = "]"; -const rbrke = "⦌"; -const rbrksld = "⦎"; -const rbrkslu = "⦐"; -const rcaron = "ř"; -const rcedil = "ŗ"; -const rceil = "⌉"; -const rcub = "}"; -const rcy = "р"; -const rdca = "⤷"; -const rdldhar = "⥩"; -const rdquo = "”"; -const rdquor = "”"; -const rdsh = "↳"; -const real = "ℜ"; -const realine = "ℛ"; -const realpart = "ℜ"; -const reals = "ℝ"; -const rect = "▭"; -const re = "®"; -const reg = "®"; -const rfisht = "⥽"; -const rfloor = "⌋"; -const rfr = "𝔯"; -const rhard = "⇁"; -const rharu = "⇀"; -const rharul = "⥬"; -const rho = "ρ"; -const rhov = "ϱ"; -const rightarrow = "→"; -const rightarrowtail = "↣"; -const rightharpoondown = "⇁"; -const rightharpoonup = "⇀"; -const rightleftarrows = "⇄"; -const rightleftharpoons = "⇌"; -const rightrightarrows = "⇉"; -const rightsquigarrow = "↝"; -const rightthreetimes = "⋌"; -const ring = "˚"; -const risingdotseq = "≓"; -const rlarr = "⇄"; -const rlhar = "⇌"; -const rlm = "‏"; -const rmoust = "⎱"; -const rmoustache = "⎱"; -const rnmid = "⫮"; -const roang = "⟭"; -const roarr = "⇾"; -const robrk = "⟧"; -const ropar = "⦆"; -const ropf = "𝕣"; -const roplus = "⨮"; -const rotimes = "⨵"; -const rpar = ")"; -const rpargt = "⦔"; -const rppolint = "⨒"; -const rrarr = "⇉"; -const rsaquo = "›"; -const rscr = "𝓇"; -const rsh = "↱"; -const rsqb = "]"; -const rsquo = "’"; -const rsquor = "’"; -const rthree = "⋌"; -const rtimes = "⋊"; -const rtri = "▹"; -const rtrie = "⊵"; -const rtrif = "▸"; -const rtriltri = "⧎"; -const ruluhar = "⥨"; -const rx = "℞"; -const sacute = "ś"; -const sbquo = "‚"; -const sc = "≻"; -const scE = "⪴"; -const scap = "⪸"; -const scaron = "š"; -const sccue = "≽"; -const sce = "⪰"; -const scedil = "ş"; -const scirc = "ŝ"; -const scnE = "⪶"; -const scnap = "⪺"; -const scnsim = "⋩"; -const scpolint = "⨓"; -const scsim = "≿"; -const scy = "с"; -const sdot = "⋅"; -const sdotb = "⊡"; -const sdote = "⩦"; -const seArr = "⇘"; -const searhk = "⤥"; -const searr = "↘"; -const searrow = "↘"; -const sec = "§"; -const sect = "§"; -const semi = ";"; -const seswar = "⤩"; -const setminus = "∖"; -const setmn = "∖"; -const sext = "✶"; -const sfr = "𝔰"; -const sfrown = "⌢"; -const sharp = "♯"; -const shchcy = "щ"; -const shcy = "ш"; -const shortmid = "∣"; -const shortparallel = "∥"; -const sh = "­"; -const shy = "­"; -const sigma = "σ"; -const sigmaf = "ς"; -const sigmav = "ς"; -const sim = "∼"; -const simdot = "⩪"; -const sime = "≃"; -const simeq = "≃"; -const simg = "⪞"; -const simgE = "⪠"; -const siml = "⪝"; -const simlE = "⪟"; -const simne = "≆"; -const simplus = "⨤"; -const simrarr = "⥲"; -const slarr = "←"; -const smallsetminus = "∖"; -const smashp = "⨳"; -const smeparsl = "⧤"; -const smid = "∣"; -const smile = "⌣"; -const smt = "⪪"; -const smte = "⪬"; -const smtes = "⪬︀"; -const softcy = "ь"; -const sol = "/"; -const solb = "⧄"; -const solbar = "⌿"; -const sopf = "𝕤"; -const spades = "♠"; -const spadesuit = "♠"; -const spar = "∥"; -const sqcap = "⊓"; -const sqcaps = "⊓︀"; -const sqcup = "⊔"; -const sqcups = "⊔︀"; -const sqsub = "⊏"; -const sqsube = "⊑"; -const sqsubset = "⊏"; -const sqsubseteq = "⊑"; -const sqsup = "⊐"; -const sqsupe = "⊒"; -const sqsupset = "⊐"; -const sqsupseteq = "⊒"; -const squ = "□"; -const square = "□"; -const squarf = "▪"; -const squf = "▪"; -const srarr = "→"; -const sscr = "𝓈"; -const ssetmn = "∖"; -const ssmile = "⌣"; -const sstarf = "⋆"; -const star$1 = "☆"; -const starf = "★"; -const straightepsilon = "ϵ"; -const straightphi = "ϕ"; -const strns = "¯"; -const sub = "⊂"; -const subE = "⫅"; -const subdot = "⪽"; -const sube = "⊆"; -const subedot = "⫃"; -const submult = "⫁"; -const subnE = "⫋"; -const subne = "⊊"; -const subplus = "⪿"; -const subrarr = "⥹"; -const subset = "⊂"; -const subseteq = "⊆"; -const subseteqq = "⫅"; -const subsetneq = "⊊"; -const subsetneqq = "⫋"; -const subsim = "⫇"; -const subsub = "⫕"; -const subsup = "⫓"; -const succ = "≻"; -const succapprox = "⪸"; -const succcurlyeq = "≽"; -const succeq = "⪰"; -const succnapprox = "⪺"; -const succneqq = "⪶"; -const succnsim = "⋩"; -const succsim = "≿"; -const sum = "∑"; -const sung = "♪"; -const sup = "⊃"; -const sup1 = "¹"; -const sup2 = "²"; -const sup3 = "³"; -const supE = "⫆"; -const supdot = "⪾"; -const supdsub = "⫘"; -const supe = "⊇"; -const supedot = "⫄"; -const suphsol = "⟉"; -const suphsub = "⫗"; -const suplarr = "⥻"; -const supmult = "⫂"; -const supnE = "⫌"; -const supne = "⊋"; -const supplus = "⫀"; -const supset = "⊃"; -const supseteq = "⊇"; -const supseteqq = "⫆"; -const supsetneq = "⊋"; -const supsetneqq = "⫌"; -const supsim = "⫈"; -const supsub = "⫔"; -const supsup = "⫖"; -const swArr = "⇙"; -const swarhk = "⤦"; -const swarr = "↙"; -const swarrow = "↙"; -const swnwar = "⤪"; -const szli = "ß"; -const szlig = "ß"; -const target = "⌖"; -const tau = "τ"; -const tbrk = "⎴"; -const tcaron = "ť"; -const tcedil = "ţ"; -const tcy = "т"; -const tdot = "⃛"; -const telrec = "⌕"; -const tfr = "𝔱"; -const there4 = "∴"; -const therefore = "∴"; -const theta = "θ"; -const thetasym = "ϑ"; -const thetav = "ϑ"; -const thickapprox = "≈"; -const thicksim = "∼"; -const thinsp = " "; -const thkap = "≈"; -const thksim = "∼"; -const thor = "þ"; -const thorn = "þ"; -const tilde = "˜"; -const time = "×"; -const times = "×"; -const timesb = "⊠"; -const timesbar = "⨱"; -const timesd = "⨰"; -const tint = "∭"; -const toea = "⤨"; -const top = "⊤"; -const topbot = "⌶"; -const topcir = "⫱"; -const topf = "𝕥"; -const topfork = "⫚"; -const tosa = "⤩"; -const tprime = "‴"; -const trade = "™"; -const triangle = "▵"; -const triangledown = "▿"; -const triangleleft = "◃"; -const trianglelefteq = "⊴"; -const triangleq = "≜"; -const triangleright = "▹"; -const trianglerighteq = "⊵"; -const tridot = "◬"; -const trie = "≜"; -const triminus = "⨺"; -const triplus = "⨹"; -const trisb = "⧍"; -const tritime = "⨻"; -const trpezium = "⏢"; -const tscr = "𝓉"; -const tscy = "ц"; -const tshcy = "ћ"; -const tstrok = "ŧ"; -const twixt = "≬"; -const twoheadleftarrow = "↞"; -const twoheadrightarrow = "↠"; -const uArr = "⇑"; -const uHar = "⥣"; -const uacut = "ú"; -const uacute = "ú"; -const uarr = "↑"; -const ubrcy = "ў"; -const ubreve = "ŭ"; -const ucir = "û"; -const ucirc = "û"; -const ucy = "у"; -const udarr = "⇅"; -const udblac = "ű"; -const udhar = "⥮"; -const ufisht = "⥾"; -const ufr = "𝔲"; -const ugrav = "ù"; -const ugrave = "ù"; -const uharl = "↿"; -const uharr = "↾"; -const uhblk = "▀"; -const ulcorn = "⌜"; -const ulcorner = "⌜"; -const ulcrop = "⌏"; -const ultri = "◸"; -const umacr = "ū"; -const um = "¨"; -const uml = "¨"; -const uogon = "ų"; -const uopf = "𝕦"; -const uparrow = "↑"; -const updownarrow = "↕"; -const upharpoonleft = "↿"; -const upharpoonright = "↾"; -const uplus = "⊎"; -const upsi = "υ"; -const upsih = "ϒ"; -const upsilon = "υ"; -const upuparrows = "⇈"; -const urcorn = "⌝"; -const urcorner = "⌝"; -const urcrop = "⌎"; -const uring = "ů"; -const urtri = "◹"; -const uscr = "𝓊"; -const utdot = "⋰"; -const utilde = "ũ"; -const utri = "▵"; -const utrif = "▴"; -const uuarr = "⇈"; -const uum = "ü"; -const uuml = "ü"; -const uwangle = "⦧"; -const vArr = "⇕"; -const vBar = "⫨"; -const vBarv = "⫩"; -const vDash = "⊨"; -const vangrt = "⦜"; -const varepsilon = "ϵ"; -const varkappa = "ϰ"; -const varnothing = "∅"; -const varphi = "ϕ"; -const varpi = "ϖ"; -const varpropto = "∝"; -const varr = "↕"; -const varrho = "ϱ"; -const varsigma = "ς"; -const varsubsetneq = "⊊︀"; -const varsubsetneqq = "⫋︀"; -const varsupsetneq = "⊋︀"; -const varsupsetneqq = "⫌︀"; -const vartheta = "ϑ"; -const vartriangleleft = "⊲"; -const vartriangleright = "⊳"; -const vcy = "в"; -const vdash = "⊢"; -const vee = "∨"; -const veebar = "⊻"; -const veeeq = "≚"; -const vellip = "⋮"; -const verbar = "|"; -const vert = "|"; -const vfr = "𝔳"; -const vltri = "⊲"; -const vnsub = "⊂⃒"; -const vnsup = "⊃⃒"; -const vopf = "𝕧"; -const vprop = "∝"; -const vrtri = "⊳"; -const vscr = "𝓋"; -const vsubnE = "⫋︀"; -const vsubne = "⊊︀"; -const vsupnE = "⫌︀"; -const vsupne = "⊋︀"; -const vzigzag = "⦚"; -const wcirc = "ŵ"; -const wedbar = "⩟"; -const wedge = "∧"; -const wedgeq = "≙"; -const weierp = "℘"; -const wfr = "𝔴"; -const wopf = "𝕨"; -const wp = "℘"; -const wr = "≀"; -const wreath = "≀"; -const wscr = "𝓌"; -const xcap = "⋂"; -const xcirc = "◯"; -const xcup = "⋃"; -const xdtri = "▽"; -const xfr = "𝔵"; -const xhArr = "⟺"; -const xharr = "⟷"; -const xi = "ξ"; -const xlArr = "⟸"; -const xlarr = "⟵"; -const xmap = "⟼"; -const xnis = "⋻"; -const xodot = "⨀"; -const xopf = "𝕩"; -const xoplus = "⨁"; -const xotime = "⨂"; -const xrArr = "⟹"; -const xrarr = "⟶"; -const xscr = "𝓍"; -const xsqcup = "⨆"; -const xuplus = "⨄"; -const xutri = "△"; -const xvee = "⋁"; -const xwedge = "⋀"; -const yacut = "ý"; -const yacute = "ý"; -const yacy = "я"; -const ycirc = "ŷ"; -const ycy = "ы"; -const ye = "¥"; -const yen = "¥"; -const yfr = "𝔶"; -const yicy = "ї"; -const yopf = "𝕪"; -const yscr = "𝓎"; -const yucy = "ю"; -const yum = "ÿ"; -const yuml = "ÿ"; -const zacute = "ź"; -const zcaron = "ž"; -const zcy = "з"; -const zdot = "ż"; -const zeetrf = "ℨ"; -const zeta = "ζ"; -const zfr = "𝔷"; -const zhcy = "ж"; -const zigrarr = "⇝"; -const zopf = "𝕫"; -const zscr = "𝓏"; -const zwj = "‍"; -const zwnj = "‌"; -var characterEntities = { - AEli: AEli, - AElig: AElig, - AM: AM, - AMP: AMP, - Aacut: Aacut, - Aacute: Aacute, - Abreve: Abreve, - Acir: Acir, - Acirc: Acirc, - Acy: Acy, - Afr: Afr, - Agrav: Agrav, - Agrave: Agrave, - Alpha: Alpha, - Amacr: Amacr, - And: And, - Aogon: Aogon, - Aopf: Aopf, - ApplyFunction: ApplyFunction, - Arin: Arin, - Aring: Aring, - Ascr: Ascr, - Assign: Assign, - Atild: Atild, - Atilde: Atilde, - Aum: Aum, - Auml: Auml, - Backslash: Backslash, - Barv: Barv, - Barwed: Barwed, - Bcy: Bcy, - Because: Because, - Bernoullis: Bernoullis, - Beta: Beta, - Bfr: Bfr, - Bopf: Bopf, - Breve: Breve, - Bscr: Bscr, - Bumpeq: Bumpeq, - CHcy: CHcy, - COP: COP, - COPY: COPY, - Cacute: Cacute, - Cap: Cap, - CapitalDifferentialD: CapitalDifferentialD, - Cayleys: Cayleys, - Ccaron: Ccaron, - Ccedi: Ccedi, - Ccedil: Ccedil, - Ccirc: Ccirc, - Cconint: Cconint, - Cdot: Cdot, - Cedilla: Cedilla, - CenterDot: CenterDot, - Cfr: Cfr, - Chi: Chi, - CircleDot: CircleDot, - CircleMinus: CircleMinus, - CirclePlus: CirclePlus, - CircleTimes: CircleTimes, - ClockwiseContourIntegral: ClockwiseContourIntegral, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, - CloseCurlyQuote: CloseCurlyQuote, - Colon: Colon, - Colone: Colone, - Congruent: Congruent, - Conint: Conint, - ContourIntegral: ContourIntegral, - Copf: Copf, - Coproduct: Coproduct, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, - Cross: Cross, - Cscr: Cscr, - Cup: Cup, - CupCap: CupCap, - DD: DD, - DDotrahd: DDotrahd, - DJcy: DJcy, - DScy: DScy, - DZcy: DZcy, - Dagger: Dagger, - Darr: Darr, - Dashv: Dashv, - Dcaron: Dcaron, - Dcy: Dcy, - Del: Del, - Delta: Delta, - Dfr: Dfr, - DiacriticalAcute: DiacriticalAcute, - DiacriticalDot: DiacriticalDot, - DiacriticalDoubleAcute: DiacriticalDoubleAcute, - DiacriticalGrave: DiacriticalGrave, - DiacriticalTilde: DiacriticalTilde, - Diamond: Diamond, - DifferentialD: DifferentialD, - Dopf: Dopf, - Dot: Dot, - DotDot: DotDot, - DotEqual: DotEqual, - DoubleContourIntegral: DoubleContourIntegral, - DoubleDot: DoubleDot, - DoubleDownArrow: DoubleDownArrow, - DoubleLeftArrow: DoubleLeftArrow, - DoubleLeftRightArrow: DoubleLeftRightArrow, - DoubleLeftTee: DoubleLeftTee, - DoubleLongLeftArrow: DoubleLongLeftArrow, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, - DoubleLongRightArrow: DoubleLongRightArrow, - DoubleRightArrow: DoubleRightArrow, - DoubleRightTee: DoubleRightTee, - DoubleUpArrow: DoubleUpArrow, - DoubleUpDownArrow: DoubleUpDownArrow, - DoubleVerticalBar: DoubleVerticalBar, - DownArrow: DownArrow, - DownArrowBar: DownArrowBar, - DownArrowUpArrow: DownArrowUpArrow, - DownBreve: DownBreve, - DownLeftRightVector: DownLeftRightVector, - DownLeftTeeVector: DownLeftTeeVector, - DownLeftVector: DownLeftVector, - DownLeftVectorBar: DownLeftVectorBar, - DownRightTeeVector: DownRightTeeVector, - DownRightVector: DownRightVector, - DownRightVectorBar: DownRightVectorBar, - DownTee: DownTee, - DownTeeArrow: DownTeeArrow, - Downarrow: Downarrow, - Dscr: Dscr, - Dstrok: Dstrok, - ENG: ENG, - ET: ET, - ETH: ETH, - Eacut: Eacut, - Eacute: Eacute, - Ecaron: Ecaron, - Ecir: Ecir, - Ecirc: Ecirc, - Ecy: Ecy, - Edot: Edot, - Efr: Efr, - Egrav: Egrav, - Egrave: Egrave, - Element: Element, - Emacr: Emacr, - EmptySmallSquare: EmptySmallSquare, - EmptyVerySmallSquare: EmptyVerySmallSquare, - Eogon: Eogon, - Eopf: Eopf, - Epsilon: Epsilon, - Equal: Equal, - EqualTilde: EqualTilde, - Equilibrium: Equilibrium, - Escr: Escr, - Esim: Esim, - Eta: Eta, - Eum: Eum, - Euml: Euml, - Exists: Exists, - ExponentialE: ExponentialE, - Fcy: Fcy, - Ffr: Ffr, - FilledSmallSquare: FilledSmallSquare, - FilledVerySmallSquare: FilledVerySmallSquare, - Fopf: Fopf, - ForAll: ForAll, - Fouriertrf: Fouriertrf, - Fscr: Fscr, - GJcy: GJcy, - G: G, - GT: GT, - Gamma: Gamma, - Gammad: Gammad, - Gbreve: Gbreve, - Gcedil: Gcedil, - Gcirc: Gcirc, - Gcy: Gcy, - Gdot: Gdot, - Gfr: Gfr, - Gg: Gg, - Gopf: Gopf, - GreaterEqual: GreaterEqual, - GreaterEqualLess: GreaterEqualLess, - GreaterFullEqual: GreaterFullEqual, - GreaterGreater: GreaterGreater, - GreaterLess: GreaterLess, - GreaterSlantEqual: GreaterSlantEqual, - GreaterTilde: GreaterTilde, - Gscr: Gscr, - Gt: Gt, - HARDcy: HARDcy, - Hacek: Hacek, - Hat: Hat, - Hcirc: Hcirc, - Hfr: Hfr, - HilbertSpace: HilbertSpace, - Hopf: Hopf, - HorizontalLine: HorizontalLine, - Hscr: Hscr, - Hstrok: Hstrok, - HumpDownHump: HumpDownHump, - HumpEqual: HumpEqual, - IEcy: IEcy, - IJlig: IJlig, - IOcy: IOcy, - Iacut: Iacut, - Iacute: Iacute, - Icir: Icir, - Icirc: Icirc, - Icy: Icy, - Idot: Idot, - Ifr: Ifr, - Igrav: Igrav, - Igrave: Igrave, - Im: Im, - Imacr: Imacr, - ImaginaryI: ImaginaryI, - Implies: Implies, - Int: Int, - Integral: Integral, - Intersection: Intersection, - InvisibleComma: InvisibleComma, - InvisibleTimes: InvisibleTimes, - Iogon: Iogon, - Iopf: Iopf, - Iota: Iota, - Iscr: Iscr, - Itilde: Itilde, - Iukcy: Iukcy, - Ium: Ium, - Iuml: Iuml, - Jcirc: Jcirc, - Jcy: Jcy, - Jfr: Jfr, - Jopf: Jopf, - Jscr: Jscr, - Jsercy: Jsercy, - Jukcy: Jukcy, - KHcy: KHcy, - KJcy: KJcy, - Kappa: Kappa, - Kcedil: Kcedil, - Kcy: Kcy, - Kfr: Kfr, - Kopf: Kopf, - Kscr: Kscr, - LJcy: LJcy, - L: L, - LT: LT, - Lacute: Lacute, - Lambda: Lambda, - Lang: Lang, - Laplacetrf: Laplacetrf, - Larr: Larr, - Lcaron: Lcaron, - Lcedil: Lcedil, - Lcy: Lcy, - LeftAngleBracket: LeftAngleBracket, - LeftArrow: LeftArrow, - LeftArrowBar: LeftArrowBar, - LeftArrowRightArrow: LeftArrowRightArrow, - LeftCeiling: LeftCeiling, - LeftDoubleBracket: LeftDoubleBracket, - LeftDownTeeVector: LeftDownTeeVector, - LeftDownVector: LeftDownVector, - LeftDownVectorBar: LeftDownVectorBar, - LeftFloor: LeftFloor, - LeftRightArrow: LeftRightArrow, - LeftRightVector: LeftRightVector, - LeftTee: LeftTee, - LeftTeeArrow: LeftTeeArrow, - LeftTeeVector: LeftTeeVector, - LeftTriangle: LeftTriangle, - LeftTriangleBar: LeftTriangleBar, - LeftTriangleEqual: LeftTriangleEqual, - LeftUpDownVector: LeftUpDownVector, - LeftUpTeeVector: LeftUpTeeVector, - LeftUpVector: LeftUpVector, - LeftUpVectorBar: LeftUpVectorBar, - LeftVector: LeftVector, - LeftVectorBar: LeftVectorBar, - Leftarrow: Leftarrow, - Leftrightarrow: Leftrightarrow, - LessEqualGreater: LessEqualGreater, - LessFullEqual: LessFullEqual, - LessGreater: LessGreater, - LessLess: LessLess, - LessSlantEqual: LessSlantEqual, - LessTilde: LessTilde, - Lfr: Lfr, - Ll: Ll, - Lleftarrow: Lleftarrow, - Lmidot: Lmidot, - LongLeftArrow: LongLeftArrow, - LongLeftRightArrow: LongLeftRightArrow, - LongRightArrow: LongRightArrow, - Longleftarrow: Longleftarrow, - Longleftrightarrow: Longleftrightarrow, - Longrightarrow: Longrightarrow, - Lopf: Lopf, - LowerLeftArrow: LowerLeftArrow, - LowerRightArrow: LowerRightArrow, - Lscr: Lscr, - Lsh: Lsh, - Lstrok: Lstrok, - Lt: Lt, - "Map": "⤅", - Mcy: Mcy, - MediumSpace: MediumSpace, - Mellintrf: Mellintrf, - Mfr: Mfr, - MinusPlus: MinusPlus, - Mopf: Mopf, - Mscr: Mscr, - Mu: Mu, - NJcy: NJcy, - Nacute: Nacute, - Ncaron: Ncaron, - Ncedil: Ncedil, - Ncy: Ncy, - NegativeMediumSpace: NegativeMediumSpace, - NegativeThickSpace: NegativeThickSpace, - NegativeThinSpace: NegativeThinSpace, - NegativeVeryThinSpace: NegativeVeryThinSpace, - NestedGreaterGreater: NestedGreaterGreater, - NestedLessLess: NestedLessLess, - NewLine: NewLine, - Nfr: Nfr, - NoBreak: NoBreak, - NonBreakingSpace: NonBreakingSpace, - Nopf: Nopf, - Not: Not, - NotCongruent: NotCongruent, - NotCupCap: NotCupCap, - NotDoubleVerticalBar: NotDoubleVerticalBar, - NotElement: NotElement, - NotEqual: NotEqual, - NotEqualTilde: NotEqualTilde, - NotExists: NotExists, - NotGreater: NotGreater, - NotGreaterEqual: NotGreaterEqual, - NotGreaterFullEqual: NotGreaterFullEqual, - NotGreaterGreater: NotGreaterGreater, - NotGreaterLess: NotGreaterLess, - NotGreaterSlantEqual: NotGreaterSlantEqual, - NotGreaterTilde: NotGreaterTilde, - NotHumpDownHump: NotHumpDownHump, - NotHumpEqual: NotHumpEqual, - NotLeftTriangle: NotLeftTriangle, - NotLeftTriangleBar: NotLeftTriangleBar, - NotLeftTriangleEqual: NotLeftTriangleEqual, - NotLess: NotLess, - NotLessEqual: NotLessEqual, - NotLessGreater: NotLessGreater, - NotLessLess: NotLessLess, - NotLessSlantEqual: NotLessSlantEqual, - NotLessTilde: NotLessTilde, - NotNestedGreaterGreater: NotNestedGreaterGreater, - NotNestedLessLess: NotNestedLessLess, - NotPrecedes: NotPrecedes, - NotPrecedesEqual: NotPrecedesEqual, - NotPrecedesSlantEqual: NotPrecedesSlantEqual, - NotReverseElement: NotReverseElement, - NotRightTriangle: NotRightTriangle, - NotRightTriangleBar: NotRightTriangleBar, - NotRightTriangleEqual: NotRightTriangleEqual, - NotSquareSubset: NotSquareSubset, - NotSquareSubsetEqual: NotSquareSubsetEqual, - NotSquareSuperset: NotSquareSuperset, - NotSquareSupersetEqual: NotSquareSupersetEqual, - NotSubset: NotSubset, - NotSubsetEqual: NotSubsetEqual, - NotSucceeds: NotSucceeds, - NotSucceedsEqual: NotSucceedsEqual, - NotSucceedsSlantEqual: NotSucceedsSlantEqual, - NotSucceedsTilde: NotSucceedsTilde, - NotSuperset: NotSuperset, - NotSupersetEqual: NotSupersetEqual, - NotTilde: NotTilde, - NotTildeEqual: NotTildeEqual, - NotTildeFullEqual: NotTildeFullEqual, - NotTildeTilde: NotTildeTilde, - NotVerticalBar: NotVerticalBar, - Nscr: Nscr, - Ntild: Ntild, - Ntilde: Ntilde, - Nu: Nu, - OElig: OElig, - Oacut: Oacut, - Oacute: Oacute, - Ocir: Ocir, - Ocirc: Ocirc, - Ocy: Ocy, - Odblac: Odblac, - Ofr: Ofr, - Ograv: Ograv, - Ograve: Ograve, - Omacr: Omacr, - Omega: Omega, - Omicron: Omicron, - Oopf: Oopf, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, - OpenCurlyQuote: OpenCurlyQuote, - Or: Or, - Oscr: Oscr, - Oslas: Oslas, - Oslash: Oslash, - Otild: Otild, - Otilde: Otilde, - Otimes: Otimes, - Oum: Oum, - Ouml: Ouml, - OverBar: OverBar, - OverBrace: OverBrace, - OverBracket: OverBracket, - OverParenthesis: OverParenthesis, - PartialD: PartialD, - Pcy: Pcy, - Pfr: Pfr, - Phi: Phi, - Pi: Pi, - PlusMinus: PlusMinus, - Poincareplane: Poincareplane, - Popf: Popf, - Pr: Pr, - Precedes: Precedes, - PrecedesEqual: PrecedesEqual, - PrecedesSlantEqual: PrecedesSlantEqual, - PrecedesTilde: PrecedesTilde, - Prime: Prime, - Product: Product, - Proportion: Proportion, - Proportional: Proportional, - Pscr: Pscr, - Psi: Psi, - QUO: QUO, - QUOT: QUOT, - Qfr: Qfr, - Qopf: Qopf, - Qscr: Qscr, - RBarr: RBarr, - RE: RE, - REG: REG, - Racute: Racute, - Rang: Rang, - Rarr: Rarr, - Rarrtl: Rarrtl, - Rcaron: Rcaron, - Rcedil: Rcedil, - Rcy: Rcy, - Re: Re, - ReverseElement: ReverseElement, - ReverseEquilibrium: ReverseEquilibrium, - ReverseUpEquilibrium: ReverseUpEquilibrium, - Rfr: Rfr, - Rho: Rho, - RightAngleBracket: RightAngleBracket, - RightArrow: RightArrow, - RightArrowBar: RightArrowBar, - RightArrowLeftArrow: RightArrowLeftArrow, - RightCeiling: RightCeiling, - RightDoubleBracket: RightDoubleBracket, - RightDownTeeVector: RightDownTeeVector, - RightDownVector: RightDownVector, - RightDownVectorBar: RightDownVectorBar, - RightFloor: RightFloor, - RightTee: RightTee, - RightTeeArrow: RightTeeArrow, - RightTeeVector: RightTeeVector, - RightTriangle: RightTriangle, - RightTriangleBar: RightTriangleBar, - RightTriangleEqual: RightTriangleEqual, - RightUpDownVector: RightUpDownVector, - RightUpTeeVector: RightUpTeeVector, - RightUpVector: RightUpVector, - RightUpVectorBar: RightUpVectorBar, - RightVector: RightVector, - RightVectorBar: RightVectorBar, - Rightarrow: Rightarrow, - Ropf: Ropf, - RoundImplies: RoundImplies, - Rrightarrow: Rrightarrow, - Rscr: Rscr, - Rsh: Rsh, - RuleDelayed: RuleDelayed, - SHCHcy: SHCHcy, - SHcy: SHcy, - SOFTcy: SOFTcy, - Sacute: Sacute, - Sc: Sc, - Scaron: Scaron, - Scedil: Scedil, - Scirc: Scirc, - Scy: Scy, - Sfr: Sfr, - ShortDownArrow: ShortDownArrow, - ShortLeftArrow: ShortLeftArrow, - ShortRightArrow: ShortRightArrow, - ShortUpArrow: ShortUpArrow, - Sigma: Sigma, - SmallCircle: SmallCircle, - Sopf: Sopf, - Sqrt: Sqrt, - Square: Square, - SquareIntersection: SquareIntersection, - SquareSubset: SquareSubset, - SquareSubsetEqual: SquareSubsetEqual, - SquareSuperset: SquareSuperset, - SquareSupersetEqual: SquareSupersetEqual, - SquareUnion: SquareUnion, - Sscr: Sscr, - Star: Star, - Sub: Sub, - Subset: Subset, - SubsetEqual: SubsetEqual, - Succeeds: Succeeds, - SucceedsEqual: SucceedsEqual, - SucceedsSlantEqual: SucceedsSlantEqual, - SucceedsTilde: SucceedsTilde, - SuchThat: SuchThat, - Sum: Sum, - Sup: Sup, - Superset: Superset, - SupersetEqual: SupersetEqual, - Supset: Supset, - THOR: THOR, - THORN: THORN, - TRADE: TRADE, - TSHcy: TSHcy, - TScy: TScy, - Tab: Tab, - Tau: Tau, - Tcaron: Tcaron, - Tcedil: Tcedil, - Tcy: Tcy, - Tfr: Tfr, - Therefore: Therefore, - Theta: Theta, - ThickSpace: ThickSpace, - ThinSpace: ThinSpace, - Tilde: Tilde, - TildeEqual: TildeEqual, - TildeFullEqual: TildeFullEqual, - TildeTilde: TildeTilde, - Topf: Topf, - TripleDot: TripleDot, - Tscr: Tscr, - Tstrok: Tstrok, - Uacut: Uacut, - Uacute: Uacute, - Uarr: Uarr, - Uarrocir: Uarrocir, - Ubrcy: Ubrcy, - Ubreve: Ubreve, - Ucir: Ucir, - Ucirc: Ucirc, - Ucy: Ucy, - Udblac: Udblac, - Ufr: Ufr, - Ugrav: Ugrav, - Ugrave: Ugrave, - Umacr: Umacr, - UnderBar: UnderBar, - UnderBrace: UnderBrace, - UnderBracket: UnderBracket, - UnderParenthesis: UnderParenthesis, - Union: Union, - UnionPlus: UnionPlus, - Uogon: Uogon, - Uopf: Uopf, - UpArrow: UpArrow, - UpArrowBar: UpArrowBar, - UpArrowDownArrow: UpArrowDownArrow, - UpDownArrow: UpDownArrow, - UpEquilibrium: UpEquilibrium, - UpTee: UpTee, - UpTeeArrow: UpTeeArrow, - Uparrow: Uparrow, - Updownarrow: Updownarrow, - UpperLeftArrow: UpperLeftArrow, - UpperRightArrow: UpperRightArrow, - Upsi: Upsi, - Upsilon: Upsilon, - Uring: Uring, - Uscr: Uscr, - Utilde: Utilde, - Uum: Uum, - Uuml: Uuml, - VDash: VDash, - Vbar: Vbar, - Vcy: Vcy, - Vdash: Vdash, - Vdashl: Vdashl, - Vee: Vee, - Verbar: Verbar, - Vert: Vert, - VerticalBar: VerticalBar, - VerticalLine: VerticalLine, - VerticalSeparator: VerticalSeparator, - VerticalTilde: VerticalTilde, - VeryThinSpace: VeryThinSpace, - Vfr: Vfr, - Vopf: Vopf, - Vscr: Vscr, - Vvdash: Vvdash, - Wcirc: Wcirc, - Wedge: Wedge, - Wfr: Wfr, - Wopf: Wopf, - Wscr: Wscr, - Xfr: Xfr, - Xi: Xi, - Xopf: Xopf, - Xscr: Xscr, - YAcy: YAcy, - YIcy: YIcy, - YUcy: YUcy, - Yacut: Yacut, - Yacute: Yacute, - Ycirc: Ycirc, - Ycy: Ycy, - Yfr: Yfr, - Yopf: Yopf, - Yscr: Yscr, - Yuml: Yuml, - ZHcy: ZHcy, - Zacute: Zacute, - Zcaron: Zcaron, - Zcy: Zcy, - Zdot: Zdot, - ZeroWidthSpace: ZeroWidthSpace, - Zeta: Zeta, - Zfr: Zfr, - Zopf: Zopf, - Zscr: Zscr, - aacut: aacut, - aacute: aacute, - abreve: abreve, - ac: ac, - acE: acE, - acd: acd, - acir: acir, - acirc: acirc, - acut: acut, - acute: acute, - acy: acy, - aeli: aeli, - aelig: aelig, - af: af, - afr: afr, - agrav: agrav, - agrave: agrave, - alefsym: alefsym, - aleph: aleph, - alpha: alpha, - amacr: amacr, - amalg: amalg, - am: am, - amp: amp, - and: and, - andand: andand, - andd: andd, - andslope: andslope, - andv: andv, - ang: ang, - ange: ange, - angle: angle, - angmsd: angmsd, - angmsdaa: angmsdaa, - angmsdab: angmsdab, - angmsdac: angmsdac, - angmsdad: angmsdad, - angmsdae: angmsdae, - angmsdaf: angmsdaf, - angmsdag: angmsdag, - angmsdah: angmsdah, - angrt: angrt, - angrtvb: angrtvb, - angrtvbd: angrtvbd, - angsph: angsph, - angst: angst, - angzarr: angzarr, - aogon: aogon, - aopf: aopf, - ap: ap, - apE: apE, - apacir: apacir, - ape: ape, - apid: apid, - apos: apos, - approx: approx, - approxeq: approxeq, - arin: arin, - aring: aring, - ascr: ascr, - ast: ast, - asymp: asymp, - asympeq: asympeq, - atild: atild, - atilde: atilde, - aum: aum, - auml: auml, - awconint: awconint, - awint: awint, - bNot: bNot, - backcong: backcong, - backepsilon: backepsilon, - backprime: backprime, - backsim: backsim, - backsimeq: backsimeq, - barvee: barvee, - barwed: barwed, - barwedge: barwedge, - bbrk: bbrk, - bbrktbrk: bbrktbrk, - bcong: bcong, - bcy: bcy, - bdquo: bdquo, - becaus: becaus, - because: because, - bemptyv: bemptyv, - bepsi: bepsi, - bernou: bernou, - beta: beta, - beth: beth, - between: between, - bfr: bfr, - bigcap: bigcap, - bigcirc: bigcirc, - bigcup: bigcup, - bigodot: bigodot, - bigoplus: bigoplus, - bigotimes: bigotimes, - bigsqcup: bigsqcup, - bigstar: bigstar, - bigtriangledown: bigtriangledown, - bigtriangleup: bigtriangleup, - biguplus: biguplus, - bigvee: bigvee, - bigwedge: bigwedge, - bkarow: bkarow, - blacklozenge: blacklozenge, - blacksquare: blacksquare, - blacktriangle: blacktriangle, - blacktriangledown: blacktriangledown, - blacktriangleleft: blacktriangleleft, - blacktriangleright: blacktriangleright, - blank: blank, - blk12: blk12, - blk14: blk14, - blk34: blk34, - block: block, - bne: bne, - bnequiv: bnequiv, - bnot: bnot, - bopf: bopf, - bot: bot, - bottom: bottom, - bowtie: bowtie, - boxDL: boxDL, - boxDR: boxDR, - boxDl: boxDl, - boxDr: boxDr, - boxH: boxH, - boxHD: boxHD, - boxHU: boxHU, - boxHd: boxHd, - boxHu: boxHu, - boxUL: boxUL, - boxUR: boxUR, - boxUl: boxUl, - boxUr: boxUr, - boxV: boxV, - boxVH: boxVH, - boxVL: boxVL, - boxVR: boxVR, - boxVh: boxVh, - boxVl: boxVl, - boxVr: boxVr, - boxbox: boxbox, - boxdL: boxdL, - boxdR: boxdR, - boxdl: boxdl, - boxdr: boxdr, - boxh: boxh, - boxhD: boxhD, - boxhU: boxhU, - boxhd: boxhd, - boxhu: boxhu, - boxminus: boxminus, - boxplus: boxplus, - boxtimes: boxtimes, - boxuL: boxuL, - boxuR: boxuR, - boxul: boxul, - boxur: boxur, - boxv: boxv, - boxvH: boxvH, - boxvL: boxvL, - boxvR: boxvR, - boxvh: boxvh, - boxvl: boxvl, - boxvr: boxvr, - bprime: bprime, - breve: breve, - brvba: brvba, - brvbar: brvbar, - bscr: bscr, - bsemi: bsemi, - bsim: bsim, - bsime: bsime, - bsol: bsol, - bsolb: bsolb, - bsolhsub: bsolhsub, - bull: bull, - bullet: bullet, - bump: bump, - bumpE: bumpE, - bumpe: bumpe, - bumpeq: bumpeq, - cacute: cacute, - cap: cap, - capand: capand, - capbrcup: capbrcup, - capcap: capcap, - capcup: capcup, - capdot: capdot, - caps: caps, - caret: caret, - caron: caron, - ccaps: ccaps, - ccaron: ccaron, - ccedi: ccedi, - ccedil: ccedil, - ccirc: ccirc, - ccups: ccups, - ccupssm: ccupssm, - cdot: cdot, - cedi: cedi, - cedil: cedil, - cemptyv: cemptyv, - cen: cen, - cent: cent, - centerdot: centerdot, - cfr: cfr, - chcy: chcy, - check: check$2, - checkmark: checkmark, - chi: chi, - cir: cir, - cirE: cirE, - circ: circ, - circeq: circeq, - circlearrowleft: circlearrowleft, - circlearrowright: circlearrowright, - circledR: circledR, - circledS: circledS, - circledast: circledast, - circledcirc: circledcirc, - circleddash: circleddash, - cire: cire, - cirfnint: cirfnint, - cirmid: cirmid, - cirscir: cirscir, - clubs: clubs, - clubsuit: clubsuit, - colon: colon, - colone: colone, - coloneq: coloneq, - comma: comma, - commat: commat, - comp: comp, - compfn: compfn, - complement: complement, - complexes: complexes, - cong: cong, - congdot: congdot, - conint: conint, - copf: copf, - coprod: coprod, - cop: cop, - copy: copy$1, - copysr: copysr, - crarr: crarr, - cross: cross, - cscr: cscr, - csub: csub, - csube: csube, - csup: csup, - csupe: csupe, - ctdot: ctdot, - cudarrl: cudarrl, - cudarrr: cudarrr, - cuepr: cuepr, - cuesc: cuesc, - cularr: cularr, - cularrp: cularrp, - cup: cup, - cupbrcap: cupbrcap, - cupcap: cupcap, - cupcup: cupcup, - cupdot: cupdot, - cupor: cupor, - cups: cups, - curarr: curarr, - curarrm: curarrm, - curlyeqprec: curlyeqprec, - curlyeqsucc: curlyeqsucc, - curlyvee: curlyvee, - curlywedge: curlywedge, - curre: curre, - curren: curren, - curvearrowleft: curvearrowleft, - curvearrowright: curvearrowright, - cuvee: cuvee, - cuwed: cuwed, - cwconint: cwconint, - cwint: cwint, - cylcty: cylcty, - dArr: dArr, - dHar: dHar, - dagger: dagger, - daleth: daleth, - darr: darr, - dash: dash, - dashv: dashv, - dbkarow: dbkarow, - dblac: dblac, - dcaron: dcaron, - dcy: dcy, - dd: dd, - ddagger: ddagger, - ddarr: ddarr, - ddotseq: ddotseq, - de: de, - deg: deg, - delta: delta, - demptyv: demptyv, - dfisht: dfisht, - dfr: dfr, - dharl: dharl, - dharr: dharr, - diam: diam, - diamond: diamond, - diamondsuit: diamondsuit, - diams: diams, - die: die, - digamma: digamma, - disin: disin, - div: div, - divid: divid, - divide: divide, - divideontimes: divideontimes, - divonx: divonx, - djcy: djcy, - dlcorn: dlcorn, - dlcrop: dlcrop, - dollar: dollar, - dopf: dopf, - dot: dot, - doteq: doteq, - doteqdot: doteqdot, - dotminus: dotminus, - dotplus: dotplus, - dotsquare: dotsquare, - doublebarwedge: doublebarwedge, - downarrow: downarrow, - downdownarrows: downdownarrows, - downharpoonleft: downharpoonleft, - downharpoonright: downharpoonright, - drbkarow: drbkarow, - drcorn: drcorn, - drcrop: drcrop, - dscr: dscr, - dscy: dscy, - dsol: dsol, - dstrok: dstrok, - dtdot: dtdot, - dtri: dtri, - dtrif: dtrif, - duarr: duarr, - duhar: duhar, - dwangle: dwangle, - dzcy: dzcy, - dzigrarr: dzigrarr, - eDDot: eDDot, - eDot: eDot, - eacut: eacut, - eacute: eacute, - easter: easter, - ecaron: ecaron, - ecir: ecir, - ecirc: ecirc, - ecolon: ecolon, - ecy: ecy, - edot: edot, - ee: ee, - efDot: efDot, - efr: efr, - eg: eg, - egrav: egrav, - egrave: egrave, - egs: egs, - egsdot: egsdot, - el: el, - elinters: elinters, - ell: ell, - els: els, - elsdot: elsdot, - emacr: emacr, - empty: empty, - emptyset: emptyset, - emptyv: emptyv, - emsp13: emsp13, - emsp14: emsp14, - emsp: emsp, - eng: eng, - ensp: ensp, - eogon: eogon, - eopf: eopf, - epar: epar, - eparsl: eparsl, - eplus: eplus, - epsi: epsi, - epsilon: epsilon, - epsiv: epsiv, - eqcirc: eqcirc, - eqcolon: eqcolon, - eqsim: eqsim, - eqslantgtr: eqslantgtr, - eqslantless: eqslantless, - equals: equals, - equest: equest, - equiv: equiv, - equivDD: equivDD, - eqvparsl: eqvparsl, - erDot: erDot, - erarr: erarr, - escr: escr, - esdot: esdot, - esim: esim, - eta: eta, - et: et, - eth: eth, - eum: eum, - euml: euml, - euro: euro, - excl: excl, - exist: exist, - expectation: expectation, - exponentiale: exponentiale, - fallingdotseq: fallingdotseq, - fcy: fcy, - female: female, - ffilig: ffilig, - fflig: fflig, - ffllig: ffllig, - ffr: ffr, - filig: filig, - fjlig: fjlig, - flat: flat, - fllig: fllig, - fltns: fltns, - fnof: fnof, - fopf: fopf, - forall: forall, - fork: fork, - forkv: forkv, - fpartint: fpartint, - frac1: frac1, - frac12: frac12, - frac13: frac13, - frac14: frac14, - frac15: frac15, - frac16: frac16, - frac18: frac18, - frac23: frac23, - frac25: frac25, - frac3: frac3, - frac34: frac34, - frac35: frac35, - frac38: frac38, - frac45: frac45, - frac56: frac56, - frac58: frac58, - frac78: frac78, - frasl: frasl, - frown: frown, - fscr: fscr, - gE: gE, - gEl: gEl, - gacute: gacute, - gamma: gamma, - gammad: gammad, - gap: gap, - gbreve: gbreve, - gcirc: gcirc, - gcy: gcy, - gdot: gdot, - ge: ge, - gel: gel, - geq: geq, - geqq: geqq, - geqslant: geqslant, - ges: ges, - gescc: gescc, - gesdot: gesdot, - gesdoto: gesdoto, - gesdotol: gesdotol, - gesl: gesl, - gesles: gesles, - gfr: gfr, - gg: gg, - ggg: ggg, - gimel: gimel, - gjcy: gjcy, - gl: gl, - glE: glE, - gla: gla, - glj: glj, - gnE: gnE, - gnap: gnap, - gnapprox: gnapprox, - gne: gne, - gneq: gneq, - gneqq: gneqq, - gnsim: gnsim, - gopf: gopf, - grave: grave, - gscr: gscr, - gsim: gsim, - gsime: gsime, - gsiml: gsiml, - g: g, - gt: gt, - gtcc: gtcc, - gtcir: gtcir, - gtdot: gtdot, - gtlPar: gtlPar, - gtquest: gtquest, - gtrapprox: gtrapprox, - gtrarr: gtrarr, - gtrdot: gtrdot, - gtreqless: gtreqless, - gtreqqless: gtreqqless, - gtrless: gtrless, - gtrsim: gtrsim, - gvertneqq: gvertneqq, - gvnE: gvnE, - hArr: hArr, - hairsp: hairsp, - half: half, - hamilt: hamilt, - hardcy: hardcy, - harr: harr, - harrcir: harrcir, - harrw: harrw, - hbar: hbar, - hcirc: hcirc, - hearts: hearts, - heartsuit: heartsuit, - hellip: hellip, - hercon: hercon, - hfr: hfr, - hksearow: hksearow, - hkswarow: hkswarow, - hoarr: hoarr, - homtht: homtht, - hookleftarrow: hookleftarrow, - hookrightarrow: hookrightarrow, - hopf: hopf, - horbar: horbar, - hscr: hscr, - hslash: hslash, - hstrok: hstrok, - hybull: hybull, - hyphen: hyphen, - iacut: iacut, - iacute: iacute, - ic: ic, - icir: icir, - icirc: icirc, - icy: icy, - iecy: iecy, - iexc: iexc, - iexcl: iexcl, - iff: iff, - ifr: ifr, - igrav: igrav, - igrave: igrave, - ii: ii, - iiiint: iiiint, - iiint: iiint, - iinfin: iinfin, - iiota: iiota, - ijlig: ijlig, - imacr: imacr, - image: image, - imagline: imagline, - imagpart: imagpart, - imath: imath, - imof: imof, - imped: imped, - "in": "∈", - incare: incare, - infin: infin, - infintie: infintie, - inodot: inodot, - int: int$1, - intcal: intcal, - integers: integers, - intercal: intercal, - intlarhk: intlarhk, - intprod: intprod, - iocy: iocy, - iogon: iogon, - iopf: iopf, - iota: iota, - iprod: iprod, - iques: iques, - iquest: iquest, - iscr: iscr, - isin: isin, - isinE: isinE, - isindot: isindot, - isins: isins, - isinsv: isinsv, - isinv: isinv, - it: it, - itilde: itilde, - iukcy: iukcy, - ium: ium, - iuml: iuml, - jcirc: jcirc, - jcy: jcy, - jfr: jfr, - jmath: jmath, - jopf: jopf, - jscr: jscr, - jsercy: jsercy, - jukcy: jukcy, - kappa: kappa, - kappav: kappav, - kcedil: kcedil, - kcy: kcy, - kfr: kfr, - kgreen: kgreen, - khcy: khcy, - kjcy: kjcy, - kopf: kopf, - kscr: kscr, - lAarr: lAarr, - lArr: lArr, - lAtail: lAtail, - lBarr: lBarr, - lE: lE, - lEg: lEg, - lHar: lHar, - lacute: lacute, - laemptyv: laemptyv, - lagran: lagran, - lambda: lambda, - lang: lang, - langd: langd, - langle: langle, - lap: lap, - laqu: laqu, - laquo: laquo, - larr: larr, - larrb: larrb, - larrbfs: larrbfs, - larrfs: larrfs, - larrhk: larrhk, - larrlp: larrlp, - larrpl: larrpl, - larrsim: larrsim, - larrtl: larrtl, - lat: lat, - latail: latail, - late: late, - lates: lates, - lbarr: lbarr, - lbbrk: lbbrk, - lbrace: lbrace, - lbrack: lbrack, - lbrke: lbrke, - lbrksld: lbrksld, - lbrkslu: lbrkslu, - lcaron: lcaron, - lcedil: lcedil, - lceil: lceil, - lcub: lcub, - lcy: lcy, - ldca: ldca, - ldquo: ldquo, - ldquor: ldquor, - ldrdhar: ldrdhar, - ldrushar: ldrushar, - ldsh: ldsh, - le: le, - leftarrow: leftarrow, - leftarrowtail: leftarrowtail, - leftharpoondown: leftharpoondown, - leftharpoonup: leftharpoonup, - leftleftarrows: leftleftarrows, - leftrightarrow: leftrightarrow, - leftrightarrows: leftrightarrows, - leftrightharpoons: leftrightharpoons, - leftrightsquigarrow: leftrightsquigarrow, - leftthreetimes: leftthreetimes, - leg: leg, - leq: leq, - leqq: leqq, - leqslant: leqslant, - les: les, - lescc: lescc, - lesdot: lesdot, - lesdoto: lesdoto, - lesdotor: lesdotor, - lesg: lesg, - lesges: lesges, - lessapprox: lessapprox, - lessdot: lessdot, - lesseqgtr: lesseqgtr, - lesseqqgtr: lesseqqgtr, - lessgtr: lessgtr, - lesssim: lesssim, - lfisht: lfisht, - lfloor: lfloor, - lfr: lfr, - lg: lg, - lgE: lgE, - lhard: lhard, - lharu: lharu, - lharul: lharul, - lhblk: lhblk, - ljcy: ljcy, - ll: ll, - llarr: llarr, - llcorner: llcorner, - llhard: llhard, - lltri: lltri, - lmidot: lmidot, - lmoust: lmoust, - lmoustache: lmoustache, - lnE: lnE, - lnap: lnap, - lnapprox: lnapprox, - lne: lne, - lneq: lneq, - lneqq: lneqq, - lnsim: lnsim, - loang: loang, - loarr: loarr, - lobrk: lobrk, - longleftarrow: longleftarrow, - longleftrightarrow: longleftrightarrow, - longmapsto: longmapsto, - longrightarrow: longrightarrow, - looparrowleft: looparrowleft, - looparrowright: looparrowright, - lopar: lopar, - lopf: lopf, - loplus: loplus, - lotimes: lotimes, - lowast: lowast, - lowbar: lowbar, - loz: loz, - lozenge: lozenge, - lozf: lozf, - lpar: lpar, - lparlt: lparlt, - lrarr: lrarr, - lrcorner: lrcorner, - lrhar: lrhar, - lrhard: lrhard, - lrm: lrm, - lrtri: lrtri, - lsaquo: lsaquo, - lscr: lscr, - lsh: lsh, - lsim: lsim, - lsime: lsime, - lsimg: lsimg, - lsqb: lsqb, - lsquo: lsquo, - lsquor: lsquor, - lstrok: lstrok, - l: l, - lt: lt, - ltcc: ltcc, - ltcir: ltcir, - ltdot: ltdot, - lthree: lthree, - ltimes: ltimes, - ltlarr: ltlarr, - ltquest: ltquest, - ltrPar: ltrPar, - ltri: ltri, - ltrie: ltrie, - ltrif: ltrif, - lurdshar: lurdshar, - luruhar: luruhar, - lvertneqq: lvertneqq, - lvnE: lvnE, - mDDot: mDDot, - mac: mac, - macr: macr, - male: male, - malt: malt, - maltese: maltese, - map: map$2, - mapsto: mapsto, - mapstodown: mapstodown, - mapstoleft: mapstoleft, - mapstoup: mapstoup, - marker: marker, - mcomma: mcomma, - mcy: mcy, - mdash: mdash, - measuredangle: measuredangle, - mfr: mfr, - mho: mho, - micr: micr, - micro: micro, - mid: mid, - midast: midast, - midcir: midcir, - middo: middo, - middot: middot, - minus: minus, - minusb: minusb, - minusd: minusd, - minusdu: minusdu, - mlcp: mlcp, - mldr: mldr, - mnplus: mnplus, - models: models$2, - mopf: mopf, - mp: mp, - mscr: mscr, - mstpos: mstpos, - mu: mu, - multimap: multimap, - mumap: mumap, - nGg: nGg, - nGt: nGt, - nGtv: nGtv, - nLeftarrow: nLeftarrow, - nLeftrightarrow: nLeftrightarrow, - nLl: nLl, - nLt: nLt, - nLtv: nLtv, - nRightarrow: nRightarrow, - nVDash: nVDash, - nVdash: nVdash, - nabla: nabla, - nacute: nacute, - nang: nang, - nap: nap, - napE: napE, - napid: napid, - napos: napos, - napprox: napprox, - natur: natur, - natural: natural, - naturals: naturals, - nbs: nbs, - nbsp: nbsp, - nbump: nbump, - nbumpe: nbumpe, - ncap: ncap, - ncaron: ncaron, - ncedil: ncedil, - ncong: ncong, - ncongdot: ncongdot, - ncup: ncup, - ncy: ncy, - ndash: ndash, - ne: ne, - neArr: neArr, - nearhk: nearhk, - nearr: nearr, - nearrow: nearrow, - nedot: nedot, - nequiv: nequiv, - nesear: nesear, - nesim: nesim, - nexist: nexist, - nexists: nexists, - nfr: nfr, - ngE: ngE, - nge: nge, - ngeq: ngeq, - ngeqq: ngeqq, - ngeqslant: ngeqslant, - nges: nges, - ngsim: ngsim, - ngt: ngt, - ngtr: ngtr, - nhArr: nhArr, - nharr: nharr, - nhpar: nhpar, - ni: ni, - nis: nis, - nisd: nisd, - niv: niv, - njcy: njcy, - nlArr: nlArr, - nlE: nlE, - nlarr: nlarr, - nldr: nldr, - nle: nle, - nleftarrow: nleftarrow, - nleftrightarrow: nleftrightarrow, - nleq: nleq, - nleqq: nleqq, - nleqslant: nleqslant, - nles: nles, - nless: nless, - nlsim: nlsim, - nlt: nlt, - nltri: nltri, - nltrie: nltrie, - nmid: nmid, - nopf: nopf, - no: no, - not: not, - notin: notin, - notinE: notinE, - notindot: notindot, - notinva: notinva, - notinvb: notinvb, - notinvc: notinvc, - notni: notni, - notniva: notniva, - notnivb: notnivb, - notnivc: notnivc, - npar: npar, - nparallel: nparallel, - nparsl: nparsl, - npart: npart, - npolint: npolint, - npr: npr, - nprcue: nprcue, - npre: npre, - nprec: nprec, - npreceq: npreceq, - nrArr: nrArr, - nrarr: nrarr, - nrarrc: nrarrc, - nrarrw: nrarrw, - nrightarrow: nrightarrow, - nrtri: nrtri, - nrtrie: nrtrie, - nsc: nsc, - nsccue: nsccue, - nsce: nsce, - nscr: nscr, - nshortmid: nshortmid, - nshortparallel: nshortparallel, - nsim: nsim, - nsime: nsime, - nsimeq: nsimeq, - nsmid: nsmid, - nspar: nspar, - nsqsube: nsqsube, - nsqsupe: nsqsupe, - nsub: nsub, - nsubE: nsubE, - nsube: nsube, - nsubset: nsubset, - nsubseteq: nsubseteq, - nsubseteqq: nsubseteqq, - nsucc: nsucc, - nsucceq: nsucceq, - nsup: nsup, - nsupE: nsupE, - nsupe: nsupe, - nsupset: nsupset, - nsupseteq: nsupseteq, - nsupseteqq: nsupseteqq, - ntgl: ntgl, - ntild: ntild, - ntilde: ntilde, - ntlg: ntlg, - ntriangleleft: ntriangleleft, - ntrianglelefteq: ntrianglelefteq, - ntriangleright: ntriangleright, - ntrianglerighteq: ntrianglerighteq, - nu: nu, - num: num, - numero: numero, - numsp: numsp, - nvDash: nvDash, - nvHarr: nvHarr, - nvap: nvap, - nvdash: nvdash, - nvge: nvge, - nvgt: nvgt, - nvinfin: nvinfin, - nvlArr: nvlArr, - nvle: nvle, - nvlt: nvlt, - nvltrie: nvltrie, - nvrArr: nvrArr, - nvrtrie: nvrtrie, - nvsim: nvsim, - nwArr: nwArr, - nwarhk: nwarhk, - nwarr: nwarr, - nwarrow: nwarrow, - nwnear: nwnear, - oS: oS, - oacut: oacut, - oacute: oacute, - oast: oast, - ocir: ocir, - ocirc: ocirc, - ocy: ocy, - odash: odash, - odblac: odblac, - odiv: odiv, - odot: odot, - odsold: odsold, - oelig: oelig, - ofcir: ofcir, - ofr: ofr, - ogon: ogon, - ograv: ograv, - ograve: ograve, - ogt: ogt, - ohbar: ohbar, - ohm: ohm, - oint: oint, - olarr: olarr, - olcir: olcir, - olcross: olcross, - oline: oline, - olt: olt, - omacr: omacr, - omega: omega, - omicron: omicron, - omid: omid, - ominus: ominus, - oopf: oopf, - opar: opar, - operp: operp, - oplus: oplus, - or: or, - orarr: orarr, - ord: ord, - order: order$1, - orderof: orderof, - ordf: ordf, - ordm: ordm, - origof: origof, - oror: oror, - orslope: orslope, - orv: orv, - oscr: oscr, - oslas: oslas, - oslash: oslash, - osol: osol, - otild: otild, - otilde: otilde, - otimes: otimes, - otimesas: otimesas, - oum: oum, - ouml: ouml, - ovbar: ovbar, - par: par, - para: para, - parallel: parallel, - parsim: parsim, - parsl: parsl, - part: part, - pcy: pcy, - percnt: percnt, - period: period, - permil: permil, - perp: perp, - pertenk: pertenk, - pfr: pfr, - phi: phi, - phiv: phiv, - phmmat: phmmat, - phone: phone, - pi: pi, - pitchfork: pitchfork, - piv: piv, - planck: planck, - planckh: planckh, - plankv: plankv, - plus: plus, - plusacir: plusacir, - plusb: plusb, - pluscir: pluscir, - plusdo: plusdo, - plusdu: plusdu, - pluse: pluse, - plusm: plusm, - plusmn: plusmn, - plussim: plussim, - plustwo: plustwo, - pm: pm, - pointint: pointint, - popf: popf, - poun: poun, - pound: pound, - pr: pr, - prE: prE, - prap: prap, - prcue: prcue, - pre: pre, - prec: prec, - precapprox: precapprox, - preccurlyeq: preccurlyeq, - preceq: preceq, - precnapprox: precnapprox, - precneqq: precneqq, - precnsim: precnsim, - precsim: precsim, - prime: prime, - primes: primes, - prnE: prnE, - prnap: prnap, - prnsim: prnsim, - prod: prod, - profalar: profalar, - profline: profline, - profsurf: profsurf, - prop: prop, - propto: propto, - prsim: prsim, - prurel: prurel, - pscr: pscr, - psi: psi, - puncsp: puncsp, - qfr: qfr, - qint: qint, - qopf: qopf, - qprime: qprime, - qscr: qscr, - quaternions: quaternions, - quatint: quatint, - quest: quest, - questeq: questeq, - quo: quo, - quot: quot, - rAarr: rAarr, - rArr: rArr, - rAtail: rAtail, - rBarr: rBarr, - rHar: rHar, - race: race, - racute: racute, - radic: radic, - raemptyv: raemptyv, - rang: rang, - rangd: rangd, - range: range$1, - rangle: rangle, - raqu: raqu, - raquo: raquo, - rarr: rarr, - rarrap: rarrap, - rarrb: rarrb, - rarrbfs: rarrbfs, - rarrc: rarrc, - rarrfs: rarrfs, - rarrhk: rarrhk, - rarrlp: rarrlp, - rarrpl: rarrpl, - rarrsim: rarrsim, - rarrtl: rarrtl, - rarrw: rarrw, - ratail: ratail, - ratio: ratio, - rationals: rationals, - rbarr: rbarr, - rbbrk: rbbrk, - rbrace: rbrace, - rbrack: rbrack, - rbrke: rbrke, - rbrksld: rbrksld, - rbrkslu: rbrkslu, - rcaron: rcaron, - rcedil: rcedil, - rceil: rceil, - rcub: rcub, - rcy: rcy, - rdca: rdca, - rdldhar: rdldhar, - rdquo: rdquo, - rdquor: rdquor, - rdsh: rdsh, - real: real, - realine: realine, - realpart: realpart, - reals: reals, - rect: rect, - re: re, - reg: reg, - rfisht: rfisht, - rfloor: rfloor, - rfr: rfr, - rhard: rhard, - rharu: rharu, - rharul: rharul, - rho: rho, - rhov: rhov, - rightarrow: rightarrow, - rightarrowtail: rightarrowtail, - rightharpoondown: rightharpoondown, - rightharpoonup: rightharpoonup, - rightleftarrows: rightleftarrows, - rightleftharpoons: rightleftharpoons, - rightrightarrows: rightrightarrows, - rightsquigarrow: rightsquigarrow, - rightthreetimes: rightthreetimes, - ring: ring, - risingdotseq: risingdotseq, - rlarr: rlarr, - rlhar: rlhar, - rlm: rlm, - rmoust: rmoust, - rmoustache: rmoustache, - rnmid: rnmid, - roang: roang, - roarr: roarr, - robrk: robrk, - ropar: ropar, - ropf: ropf, - roplus: roplus, - rotimes: rotimes, - rpar: rpar, - rpargt: rpargt, - rppolint: rppolint, - rrarr: rrarr, - rsaquo: rsaquo, - rscr: rscr, - rsh: rsh, - rsqb: rsqb, - rsquo: rsquo, - rsquor: rsquor, - rthree: rthree, - rtimes: rtimes, - rtri: rtri, - rtrie: rtrie, - rtrif: rtrif, - rtriltri: rtriltri, - ruluhar: ruluhar, - rx: rx, - sacute: sacute, - sbquo: sbquo, - sc: sc, - scE: scE, - scap: scap, - scaron: scaron, - sccue: sccue, - sce: sce, - scedil: scedil, - scirc: scirc, - scnE: scnE, - scnap: scnap, - scnsim: scnsim, - scpolint: scpolint, - scsim: scsim, - scy: scy, - sdot: sdot, - sdotb: sdotb, - sdote: sdote, - seArr: seArr, - searhk: searhk, - searr: searr, - searrow: searrow, - sec: sec, - sect: sect, - semi: semi, - seswar: seswar, - setminus: setminus, - setmn: setmn, - sext: sext, - sfr: sfr, - sfrown: sfrown, - sharp: sharp, - shchcy: shchcy, - shcy: shcy, - shortmid: shortmid, - shortparallel: shortparallel, - sh: sh, - shy: shy, - sigma: sigma, - sigmaf: sigmaf, - sigmav: sigmav, - sim: sim, - simdot: simdot, - sime: sime, - simeq: simeq, - simg: simg, - simgE: simgE, - siml: siml, - simlE: simlE, - simne: simne, - simplus: simplus, - simrarr: simrarr, - slarr: slarr, - smallsetminus: smallsetminus, - smashp: smashp, - smeparsl: smeparsl, - smid: smid, - smile: smile, - smt: smt, - smte: smte, - smtes: smtes, - softcy: softcy, - sol: sol, - solb: solb, - solbar: solbar, - sopf: sopf, - spades: spades, - spadesuit: spadesuit, - spar: spar, - sqcap: sqcap, - sqcaps: sqcaps, - sqcup: sqcup, - sqcups: sqcups, - sqsub: sqsub, - sqsube: sqsube, - sqsubset: sqsubset, - sqsubseteq: sqsubseteq, - sqsup: sqsup, - sqsupe: sqsupe, - sqsupset: sqsupset, - sqsupseteq: sqsupseteq, - squ: squ, - square: square, - squarf: squarf, - squf: squf, - srarr: srarr, - sscr: sscr, - ssetmn: ssetmn, - ssmile: ssmile, - sstarf: sstarf, - star: star$1, - starf: starf, - straightepsilon: straightepsilon, - straightphi: straightphi, - strns: strns, - sub: sub, - subE: subE, - subdot: subdot, - sube: sube, - subedot: subedot, - submult: submult, - subnE: subnE, - subne: subne, - subplus: subplus, - subrarr: subrarr, - subset: subset, - subseteq: subseteq, - subseteqq: subseteqq, - subsetneq: subsetneq, - subsetneqq: subsetneqq, - subsim: subsim, - subsub: subsub, - subsup: subsup, - succ: succ, - succapprox: succapprox, - succcurlyeq: succcurlyeq, - succeq: succeq, - succnapprox: succnapprox, - succneqq: succneqq, - succnsim: succnsim, - succsim: succsim, - sum: sum, - sung: sung, - sup: sup, - sup1: sup1, - sup2: sup2, - sup3: sup3, - supE: supE, - supdot: supdot, - supdsub: supdsub, - supe: supe, - supedot: supedot, - suphsol: suphsol, - suphsub: suphsub, - suplarr: suplarr, - supmult: supmult, - supnE: supnE, - supne: supne, - supplus: supplus, - supset: supset, - supseteq: supseteq, - supseteqq: supseteqq, - supsetneq: supsetneq, - supsetneqq: supsetneqq, - supsim: supsim, - supsub: supsub, - supsup: supsup, - swArr: swArr, - swarhk: swarhk, - swarr: swarr, - swarrow: swarrow, - swnwar: swnwar, - szli: szli, - szlig: szlig, - target: target, - tau: tau, - tbrk: tbrk, - tcaron: tcaron, - tcedil: tcedil, - tcy: tcy, - tdot: tdot, - telrec: telrec, - tfr: tfr, - there4: there4, - therefore: therefore, - theta: theta, - thetasym: thetasym, - thetav: thetav, - thickapprox: thickapprox, - thicksim: thicksim, - thinsp: thinsp, - thkap: thkap, - thksim: thksim, - thor: thor, - thorn: thorn, - tilde: tilde, - time: time, - times: times, - timesb: timesb, - timesbar: timesbar, - timesd: timesd, - tint: tint, - toea: toea, - top: top, - topbot: topbot, - topcir: topcir, - topf: topf, - topfork: topfork, - tosa: tosa, - tprime: tprime, - trade: trade, - triangle: triangle, - triangledown: triangledown, - triangleleft: triangleleft, - trianglelefteq: trianglelefteq, - triangleq: triangleq, - triangleright: triangleright, - trianglerighteq: trianglerighteq, - tridot: tridot, - trie: trie, - triminus: triminus, - triplus: triplus, - trisb: trisb, - tritime: tritime, - trpezium: trpezium, - tscr: tscr, - tscy: tscy, - tshcy: tshcy, - tstrok: tstrok, - twixt: twixt, - twoheadleftarrow: twoheadleftarrow, - twoheadrightarrow: twoheadrightarrow, - uArr: uArr, - uHar: uHar, - uacut: uacut, - uacute: uacute, - uarr: uarr, - ubrcy: ubrcy, - ubreve: ubreve, - ucir: ucir, - ucirc: ucirc, - ucy: ucy, - udarr: udarr, - udblac: udblac, - udhar: udhar, - ufisht: ufisht, - ufr: ufr, - ugrav: ugrav, - ugrave: ugrave, - uharl: uharl, - uharr: uharr, - uhblk: uhblk, - ulcorn: ulcorn, - ulcorner: ulcorner, - ulcrop: ulcrop, - ultri: ultri, - umacr: umacr, - um: um, - uml: uml, - uogon: uogon, - uopf: uopf, - uparrow: uparrow, - updownarrow: updownarrow, - upharpoonleft: upharpoonleft, - upharpoonright: upharpoonright, - uplus: uplus, - upsi: upsi, - upsih: upsih, - upsilon: upsilon, - upuparrows: upuparrows, - urcorn: urcorn, - urcorner: urcorner, - urcrop: urcrop, - uring: uring, - urtri: urtri, - uscr: uscr, - utdot: utdot, - utilde: utilde, - utri: utri, - utrif: utrif, - uuarr: uuarr, - uum: uum, - uuml: uuml, - uwangle: uwangle, - vArr: vArr, - vBar: vBar, - vBarv: vBarv, - vDash: vDash, - vangrt: vangrt, - varepsilon: varepsilon, - varkappa: varkappa, - varnothing: varnothing, - varphi: varphi, - varpi: varpi, - varpropto: varpropto, - varr: varr, - varrho: varrho, - varsigma: varsigma, - varsubsetneq: varsubsetneq, - varsubsetneqq: varsubsetneqq, - varsupsetneq: varsupsetneq, - varsupsetneqq: varsupsetneqq, - vartheta: vartheta, - vartriangleleft: vartriangleleft, - vartriangleright: vartriangleright, - vcy: vcy, - vdash: vdash, - vee: vee, - veebar: veebar, - veeeq: veeeq, - vellip: vellip, - verbar: verbar, - vert: vert, - vfr: vfr, - vltri: vltri, - vnsub: vnsub, - vnsup: vnsup, - vopf: vopf, - vprop: vprop, - vrtri: vrtri, - vscr: vscr, - vsubnE: vsubnE, - vsubne: vsubne, - vsupnE: vsupnE, - vsupne: vsupne, - vzigzag: vzigzag, - wcirc: wcirc, - wedbar: wedbar, - wedge: wedge, - wedgeq: wedgeq, - weierp: weierp, - wfr: wfr, - wopf: wopf, - wp: wp, - wr: wr, - wreath: wreath, - wscr: wscr, - xcap: xcap, - xcirc: xcirc, - xcup: xcup, - xdtri: xdtri, - xfr: xfr, - xhArr: xhArr, - xharr: xharr, - xi: xi, - xlArr: xlArr, - xlarr: xlarr, - xmap: xmap, - xnis: xnis, - xodot: xodot, - xopf: xopf, - xoplus: xoplus, - xotime: xotime, - xrArr: xrArr, - xrarr: xrarr, - xscr: xscr, - xsqcup: xsqcup, - xuplus: xuplus, - xutri: xutri, - xvee: xvee, - xwedge: xwedge, - yacut: yacut, - yacute: yacute, - yacy: yacy, - ycirc: ycirc, - ycy: ycy, - ye: ye, - yen: yen, - yfr: yfr, - yicy: yicy, - yopf: yopf, - yscr: yscr, - yucy: yucy, - yum: yum, - yuml: yuml, - zacute: zacute, - zcaron: zcaron, - zcy: zcy, - zdot: zdot, - zeetrf: zeetrf, - zeta: zeta, - zfr: zfr, - zhcy: zhcy, - zigrarr: zigrarr, - zopf: zopf, - zscr: zscr, - zwj: zwj, - zwnj: zwnj -}; +var characterEntities$2 = require$$0$2; -var decodeEntity_1 = decodeEntity; +var decodeEntity_1$2 = decodeEntity$3; -var own$4 = {}.hasOwnProperty; +var own$9 = {}.hasOwnProperty; -function decodeEntity(characters) { - return own$4.call(characterEntities, characters) - ? characterEntities[characters] +function decodeEntity$3(characters) { + return own$9.call(characterEntities$2, characters) + ? characterEntities$2[characters] : false } -var asciiDigit = regexCheck_1(/\d/); +var regexCheck$2 = regexCheck_1; + +var asciiDigit$3 = regexCheck$2(/\d/); + +var asciiDigit_1 = asciiDigit$3; + +var regexCheck$1 = regexCheck_1; -var asciiDigit_1 = asciiDigit; +var asciiHexDigit$1 = regexCheck$1(/[\dA-Fa-f]/); -var asciiHexDigit = regexCheck_1(/[\dA-Fa-f]/); +var asciiHexDigit_1 = asciiHexDigit$1; -var asciiHexDigit_1 = asciiHexDigit; +var decodeEntity$2 = decodeEntity_1$2; +var asciiAlphanumeric$3 = asciiAlphanumeric_1; +var asciiDigit$2 = asciiDigit_1; +var asciiHexDigit = asciiHexDigit_1; function _interopDefaultLegacy$1(e) { return e && typeof e === 'object' && 'default' in e ? e : {default: e} } -var decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy$1(decodeEntity_1); +var decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy$1(decodeEntity$2); -var characterReference = { +var characterReference$2 = { name: 'characterReference', tokenize: tokenizeCharacterReference }; @@ -34382,7 +35321,7 @@ function tokenizeCharacterReference(effects, ok, nok) { effects.enter('characterReferenceValue'); max = 31; - test = asciiAlphanumeric_1; + test = asciiAlphanumeric$3; return value(code) } @@ -34393,13 +35332,13 @@ function tokenizeCharacterReference(effects, ok, nok) { effects.exit('characterReferenceMarkerHexadecimal'); effects.enter('characterReferenceValue'); max = 6; - test = asciiHexDigit_1; + test = asciiHexDigit; return value } effects.enter('characterReferenceValue'); max = 7; - test = asciiDigit_1; + test = asciiDigit$2; return value(code) } @@ -34410,7 +35349,7 @@ function tokenizeCharacterReference(effects, ok, nok) { token = effects.exit('characterReferenceValue'); if ( - test === asciiAlphanumeric_1 && + test === asciiAlphanumeric$3 && !decodeEntity__default['default'](self.sliceSerialize(token)) ) { return nok(code) @@ -34432,9 +35371,14 @@ function tokenizeCharacterReference(effects, ok, nok) { } } -var characterReference_1 = characterReference; +var characterReference_1 = characterReference$2; -var codeFenced = { +var markdownLineEnding$e = markdownLineEnding_1; +var markdownLineEndingOrSpace$7 = markdownLineEndingOrSpace_1; +var prefixSize$2 = prefixSize_1; +var factorySpace$b = factorySpace$i; + +var codeFenced$1 = { name: 'codeFenced', tokenize: tokenizeCodeFenced, concrete: true @@ -34446,7 +35390,7 @@ function tokenizeCodeFenced(effects, ok, nok) { tokenize: tokenizeClosingFence, partial: true }; - var initialPrefix = prefixSize_1(this.events, 'linePrefix'); + var initialPrefix = prefixSize$2(this.events, 'linePrefix'); var sizeOpen = 0; var marker; return start @@ -34469,11 +35413,11 @@ function tokenizeCodeFenced(effects, ok, nok) { effects.exit('codeFencedFenceSequence'); return sizeOpen < 3 ? nok(code) - : factorySpace(effects, infoOpen, 'whitespace')(code) + : factorySpace$b(effects, infoOpen, 'whitespace')(code) } function infoOpen(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$e(code)) { return openAfter(code) } @@ -34485,10 +35429,10 @@ function tokenizeCodeFenced(effects, ok, nok) { } function info(code) { - if (code === null || markdownLineEndingOrSpace_1(code)) { + if (code === null || markdownLineEndingOrSpace$7(code)) { effects.exit('chunkString'); effects.exit('codeFencedFenceInfo'); - return factorySpace(effects, infoAfter, 'whitespace')(code) + return factorySpace$b(effects, infoAfter, 'whitespace')(code) } if (code === 96 && code === marker) return nok(code) @@ -34497,7 +35441,7 @@ function tokenizeCodeFenced(effects, ok, nok) { } function infoAfter(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$e(code)) { return openAfter(code) } @@ -34509,7 +35453,7 @@ function tokenizeCodeFenced(effects, ok, nok) { } function meta(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$e(code)) { effects.exit('chunkString'); effects.exit('codeFencedFenceMeta'); return openAfter(code) @@ -34530,7 +35474,7 @@ function tokenizeCodeFenced(effects, ok, nok) { return after(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$e(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); @@ -34538,7 +35482,7 @@ function tokenizeCodeFenced(effects, ok, nok) { closingFenceConstruct, after, initialPrefix - ? factorySpace(effects, content, 'linePrefix', initialPrefix + 1) + ? factorySpace$b(effects, content, 'linePrefix', initialPrefix + 1) : content ) } @@ -34548,7 +35492,7 @@ function tokenizeCodeFenced(effects, ok, nok) { } function contentContinue(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$e(code)) { effects.exit('codeFlowValue'); return content(code) } @@ -34564,7 +35508,7 @@ function tokenizeCodeFenced(effects, ok, nok) { function tokenizeClosingFence(effects, ok, nok) { var size = 0; - return factorySpace( + return factorySpace$b( effects, closingSequenceStart, 'linePrefix', @@ -34588,11 +35532,11 @@ function tokenizeCodeFenced(effects, ok, nok) { if (size < sizeOpen) return nok(code) effects.exit('codeFencedFenceSequence'); - return factorySpace(effects, closingSequenceEnd, 'whitespace')(code) + return factorySpace$b(effects, closingSequenceEnd, 'whitespace')(code) } function closingSequenceEnd(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$e(code)) { effects.exit('codeFencedFence'); return ok(code) } @@ -34602,9 +35546,14 @@ function tokenizeCodeFenced(effects, ok, nok) { } } -var codeFenced_1 = codeFenced; +var codeFenced_1 = codeFenced$1; + +var markdownLineEnding$d = markdownLineEnding_1; +var chunkedSplice$2 = chunkedSplice_1; +var prefixSize$1 = prefixSize_1; +var factorySpace$a = factorySpace$i; -var codeIndented = { +var codeIndented$1 = { name: 'codeIndented', tokenize: tokenizeCodeIndented, resolve: resolveCodeIndented @@ -34620,8 +35569,8 @@ function resolveCodeIndented(events, context) { start: events[0][1].start, end: events[events.length - 1][1].end }; - chunkedSplice_1(events, 0, 0, [['enter', code, context]]); - chunkedSplice_1(events, events.length, 0, [['exit', code, context]]); + chunkedSplice$2(events, 0, 0, [['enter', code, context]]); + chunkedSplice$2(events, events.length, 0, [['exit', code, context]]); return events } @@ -34633,7 +35582,7 @@ function tokenizeCodeIndented(effects, ok, nok) { return ok(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$d(code)) { return effects.attempt(indentedContentConstruct, afterPrefix, ok)(code) } @@ -34642,7 +35591,7 @@ function tokenizeCodeIndented(effects, ok, nok) { } function content(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$d(code)) { effects.exit('codeFlowValue'); return afterPrefix(code) } @@ -34654,27 +35603,29 @@ function tokenizeCodeIndented(effects, ok, nok) { function tokenizeIndentedContent(effects, ok, nok) { var self = this; - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1) + return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1) function afterPrefix(code) { - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$d(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); - return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1) + return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1) } - return prefixSize_1(self.events, 'linePrefix') < 4 ? nok(code) : ok(code) + return prefixSize$1(self.events, 'linePrefix') < 4 ? nok(code) : ok(code) } } -var codeIndented_1 = codeIndented; +var codeIndented_1 = codeIndented$1; -var codeText = { +var markdownLineEnding$c = markdownLineEnding_1; + +var codeText$1 = { name: 'codeText', tokenize: tokenizeCodeText, resolve: resolveCodeText, - previous: previous + previous: previous$1 }; function resolveCodeText(events) { @@ -34731,7 +35682,7 @@ function resolveCodeText(events) { return events } -function previous(code) { +function previous$1(code) { // If there is a previous code, there will always be a tail. return ( code !== 96 || @@ -34782,7 +35733,7 @@ function tokenizeCodeText(effects, ok, nok) { return gap } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$c(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); @@ -34798,7 +35749,7 @@ function tokenizeCodeText(effects, ok, nok) { code === null || code === 32 || code === 96 || - markdownLineEnding_1(code) + markdownLineEnding$c(code) ) { effects.exit('codeTextData'); return gap(code) @@ -34827,7 +35778,11 @@ function tokenizeCodeText(effects, ok, nok) { } } -var codeText_1 = codeText; +var codeText_1 = codeText$1; + +var asciiControl$1 = asciiControl_1; +var markdownLineEndingOrSpace$6 = markdownLineEndingOrSpace_1; +var markdownLineEnding$b = markdownLineEnding_1; // eslint-disable-next-line max-params function destinationFactory( @@ -34855,7 +35810,7 @@ function destinationFactory( return destinationEnclosedBefore } - if (asciiControl_1(code)) { + if (asciiControl$1(code) || code === 41) { return nok(code) } @@ -34892,7 +35847,7 @@ function destinationFactory( return destinationEnclosedBefore(code) } - if (code === null || code === 60 || markdownLineEnding_1(code)) { + if (code === null || code === 60 || markdownLineEnding$b(code)) { return nok(code) } @@ -34929,7 +35884,7 @@ function destinationFactory( return destinationRaw } - if (code === null || markdownLineEndingOrSpace_1(code)) { + if (code === null || markdownLineEndingOrSpace$6(code)) { if (balance) return nok(code) effects.exit('chunkString'); effects.exit(stringType); @@ -34938,7 +35893,7 @@ function destinationFactory( return ok(code) } - if (asciiControl_1(code)) return nok(code) + if (asciiControl$1(code)) return nok(code) effects.consume(code); return code === 92 ? destinationRawEscape : destinationRaw } @@ -34953,7 +35908,10 @@ function destinationFactory( } } -var factoryDestination = destinationFactory; +var factoryDestination$2 = destinationFactory; + +var markdownLineEnding$a = markdownLineEnding_1; +var markdownSpace$7 = markdownSpace_1; // eslint-disable-next-line max-params function labelFactory(effects, ok, nok, type, markerType, stringType) { @@ -34996,7 +35954,7 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) { return ok } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$a(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); @@ -35014,7 +35972,7 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) { code === null || code === 91 || code === 93 || - markdownLineEnding_1(code) || + markdownLineEnding$a(code) || size++ > 999 ) { effects.exit('chunkString'); @@ -35022,7 +35980,7 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) { } effects.consume(code); - data = data || !markdownSpace_1(code); + data = data || !markdownSpace$7(code); return code === 92 ? labelEscape : label } @@ -35037,14 +35995,18 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) { } } -var factoryLabel = labelFactory; +var factoryLabel$2 = labelFactory; + +var markdownLineEnding$9 = markdownLineEnding_1; +var markdownSpace$6 = markdownSpace_1; +var factorySpace$9 = factorySpace$i; function whitespaceFactory(effects, ok) { var seen; return start function start(code) { - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$9(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); @@ -35052,8 +36014,8 @@ function whitespaceFactory(effects, ok) { return start } - if (markdownSpace_1(code)) { - return factorySpace( + if (markdownSpace$6(code)) { + return factorySpace$9( effects, start, seen ? 'linePrefix' : 'lineSuffix' @@ -35064,7 +36026,10 @@ function whitespaceFactory(effects, ok) { } } -var factoryWhitespace = whitespaceFactory; +var factoryWhitespace$2 = whitespaceFactory; + +var markdownLineEnding$8 = markdownLineEnding_1; +var factorySpace$8 = factorySpace$i; function titleFactory(effects, ok, nok, type, markerType, stringType) { var marker; @@ -35102,11 +36067,11 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) { return nok(code) } // Note: blank lines can’t exist in content. - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$8(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); - return factorySpace(effects, atTitleBreak, 'linePrefix') + return factorySpace$8(effects, atTitleBreak, 'linePrefix') } effects.enter('chunkString', { @@ -35116,7 +36081,7 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) { } function title(code) { - if (code === marker || code === null || markdownLineEnding_1(code)) { + if (code === marker || code === null || markdownLineEnding$8(code)) { effects.exit('chunkString'); return atTitleBreak(code) } @@ -35135,9 +36100,18 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) { } } -var factoryTitle = titleFactory; +var factoryTitle$2 = titleFactory; -var definition = { +var markdownLineEnding$7 = markdownLineEnding_1; +var markdownLineEndingOrSpace$5 = markdownLineEndingOrSpace_1; +var normalizeIdentifier$3 = normalizeIdentifier_1; +var factoryDestination$1 = factoryDestination$2; +var factoryLabel$1 = factoryLabel$2; +var factorySpace$7 = factorySpace$i; +var factoryWhitespace$1 = factoryWhitespace$2; +var factoryTitle$1 = factoryTitle$2; + +var definition$2 = { name: 'definition', tokenize: tokenizeDefinition }; @@ -35153,7 +36127,7 @@ function tokenizeDefinition(effects, ok, nok) { function start(code) { effects.enter('definition'); - return factoryLabel.call( + return factoryLabel$1.call( self, effects, labelAfter, @@ -35165,7 +36139,7 @@ function tokenizeDefinition(effects, ok, nok) { } function labelAfter(code) { - identifier = normalizeIdentifier_1( + identifier = normalizeIdentifier$3( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ); @@ -35174,14 +36148,14 @@ function tokenizeDefinition(effects, ok, nok) { effects.consume(code); effects.exit('definitionMarker'); // Note: blank lines can’t exist in content. - return factoryWhitespace( + return factoryWhitespace$1( effects, - factoryDestination( + factoryDestination$1( effects, effects.attempt( titleConstruct, - factorySpace(effects, after, 'whitespace'), - factorySpace(effects, after, 'whitespace') + factorySpace$7(effects, after, 'whitespace'), + factorySpace$7(effects, after, 'whitespace') ), nok, 'definitionDestination', @@ -35197,7 +36171,7 @@ function tokenizeDefinition(effects, ok, nok) { } function after(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$7(code)) { effects.exit('definition'); if (self.parser.defined.indexOf(identifier) < 0) { @@ -35215,16 +36189,16 @@ function tokenizeTitle(effects, ok, nok) { return start function start(code) { - return markdownLineEndingOrSpace_1(code) - ? factoryWhitespace(effects, before)(code) + return markdownLineEndingOrSpace$5(code) + ? factoryWhitespace$1(effects, before)(code) : nok(code) } function before(code) { if (code === 34 || code === 39 || code === 40) { - return factoryTitle( + return factoryTitle$1( effects, - factorySpace(effects, after, 'whitespace'), + factorySpace$7(effects, after, 'whitespace'), nok, 'definitionTitle', 'definitionTitleMarker', @@ -35236,13 +36210,15 @@ function tokenizeTitle(effects, ok, nok) { } function after(code) { - return code === null || markdownLineEnding_1(code) ? ok(code) : nok(code) + return code === null || markdownLineEnding$7(code) ? ok(code) : nok(code) } } -var definition_1 = definition; +var definition_1$1 = definition$2; -var hardBreakEscape = { +var markdownLineEnding$6 = markdownLineEnding_1; + +var hardBreakEscape$1 = { name: 'hardBreakEscape', tokenize: tokenizeHardBreakEscape }; @@ -35258,7 +36234,7 @@ function tokenizeHardBreakEscape(effects, ok, nok) { } function open(code) { - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$6(code)) { effects.exit('escapeMarker'); effects.exit('hardBreakEscape'); return ok(code) @@ -35268,9 +36244,15 @@ function tokenizeHardBreakEscape(effects, ok, nok) { } } -var hardBreakEscape_1 = hardBreakEscape; +var hardBreakEscape_1 = hardBreakEscape$1; + +var markdownLineEnding$5 = markdownLineEnding_1; +var markdownLineEndingOrSpace$4 = markdownLineEndingOrSpace_1; +var markdownSpace$5 = markdownSpace_1; +var chunkedSplice$1 = chunkedSplice_1; +var factorySpace$6 = factorySpace$i; -var headingAtx = { +var headingAtx$1 = { name: 'headingAtx', tokenize: tokenizeHeadingAtx, resolve: resolveHeadingAtx @@ -35314,7 +36296,7 @@ function resolveHeadingAtx(events, context) { end: events[contentEnd][1].end, contentType: 'text' }; - chunkedSplice_1(events, contentStart, contentEnd - contentStart + 1, [ + chunkedSplice$1(events, contentStart, contentEnd - contentStart + 1, [ ['enter', content, context], ['enter', text, context], ['exit', text, context], @@ -35342,7 +36324,7 @@ function tokenizeHeadingAtx(effects, ok, nok) { return fenceOpenInside } - if (code === null || markdownLineEndingOrSpace_1(code)) { + if (code === null || markdownLineEndingOrSpace$4(code)) { effects.exit('atxHeadingSequence'); return self.interrupt ? ok(code) : headingBreak(code) } @@ -35356,13 +36338,13 @@ function tokenizeHeadingAtx(effects, ok, nok) { return sequence(code) } - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$5(code)) { effects.exit('atxHeading'); return ok(code) } - if (markdownSpace_1(code)) { - return factorySpace(effects, headingBreak, 'whitespace')(code) + if (markdownSpace$5(code)) { + return factorySpace$6(effects, headingBreak, 'whitespace')(code) } effects.enter('atxHeadingText'); @@ -35380,7 +36362,7 @@ function tokenizeHeadingAtx(effects, ok, nok) { } function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace_1(code)) { + if (code === null || code === 35 || markdownLineEndingOrSpace$4(code)) { effects.exit('atxHeadingText'); return headingBreak(code) } @@ -35390,7 +36372,7 @@ function tokenizeHeadingAtx(effects, ok, nok) { } } -var headingAtx_1 = headingAtx; +var headingAtx_1 = headingAtx$1; // This module is copied from . var basics = [ @@ -35458,14 +36440,24 @@ var basics = [ 'ul' ]; -var htmlBlockNames = basics; +var htmlBlockNames$1 = basics; // This module is copied from . var raws = ['pre', 'script', 'style', 'textarea']; -var htmlRawNames = raws; +var htmlRawNames$1 = raws; -var htmlFlow = { +var asciiAlpha$2 = asciiAlpha_1; +var asciiAlphanumeric$2 = asciiAlphanumeric_1; +var markdownLineEnding$4 = markdownLineEnding_1; +var markdownLineEndingOrSpace$3 = markdownLineEndingOrSpace_1; +var markdownSpace$4 = markdownSpace_1; +var fromCharCode = fromCharCode_1; +var htmlBlockNames = htmlBlockNames$1; +var htmlRawNames = htmlRawNames$1; +var partialBlankLine$1 = partialBlankLine_1; + +var htmlFlow$1 = { name: 'htmlFlow', tokenize: tokenizeHtmlFlow, resolveTo: resolveToHtmlFlow, @@ -35532,9 +36524,9 @@ function tokenizeHtmlFlow(effects, ok, nok) { return self.interrupt ? ok : continuationDeclarationInside } - if (asciiAlpha_1(code)) { + if (asciiAlpha$2(code)) { effects.consume(code); - buffer = fromCharCode_1(code); + buffer = fromCharCode(code); startTag = true; return tagName } @@ -35557,7 +36549,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return cdataOpenInside } - if (asciiAlpha_1(code)) { + if (asciiAlpha$2(code)) { effects.consume(code); kind = 4; return self.interrupt ? ok : continuationDeclarationInside @@ -35589,9 +36581,9 @@ function tokenizeHtmlFlow(effects, ok, nok) { } function tagCloseStart(code) { - if (asciiAlpha_1(code)) { + if (asciiAlpha$2(code)) { effects.consume(code); - buffer = fromCharCode_1(code); + buffer = fromCharCode(code); return tagName } @@ -35603,7 +36595,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { code === null || code === 47 || code === 62 || - markdownLineEndingOrSpace_1(code) + markdownLineEndingOrSpace$3(code) ) { if ( code !== 47 && @@ -35634,9 +36626,9 @@ function tokenizeHtmlFlow(effects, ok, nok) { : completeClosingTagAfter(code) } - if (code === 45 || asciiAlphanumeric_1(code)) { + if (code === 45 || asciiAlphanumeric$2(code)) { effects.consume(code); - buffer += fromCharCode_1(code); + buffer += fromCharCode(code); return tagName } @@ -35653,7 +36645,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { } function completeClosingTagAfter(code) { - if (markdownSpace_1(code)) { + if (markdownSpace$4(code)) { effects.consume(code); return completeClosingTagAfter } @@ -35667,12 +36659,12 @@ function tokenizeHtmlFlow(effects, ok, nok) { return completeEnd } - if (code === 58 || code === 95 || asciiAlpha_1(code)) { + if (code === 58 || code === 95 || asciiAlpha$2(code)) { effects.consume(code); return completeAttributeName } - if (markdownSpace_1(code)) { + if (markdownSpace$4(code)) { effects.consume(code); return completeAttributeNameBefore } @@ -35686,7 +36678,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { code === 46 || code === 58 || code === 95 || - asciiAlphanumeric_1(code) + asciiAlphanumeric$2(code) ) { effects.consume(code); return completeAttributeName @@ -35701,7 +36693,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return completeAttributeValueBefore } - if (markdownSpace_1(code)) { + if (markdownSpace$4(code)) { effects.consume(code); return completeAttributeNameAfter } @@ -35726,7 +36718,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return completeAttributeValueQuoted } - if (markdownSpace_1(code)) { + if (markdownSpace$4(code)) { effects.consume(code); return completeAttributeValueBefore } @@ -35741,7 +36733,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return completeAttributeValueQuotedAfter } - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$4(code)) { return nok(code) } @@ -35758,7 +36750,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { code === 61 || code === 62 || code === 96 || - markdownLineEndingOrSpace_1(code) + markdownLineEndingOrSpace$3(code) ) { return completeAttributeNameAfter(code) } @@ -35768,7 +36760,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { } function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace_1(code)) { + if (code === 47 || code === 62 || markdownSpace$4(code)) { return completeAttributeNameBefore(code) } @@ -35785,12 +36777,12 @@ function tokenizeHtmlFlow(effects, ok, nok) { } function completeAfter(code) { - if (markdownSpace_1(code)) { + if (markdownSpace$4(code)) { effects.consume(code); return completeAfter } - return code === null || markdownLineEnding_1(code) + return code === null || markdownLineEnding$4(code) ? continuation(code) : nok(code) } @@ -35821,7 +36813,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return continuationCharacterDataInside } - if (markdownLineEnding_1(code) && (kind === 6 || kind === 7)) { + if (markdownLineEnding$4(code) && (kind === 6 || kind === 7)) { return effects.check( nextBlankConstruct, continuationClose, @@ -35829,7 +36821,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { )(code) } - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$4(code)) { return continuationAtLineEnding(code) } @@ -35847,7 +36839,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { return done(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$4(code)) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); @@ -35883,9 +36875,9 @@ function tokenizeHtmlFlow(effects, ok, nok) { return continuationClose } - if (asciiAlpha_1(code) && buffer.length < 8) { + if (asciiAlpha$2(code) && buffer.length < 8) { effects.consume(code); - buffer += fromCharCode_1(code); + buffer += fromCharCode(code); return continuationRawEndTag } @@ -35911,7 +36903,7 @@ function tokenizeHtmlFlow(effects, ok, nok) { } function continuationClose(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$4(code)) { effects.exit('htmlFlowData'); return done(code) } @@ -35934,13 +36926,20 @@ function tokenizeNextBlank(effects, ok, nok) { effects.enter('lineEndingBlank'); effects.consume(code); effects.exit('lineEndingBlank'); - return effects.attempt(partialBlankLine_1, ok, nok) + return effects.attempt(partialBlankLine$1, ok, nok) } } -var htmlFlow_1 = htmlFlow; +var htmlFlow_1 = htmlFlow$1; + +var asciiAlpha$1 = asciiAlpha_1; +var asciiAlphanumeric$1 = asciiAlphanumeric_1; +var markdownLineEnding$3 = markdownLineEnding_1; +var markdownLineEndingOrSpace$2 = markdownLineEndingOrSpace_1; +var markdownSpace$3 = markdownSpace_1; +var factorySpace$5 = factorySpace$i; -var htmlText = { +var htmlText$1 = { name: 'htmlText', tokenize: tokenizeHtmlText }; @@ -35976,7 +36975,7 @@ function tokenizeHtmlText(effects, ok, nok) { return instruction } - if (asciiAlpha_1(code)) { + if (asciiAlpha$1(code)) { effects.consume(code); return tagOpen } @@ -35997,7 +36996,7 @@ function tokenizeHtmlText(effects, ok, nok) { return cdataOpen } - if (asciiAlpha_1(code)) { + if (asciiAlpha$1(code)) { effects.consume(code); return declaration } @@ -36045,7 +37044,7 @@ function tokenizeHtmlText(effects, ok, nok) { return commentClose } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = comment; return atLineEnding(code) } @@ -36082,7 +37081,7 @@ function tokenizeHtmlText(effects, ok, nok) { return cdataClose } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = cdata; return atLineEnding(code) } @@ -36118,7 +37117,7 @@ function tokenizeHtmlText(effects, ok, nok) { return end(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = declaration; return atLineEnding(code) } @@ -36137,7 +37136,7 @@ function tokenizeHtmlText(effects, ok, nok) { return instructionClose } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = instruction; return atLineEnding(code) } @@ -36151,7 +37150,7 @@ function tokenizeHtmlText(effects, ok, nok) { } function tagCloseStart(code) { - if (asciiAlpha_1(code)) { + if (asciiAlpha$1(code)) { effects.consume(code); return tagClose } @@ -36160,7 +37159,7 @@ function tokenizeHtmlText(effects, ok, nok) { } function tagClose(code) { - if (code === 45 || asciiAlphanumeric_1(code)) { + if (code === 45 || asciiAlphanumeric$1(code)) { effects.consume(code); return tagClose } @@ -36169,12 +37168,12 @@ function tokenizeHtmlText(effects, ok, nok) { } function tagCloseBetween(code) { - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = tagCloseBetween; return atLineEnding(code) } - if (markdownSpace_1(code)) { + if (markdownSpace$3(code)) { effects.consume(code); return tagCloseBetween } @@ -36183,12 +37182,12 @@ function tokenizeHtmlText(effects, ok, nok) { } function tagOpen(code) { - if (code === 45 || asciiAlphanumeric_1(code)) { + if (code === 45 || asciiAlphanumeric$1(code)) { effects.consume(code); return tagOpen } - if (code === 47 || code === 62 || markdownLineEndingOrSpace_1(code)) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace$2(code)) { return tagOpenBetween(code) } @@ -36201,17 +37200,17 @@ function tokenizeHtmlText(effects, ok, nok) { return end } - if (code === 58 || code === 95 || asciiAlpha_1(code)) { + if (code === 58 || code === 95 || asciiAlpha$1(code)) { effects.consume(code); return tagOpenAttributeName } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = tagOpenBetween; return atLineEnding(code) } - if (markdownSpace_1(code)) { + if (markdownSpace$3(code)) { effects.consume(code); return tagOpenBetween } @@ -36225,7 +37224,7 @@ function tokenizeHtmlText(effects, ok, nok) { code === 46 || code === 58 || code === 95 || - asciiAlphanumeric_1(code) + asciiAlphanumeric$1(code) ) { effects.consume(code); return tagOpenAttributeName @@ -36240,12 +37239,12 @@ function tokenizeHtmlText(effects, ok, nok) { return tagOpenAttributeValueBefore } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = tagOpenAttributeNameAfter; return atLineEnding(code) } - if (markdownSpace_1(code)) { + if (markdownSpace$3(code)) { effects.consume(code); return tagOpenAttributeNameAfter } @@ -36270,12 +37269,12 @@ function tokenizeHtmlText(effects, ok, nok) { return tagOpenAttributeValueQuoted } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = tagOpenAttributeValueBefore; return atLineEnding(code) } - if (markdownSpace_1(code)) { + if (markdownSpace$3(code)) { effects.consume(code); return tagOpenAttributeValueBefore } @@ -36295,7 +37294,7 @@ function tokenizeHtmlText(effects, ok, nok) { return nok(code) } - if (markdownLineEnding_1(code)) { + if (markdownLineEnding$3(code)) { returnState = tagOpenAttributeValueQuoted; return atLineEnding(code) } @@ -36305,7 +37304,7 @@ function tokenizeHtmlText(effects, ok, nok) { } function tagOpenAttributeValueQuotedAfter(code) { - if (code === 62 || code === 47 || markdownLineEndingOrSpace_1(code)) { + if (code === 62 || code === 47 || markdownLineEndingOrSpace$2(code)) { return tagOpenBetween(code) } @@ -36324,7 +37323,7 @@ function tokenizeHtmlText(effects, ok, nok) { return nok(code) } - if (code === 62 || markdownLineEndingOrSpace_1(code)) { + if (code === 62 || markdownLineEndingOrSpace$2(code)) { return tagOpenBetween(code) } @@ -36338,7 +37337,7 @@ function tokenizeHtmlText(effects, ok, nok) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); - return factorySpace( + return factorySpace$5( effects, afterPrefix, 'linePrefix', @@ -36365,9 +37364,20 @@ function tokenizeHtmlText(effects, ok, nok) { } } -var htmlText_1 = htmlText; +var htmlText_1 = htmlText$1; -var labelEnd = { +var markdownLineEndingOrSpace$1 = markdownLineEndingOrSpace_1; +var chunkedPush = chunkedPush_1; +var chunkedSplice = chunkedSplice_1; +var normalizeIdentifier$2 = normalizeIdentifier_1; +var resolveAll$1 = resolveAll_1; +var shallow$1 = shallow_1; +var factoryDestination = factoryDestination$2; +var factoryLabel = factoryLabel$2; +var factoryTitle = factoryTitle$2; +var factoryWhitespace = factoryWhitespace$2; + +var labelEnd$3 = { name: 'labelEnd', tokenize: tokenizeLabelEnd, resolveTo: resolveToLabelEnd, @@ -36453,48 +37463,48 @@ function resolveToLabelEnd(events, context) { group = { type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: shallow_1(events[open][1].start), - end: shallow_1(events[events.length - 1][1].end) + start: shallow$1(events[open][1].start), + end: shallow$1(events[events.length - 1][1].end) }; label = { type: 'label', - start: shallow_1(events[open][1].start), - end: shallow_1(events[close][1].end) + start: shallow$1(events[open][1].start), + end: shallow$1(events[close][1].end) }; text = { type: 'labelText', - start: shallow_1(events[open + offset + 2][1].end), - end: shallow_1(events[close - 2][1].start) + start: shallow$1(events[open + offset + 2][1].end), + end: shallow$1(events[close - 2][1].start) }; media = [ ['enter', group, context], ['enter', label, context] ]; // Opening marker. - media = chunkedPush_1(media, events.slice(open + 1, open + offset + 3)); // Text open. + media = chunkedPush(media, events.slice(open + 1, open + offset + 3)); // Text open. - media = chunkedPush_1(media, [['enter', text, context]]); // Between. + media = chunkedPush(media, [['enter', text, context]]); // Between. - media = chunkedPush_1( + media = chunkedPush( media, - resolveAll_1( + resolveAll$1( context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context ) ); // Text close, marker close, label close. - media = chunkedPush_1(media, [ + media = chunkedPush(media, [ ['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context] ]); // Reference, resource, or so. - media = chunkedPush_1(media, events.slice(close + 1)); // Media close. + media = chunkedPush(media, events.slice(close + 1)); // Media close. - media = chunkedPush_1(media, [['exit', group, context]]); - chunkedSplice_1(events, open, events.length, media); + media = chunkedPush(media, [['exit', group, context]]); + chunkedSplice(events, open, events.length, media); return events } @@ -36525,7 +37535,7 @@ function tokenizeLabelEnd(effects, ok, nok) { if (labelStart._inactive) return balanced(code) defined = self.parser.defined.indexOf( - normalizeIdentifier_1( + normalizeIdentifier$2( self.sliceSerialize({ start: labelStart.end, end: self.now() @@ -36599,7 +37609,7 @@ function tokenizeResource(effects, ok, nok) { } function destinationAfter(code) { - return markdownLineEndingOrSpace_1(code) + return markdownLineEndingOrSpace$1(code) ? factoryWhitespace(effects, between)(code) : end(code) } @@ -36650,7 +37660,7 @@ function tokenizeFullReference(effects, ok, nok) { function afterLabel(code) { return self.parser.defined.indexOf( - normalizeIdentifier_1( + normalizeIdentifier$2( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ) ) < 0 @@ -36683,12 +37693,14 @@ function tokenizeCollapsedReference(effects, ok, nok) { } } -var labelEnd_1 = labelEnd; +var labelEnd_1 = labelEnd$3; + +var labelEnd$2 = labelEnd_1; -var labelStartImage = { +var labelStartImage$1 = { name: 'labelStartImage', tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd_1.resolveAll + resolveAll: labelEnd$2.resolveAll }; function tokenizeLabelStartImage(effects, ok, nok) { @@ -36726,12 +37738,14 @@ function tokenizeLabelStartImage(effects, ok, nok) { } } -var labelStartImage_1 = labelStartImage; +var labelStartImage_1 = labelStartImage$1; -var labelStartLink = { +var labelEnd$1 = labelEnd_1; + +var labelStartLink$1 = { name: 'labelStartLink', tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd_1.resolveAll + resolveAll: labelEnd$1.resolveAll }; function tokenizeLabelStartLink(effects, ok, nok) { @@ -36758,9 +37772,11 @@ function tokenizeLabelStartLink(effects, ok, nok) { } } -var labelStartLink_1 = labelStartLink; +var labelStartLink_1 = labelStartLink$1; + +var factorySpace$4 = factorySpace$i; -var lineEnding = { +var lineEnding$1 = { name: 'lineEnding', tokenize: tokenizeLineEnding }; @@ -36772,13 +37788,17 @@ function tokenizeLineEnding(effects, ok) { effects.enter('lineEnding'); effects.consume(code); effects.exit('lineEnding'); - return factorySpace(effects, ok, 'linePrefix') + return factorySpace$4(effects, ok, 'linePrefix') } } -var lineEnding_1 = lineEnding; +var lineEnding_1 = lineEnding$1; -var thematicBreak = { +var markdownLineEnding$2 = markdownLineEnding_1; +var markdownSpace$2 = markdownSpace_1; +var factorySpace$3 = factorySpace$i; + +var thematicBreak$3 = { name: 'thematicBreak', tokenize: tokenizeThematicBreak }; @@ -36800,11 +37820,11 @@ function tokenizeThematicBreak(effects, ok, nok) { return sequence(code) } - if (markdownSpace_1(code)) { - return factorySpace(effects, atBreak, 'whitespace')(code) + if (markdownSpace$2(code)) { + return factorySpace$3(effects, atBreak, 'whitespace')(code) } - if (size < 3 || (code !== null && !markdownLineEnding_1(code))) { + if (size < 3 || (code !== null && !markdownLineEnding$2(code))) { return nok(code) } @@ -36824,9 +37844,17 @@ function tokenizeThematicBreak(effects, ok, nok) { } } -var thematicBreak_1 = thematicBreak; +var thematicBreak_1$1 = thematicBreak$3; + +var asciiDigit$1 = asciiDigit_1; +var markdownSpace$1 = markdownSpace_1; +var prefixSize = prefixSize_1; +var sizeChunks = sizeChunks_1; +var factorySpace$2 = factorySpace$i; +var partialBlankLine = partialBlankLine_1; +var thematicBreak$2 = thematicBreak_1$1; -var list = { +var list$2 = { name: 'list', tokenize: tokenizeListStart, continuation: { @@ -36845,7 +37873,7 @@ var indentConstruct = { function tokenizeListStart(effects, ok, nok) { var self = this; - var initialSize = prefixSize_1(self.events, 'linePrefix'); + var initialSize = prefixSize(self.events, 'linePrefix'); var size = 0; return start @@ -36859,7 +37887,7 @@ function tokenizeListStart(effects, ok, nok) { if ( kind === 'listUnordered' ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit_1(code) + : asciiDigit$1(code) ) { if (!self.containerState.type) { self.containerState.type = kind; @@ -36871,7 +37899,7 @@ function tokenizeListStart(effects, ok, nok) { if (kind === 'listUnordered') { effects.enter('listItemPrefix'); return code === 42 || code === 45 - ? effects.check(thematicBreak_1, nok, atMarker)(code) + ? effects.check(thematicBreak$2, nok, atMarker)(code) : atMarker(code) } @@ -36886,7 +37914,7 @@ function tokenizeListStart(effects, ok, nok) { } function inside(code) { - if (asciiDigit_1(code) && ++size < 10) { + if (asciiDigit$1(code) && ++size < 10) { effects.consume(code); return inside } @@ -36910,7 +37938,7 @@ function tokenizeListStart(effects, ok, nok) { effects.exit('listItemMarker'); self.containerState.marker = self.containerState.marker || code; return effects.check( - partialBlankLine_1, // Can’t be empty when interrupting. + partialBlankLine, // Can’t be empty when interrupting. self.interrupt ? nok : onBlank, effects.attempt( listItemPrefixWhitespaceConstruct, @@ -36927,7 +37955,7 @@ function tokenizeListStart(effects, ok, nok) { } function otherPrefix(code) { - if (markdownSpace_1(code)) { + if (markdownSpace$1(code)) { effects.enter('listItemPrefixWhitespace'); effects.consume(code); effects.exit('listItemPrefixWhitespace'); @@ -36939,7 +37967,7 @@ function tokenizeListStart(effects, ok, nok) { function endOfPrefix(code) { self.containerState.size = - initialSize + sizeChunks_1(self.sliceStream(effects.exit('listItemPrefix'))); + initialSize + sizeChunks(self.sliceStream(effects.exit('listItemPrefix'))); return ok(code) } } @@ -36947,17 +37975,24 @@ function tokenizeListStart(effects, ok, nok) { function tokenizeListContinuation(effects, ok, nok) { var self = this; self.containerState._closeFlow = undefined; - return effects.check(partialBlankLine_1, onBlank, notBlank) + return effects.check(partialBlankLine, onBlank, notBlank) function onBlank(code) { self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || - self.containerState.initialBlankLine; - return ok(code) + self.containerState.initialBlankLine; // We have a blank line. + // Still, try to consume at most the items size. + + return factorySpace$2( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) } function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace_1(code)) { + if (self.containerState.furtherBlankLines || !markdownSpace$1(code)) { self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined; return notInCurrentItem(code) } @@ -36971,9 +38006,9 @@ function tokenizeListContinuation(effects, ok, nok) { self.containerState._closeFlow = true; // As we’re closing flow, we’re no longer interrupting. self.interrupt = undefined; - return factorySpace( + return factorySpace$2( effects, - effects.attempt(list, ok, nok), + effects.attempt(list$2, ok, nok), 'linePrefix', self.parser.constructs.disable.null.indexOf('codeIndented') > -1 ? undefined @@ -36984,7 +38019,7 @@ function tokenizeListContinuation(effects, ok, nok) { function tokenizeIndent(effects, ok, nok) { var self = this; - return factorySpace( + return factorySpace$2( effects, afterPrefix, 'listItemIndent', @@ -36992,7 +38027,7 @@ function tokenizeIndent(effects, ok, nok) { ) function afterPrefix(code) { - return prefixSize_1(self.events, 'listItemIndent') === + return prefixSize(self.events, 'listItemIndent') === self.containerState.size ? ok(code) : nok(code) @@ -37005,7 +38040,7 @@ function tokenizeListEnd(effects) { function tokenizeListItemPrefixWhitespace(effects, ok, nok) { var self = this; - return factorySpace( + return factorySpace$2( effects, afterPrefix, 'listItemPrefixWhitespace', @@ -37015,16 +38050,20 @@ function tokenizeListItemPrefixWhitespace(effects, ok, nok) { ) function afterPrefix(code) { - return markdownSpace_1(code) || - !prefixSize_1(self.events, 'listItemPrefixWhitespace') + return markdownSpace$1(code) || + !prefixSize(self.events, 'listItemPrefixWhitespace') ? nok(code) : ok(code) } } -var list_1 = list; +var list_1$1 = list$2; + +var markdownLineEnding$1 = markdownLineEnding_1; +var shallow = shallow_1; +var factorySpace$1 = factorySpace$i; -var setextUnderline = { +var setextUnderline$1 = { name: 'setextUnderline', tokenize: tokenizeSetextUnderline, resolveTo: resolveToSetextUnderline @@ -37063,8 +38102,8 @@ function resolveToSetextUnderline(events, context) { heading = { type: 'setextHeading', - start: shallow_1(events[text][1].start), - end: shallow_1(events[events.length - 1][1].end) + start: shallow(events[text][1].start), + end: shallow(events[events.length - 1][1].end) }; // Change the paragraph to setext heading text. events[text][1].type = 'setextHeadingText'; // If we have definitions in the content, we’ll keep on having content, @@ -37073,7 +38112,7 @@ function resolveToSetextUnderline(events, context) { if (definition) { events.splice(text, 0, ['enter', heading, context]); events.splice(definition + 1, 0, ['exit', events[content][1], context]); - events[content][1].end = shallow_1(events[definition][1].end); + events[content][1].end = shallow(events[definition][1].end); } else { events[content][1] = heading; } // Add the heading exit at the end. @@ -37121,11 +38160,11 @@ function tokenizeSetextUnderline(effects, ok, nok) { } effects.exit('setextHeadingLineSequence'); - return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code) + return factorySpace$1(effects, closingSequenceEnd, 'lineSuffix')(code) } function closingSequenceEnd(code) { - if (code === null || markdownLineEnding_1(code)) { + if (code === null || markdownLineEnding$1(code)) { effects.exit('setextHeadingLine'); return ok(code) } @@ -37134,133 +38173,155 @@ function tokenizeSetextUnderline(effects, ok, nok) { } } -var setextUnderline_1 = setextUnderline; +var setextUnderline_1 = setextUnderline$1; + +Object.defineProperty(constructs$2, '__esModule', {value: true}); + +var text$1$1 = text$5; +var attention = attention_1; +var autolink = autolink_1; +var blockQuote = blockQuote_1; +var characterEscape$1 = characterEscape_1; +var characterReference$1 = characterReference_1; +var codeFenced = codeFenced_1; +var codeIndented = codeIndented_1; +var codeText = codeText_1; +var definition$1 = definition_1$1; +var hardBreakEscape = hardBreakEscape_1; +var headingAtx = headingAtx_1; +var htmlFlow = htmlFlow_1; +var htmlText = htmlText_1; +var labelEnd = labelEnd_1; +var labelStartImage = labelStartImage_1; +var labelStartLink = labelStartLink_1; +var lineEnding = lineEnding_1; +var list$1 = list_1$1; +var setextUnderline = setextUnderline_1; +var thematicBreak$1 = thematicBreak_1$1; var document$2 = { - 42: list_1, + 42: list$1, // Asterisk - 43: list_1, + 43: list$1, // Plus sign - 45: list_1, + 45: list$1, // Dash - 48: list_1, + 48: list$1, // 0 - 49: list_1, + 49: list$1, // 1 - 50: list_1, + 50: list$1, // 2 - 51: list_1, + 51: list$1, // 3 - 52: list_1, + 52: list$1, // 4 - 53: list_1, + 53: list$1, // 5 - 54: list_1, + 54: list$1, // 6 - 55: list_1, + 55: list$1, // 7 - 56: list_1, + 56: list$1, // 8 - 57: list_1, + 57: list$1, // 9 - 62: blockQuote_1 // Greater than + 62: blockQuote // Greater than }; var contentInitial = { - 91: definition_1 // Left square bracket + 91: definition$1 // Left square bracket }; var flowInitial = { - '-2': codeIndented_1, + '-2': codeIndented, // Horizontal tab - '-1': codeIndented_1, + '-1': codeIndented, // Virtual space - 32: codeIndented_1 // Space + 32: codeIndented // Space }; -var flow$1 = { - 35: headingAtx_1, +var flow$6 = { + 35: headingAtx, // Number sign - 42: thematicBreak_1, + 42: thematicBreak$1, // Asterisk - 45: [setextUnderline_1, thematicBreak_1], + 45: [setextUnderline, thematicBreak$1], // Dash - 60: htmlFlow_1, + 60: htmlFlow, // Less than - 61: setextUnderline_1, + 61: setextUnderline, // Equals to - 95: thematicBreak_1, + 95: thematicBreak$1, // Underscore - 96: codeFenced_1, + 96: codeFenced, // Grave accent - 126: codeFenced_1 // Tilde + 126: codeFenced // Tilde }; -var string$1 = { - 38: characterReference_1, +var string = { + 38: characterReference$1, // Ampersand - 92: characterEscape_1 // Backslash + 92: characterEscape$1 // Backslash }; -var text$1 = { - '-5': lineEnding_1, +var text$3 = { + '-5': lineEnding, // Carriage return - '-4': lineEnding_1, + '-4': lineEnding, // Line feed - '-3': lineEnding_1, + '-3': lineEnding, // Carriage return + line feed - 33: labelStartImage_1, + 33: labelStartImage, // Exclamation mark - 38: characterReference_1, + 38: characterReference$1, // Ampersand - 42: attention_1, + 42: attention, // Asterisk - 60: [autolink_1, htmlText_1], + 60: [autolink, htmlText], // Less than - 91: labelStartLink_1, + 91: labelStartLink, // Left square bracket - 92: [hardBreakEscape_1, characterEscape_1], + 92: [hardBreakEscape, characterEscape$1], // Backslash - 93: labelEnd_1, + 93: labelEnd, // Right square bracket - 95: attention_1, + 95: attention, // Underscore - 96: codeText_1 // Grave accent + 96: codeText // Grave accent }; var insideSpan = { - null: [attention_1, text_1.resolver] + null: [attention, text$1$1.resolver] }; var disable = { null: [] }; -var contentInitial_1 = contentInitial; -var disable_1 = disable; -var document_1 = document$2; -var flow_1 = flow$1; -var flowInitial_1 = flowInitial; -var insideSpan_1 = insideSpan; -var string_1$1 = string$1; -var text_1$1 = text$1; - -var constructs$1 = /*#__PURE__*/Object.defineProperty({ - contentInitial: contentInitial_1, - disable: disable_1, - document: document_1, - flow: flow_1, - flowInitial: flowInitial_1, - insideSpan: insideSpan_1, - string: string_1$1, - text: text_1$1 -}, '__esModule', {value: true}); - -function parse$7(options) { +constructs$2.contentInitial = contentInitial; +constructs$2.disable = disable; +constructs$2.document = document$2; +constructs$2.flow = flow$6; +constructs$2.flowInitial = flowInitial; +constructs$2.insideSpan = insideSpan; +constructs$2.string = string; +constructs$2.text = text$3; + +var content = content$3; +var document$1 = document$3; +var flow$5 = flow$7; +var text$2 = text$5; +var combineExtensions$1 = combineExtensions_1; +var createTokenizer = createTokenizer_1; +var miniflat = miniflat_1; +var constructs$1 = constructs$2; + +function parse$3(options) { var settings = options || {}; var parser = { defined: [], - constructs: combineExtensions_1( - [constructs$1].concat(miniflat_1(settings.extensions)) + constructs: combineExtensions$1( + [constructs$1].concat(miniflat(settings.extensions)) ), content: create(content), document: create(document$1), - flow: create(flow), - string: create(text_1.string), - text: create(text_1.text) + flow: create(flow$5), + string: create(text$2.string), + text: create(text$2.text) }; return parser @@ -37268,14 +38329,14 @@ function parse$7(options) { return creator function creator(from) { - return createTokenizer_1(parser, initializer, from) + return createTokenizer(parser, initializer, from) } } } -var parse_1$3 = parse$7; +var parse_1$1 = parse$3; -var search$1 = /[\0\t\n\r]/g; +var search = /[\0\t\n\r]/g; function preprocess() { var start = true; @@ -37304,8 +38365,8 @@ function preprocess() { } while (startPosition < value.length) { - search$1.lastIndex = startPosition; - match = search$1.exec(value); + search.lastIndex = startPosition; + match = search.exec(value); endPosition = match ? match.index : value.length; code = value.charCodeAt(endPosition); @@ -37361,40 +38422,4548 @@ function preprocess() { var preprocess_1 = preprocess; -function postprocess(events) { - while (!subtokenize_1(events)) { +var subtokenize = subtokenize_1; + +function postprocess$1(events) { + while (!subtokenize(events)) { // Empty } return events } -var postprocess_1 = postprocess; +var postprocess_1 = postprocess$1; + +const AEli$1 = "Æ"; +const AElig$1 = "Æ"; +const AM$1 = "&"; +const AMP$1 = "&"; +const Aacut$1 = "Á"; +const Aacute$1 = "Á"; +const Abreve$1 = "Ă"; +const Acir$1 = "Â"; +const Acirc$1 = "Â"; +const Acy$1 = "А"; +const Afr$1 = "𝔄"; +const Agrav$1 = "À"; +const Agrave$1 = "À"; +const Alpha$1 = "Α"; +const Amacr$1 = "Ā"; +const And$1 = "⩓"; +const Aogon$1 = "Ą"; +const Aopf$1 = "𝔸"; +const ApplyFunction$1 = "⁡"; +const Arin$1 = "Å"; +const Aring$1 = "Å"; +const Ascr$1 = "𝒜"; +const Assign$1 = "≔"; +const Atild$1 = "Ã"; +const Atilde$1 = "Ã"; +const Aum$1 = "Ä"; +const Auml$1 = "Ä"; +const Backslash$1 = "∖"; +const Barv$1 = "⫧"; +const Barwed$1 = "⌆"; +const Bcy$1 = "Б"; +const Because$1 = "∵"; +const Bernoullis$1 = "ℬ"; +const Beta$1 = "Β"; +const Bfr$1 = "𝔅"; +const Bopf$1 = "𝔹"; +const Breve$1 = "˘"; +const Bscr$1 = "ℬ"; +const Bumpeq$1 = "≎"; +const CHcy$1 = "Ч"; +const COP$1 = "©"; +const COPY$1 = "©"; +const Cacute$1 = "Ć"; +const Cap$1 = "⋒"; +const CapitalDifferentialD$1 = "ⅅ"; +const Cayleys$1 = "ℭ"; +const Ccaron$1 = "Č"; +const Ccedi$1 = "Ç"; +const Ccedil$1 = "Ç"; +const Ccirc$1 = "Ĉ"; +const Cconint$1 = "∰"; +const Cdot$1 = "Ċ"; +const Cedilla$1 = "¸"; +const CenterDot$1 = "·"; +const Cfr$1 = "ℭ"; +const Chi$1 = "Χ"; +const CircleDot$1 = "⊙"; +const CircleMinus$1 = "⊖"; +const CirclePlus$1 = "⊕"; +const CircleTimes$1 = "⊗"; +const ClockwiseContourIntegral$1 = "∲"; +const CloseCurlyDoubleQuote$1 = "”"; +const CloseCurlyQuote$1 = "’"; +const Colon$1 = "∷"; +const Colone$1 = "⩴"; +const Congruent$1 = "≡"; +const Conint$1 = "∯"; +const ContourIntegral$1 = "∮"; +const Copf$1 = "ℂ"; +const Coproduct$1 = "∐"; +const CounterClockwiseContourIntegral$1 = "∳"; +const Cross$1 = "⨯"; +const Cscr$1 = "𝒞"; +const Cup$1 = "⋓"; +const CupCap$1 = "≍"; +const DD$1 = "ⅅ"; +const DDotrahd$1 = "⤑"; +const DJcy$1 = "Ђ"; +const DScy$1 = "Ѕ"; +const DZcy$1 = "Џ"; +const Dagger$1 = "‡"; +const Darr$1 = "↡"; +const Dashv$1 = "⫤"; +const Dcaron$1 = "Ď"; +const Dcy$1 = "Д"; +const Del$1 = "∇"; +const Delta$1 = "Δ"; +const Dfr$1 = "𝔇"; +const DiacriticalAcute$1 = "´"; +const DiacriticalDot$1 = "˙"; +const DiacriticalDoubleAcute$1 = "˝"; +const DiacriticalGrave$1 = "`"; +const DiacriticalTilde$1 = "˜"; +const Diamond$1 = "⋄"; +const DifferentialD$1 = "ⅆ"; +const Dopf$1 = "𝔻"; +const Dot$1 = "¨"; +const DotDot$1 = "⃜"; +const DotEqual$1 = "≐"; +const DoubleContourIntegral$1 = "∯"; +const DoubleDot$1 = "¨"; +const DoubleDownArrow$1 = "⇓"; +const DoubleLeftArrow$1 = "⇐"; +const DoubleLeftRightArrow$1 = "⇔"; +const DoubleLeftTee$1 = "⫤"; +const DoubleLongLeftArrow$1 = "⟸"; +const DoubleLongLeftRightArrow$1 = "⟺"; +const DoubleLongRightArrow$1 = "⟹"; +const DoubleRightArrow$1 = "⇒"; +const DoubleRightTee$1 = "⊨"; +const DoubleUpArrow$1 = "⇑"; +const DoubleUpDownArrow$1 = "⇕"; +const DoubleVerticalBar$1 = "∥"; +const DownArrow$1 = "↓"; +const DownArrowBar$1 = "⤓"; +const DownArrowUpArrow$1 = "⇵"; +const DownBreve$1 = "̑"; +const DownLeftRightVector$1 = "⥐"; +const DownLeftTeeVector$1 = "⥞"; +const DownLeftVector$1 = "↽"; +const DownLeftVectorBar$1 = "⥖"; +const DownRightTeeVector$1 = "⥟"; +const DownRightVector$1 = "⇁"; +const DownRightVectorBar$1 = "⥗"; +const DownTee$1 = "⊤"; +const DownTeeArrow$1 = "↧"; +const Downarrow$1 = "⇓"; +const Dscr$1 = "𝒟"; +const Dstrok$1 = "Đ"; +const ENG$1 = "Ŋ"; +const ET$1 = "Ð"; +const ETH$1 = "Ð"; +const Eacut$1 = "É"; +const Eacute$1 = "É"; +const Ecaron$1 = "Ě"; +const Ecir$1 = "Ê"; +const Ecirc$1 = "Ê"; +const Ecy$1 = "Э"; +const Edot$1 = "Ė"; +const Efr$1 = "𝔈"; +const Egrav$1 = "È"; +const Egrave$1 = "È"; +const Element$1 = "∈"; +const Emacr$1 = "Ē"; +const EmptySmallSquare$1 = "◻"; +const EmptyVerySmallSquare$1 = "▫"; +const Eogon$1 = "Ę"; +const Eopf$1 = "𝔼"; +const Epsilon$1 = "Ε"; +const Equal$1 = "⩵"; +const EqualTilde$1 = "≂"; +const Equilibrium$1 = "⇌"; +const Escr$1 = "ℰ"; +const Esim$1 = "⩳"; +const Eta$1 = "Η"; +const Eum$1 = "Ë"; +const Euml$1 = "Ë"; +const Exists$1 = "∃"; +const ExponentialE$1 = "ⅇ"; +const Fcy$1 = "Ф"; +const Ffr$1 = "𝔉"; +const FilledSmallSquare$1 = "◼"; +const FilledVerySmallSquare$1 = "▪"; +const Fopf$1 = "𝔽"; +const ForAll$1 = "∀"; +const Fouriertrf$1 = "ℱ"; +const Fscr$1 = "ℱ"; +const GJcy$1 = "Ѓ"; +const G$1 = ">"; +const GT$1 = ">"; +const Gamma$1 = "Γ"; +const Gammad$1 = "Ϝ"; +const Gbreve$1 = "Ğ"; +const Gcedil$1 = "Ģ"; +const Gcirc$1 = "Ĝ"; +const Gcy$1 = "Г"; +const Gdot$1 = "Ġ"; +const Gfr$1 = "𝔊"; +const Gg$1 = "⋙"; +const Gopf$1 = "𝔾"; +const GreaterEqual$1 = "≥"; +const GreaterEqualLess$1 = "⋛"; +const GreaterFullEqual$1 = "≧"; +const GreaterGreater$1 = "⪢"; +const GreaterLess$1 = "≷"; +const GreaterSlantEqual$1 = "⩾"; +const GreaterTilde$1 = "≳"; +const Gscr$1 = "𝒢"; +const Gt$1 = "≫"; +const HARDcy$1 = "Ъ"; +const Hacek$1 = "ˇ"; +const Hat$1 = "^"; +const Hcirc$1 = "Ĥ"; +const Hfr$1 = "ℌ"; +const HilbertSpace$1 = "ℋ"; +const Hopf$1 = "ℍ"; +const HorizontalLine$1 = "─"; +const Hscr$1 = "ℋ"; +const Hstrok$1 = "Ħ"; +const HumpDownHump$1 = "≎"; +const HumpEqual$1 = "≏"; +const IEcy$1 = "Е"; +const IJlig$1 = "IJ"; +const IOcy$1 = "Ё"; +const Iacut$1 = "Í"; +const Iacute$1 = "Í"; +const Icir$1 = "Î"; +const Icirc$1 = "Î"; +const Icy$1 = "И"; +const Idot$1 = "İ"; +const Ifr$1 = "ℑ"; +const Igrav$1 = "Ì"; +const Igrave$1 = "Ì"; +const Im$1 = "ℑ"; +const Imacr$1 = "Ī"; +const ImaginaryI$1 = "ⅈ"; +const Implies$1 = "⇒"; +const Int$1 = "∬"; +const Integral$1 = "∫"; +const Intersection$1 = "⋂"; +const InvisibleComma$1 = "⁣"; +const InvisibleTimes$1 = "⁢"; +const Iogon$1 = "Į"; +const Iopf$1 = "𝕀"; +const Iota$1 = "Ι"; +const Iscr$1 = "ℐ"; +const Itilde$1 = "Ĩ"; +const Iukcy$1 = "І"; +const Ium$1 = "Ï"; +const Iuml$1 = "Ï"; +const Jcirc$1 = "Ĵ"; +const Jcy$1 = "Й"; +const Jfr$1 = "𝔍"; +const Jopf$1 = "𝕁"; +const Jscr$1 = "𝒥"; +const Jsercy$1 = "Ј"; +const Jukcy$1 = "Є"; +const KHcy$1 = "Х"; +const KJcy$1 = "Ќ"; +const Kappa$1 = "Κ"; +const Kcedil$1 = "Ķ"; +const Kcy$1 = "К"; +const Kfr$1 = "𝔎"; +const Kopf$1 = "𝕂"; +const Kscr$1 = "𝒦"; +const LJcy$1 = "Љ"; +const L$1 = "<"; +const LT$1 = "<"; +const Lacute$1 = "Ĺ"; +const Lambda$1 = "Λ"; +const Lang$1 = "⟪"; +const Laplacetrf$1 = "ℒ"; +const Larr$1 = "↞"; +const Lcaron$1 = "Ľ"; +const Lcedil$1 = "Ļ"; +const Lcy$1 = "Л"; +const LeftAngleBracket$1 = "⟨"; +const LeftArrow$1 = "←"; +const LeftArrowBar$1 = "⇤"; +const LeftArrowRightArrow$1 = "⇆"; +const LeftCeiling$1 = "⌈"; +const LeftDoubleBracket$1 = "⟦"; +const LeftDownTeeVector$1 = "⥡"; +const LeftDownVector$1 = "⇃"; +const LeftDownVectorBar$1 = "⥙"; +const LeftFloor$1 = "⌊"; +const LeftRightArrow$1 = "↔"; +const LeftRightVector$1 = "⥎"; +const LeftTee$1 = "⊣"; +const LeftTeeArrow$1 = "↤"; +const LeftTeeVector$1 = "⥚"; +const LeftTriangle$1 = "⊲"; +const LeftTriangleBar$1 = "⧏"; +const LeftTriangleEqual$1 = "⊴"; +const LeftUpDownVector$1 = "⥑"; +const LeftUpTeeVector$1 = "⥠"; +const LeftUpVector$1 = "↿"; +const LeftUpVectorBar$1 = "⥘"; +const LeftVector$1 = "↼"; +const LeftVectorBar$1 = "⥒"; +const Leftarrow$1 = "⇐"; +const Leftrightarrow$1 = "⇔"; +const LessEqualGreater$1 = "⋚"; +const LessFullEqual$1 = "≦"; +const LessGreater$1 = "≶"; +const LessLess$1 = "⪡"; +const LessSlantEqual$1 = "⩽"; +const LessTilde$1 = "≲"; +const Lfr$1 = "𝔏"; +const Ll$1 = "⋘"; +const Lleftarrow$1 = "⇚"; +const Lmidot$1 = "Ŀ"; +const LongLeftArrow$1 = "⟵"; +const LongLeftRightArrow$1 = "⟷"; +const LongRightArrow$1 = "⟶"; +const Longleftarrow$1 = "⟸"; +const Longleftrightarrow$1 = "⟺"; +const Longrightarrow$1 = "⟹"; +const Lopf$1 = "𝕃"; +const LowerLeftArrow$1 = "↙"; +const LowerRightArrow$1 = "↘"; +const Lscr$1 = "ℒ"; +const Lsh$1 = "↰"; +const Lstrok$1 = "Ł"; +const Lt$1 = "≪"; +const Mcy$1 = "М"; +const MediumSpace$1 = " "; +const Mellintrf$1 = "ℳ"; +const Mfr$1 = "𝔐"; +const MinusPlus$1 = "∓"; +const Mopf$1 = "𝕄"; +const Mscr$1 = "ℳ"; +const Mu$1 = "Μ"; +const NJcy$1 = "Њ"; +const Nacute$1 = "Ń"; +const Ncaron$1 = "Ň"; +const Ncedil$1 = "Ņ"; +const Ncy$1 = "Н"; +const NegativeMediumSpace$1 = "​"; +const NegativeThickSpace$1 = "​"; +const NegativeThinSpace$1 = "​"; +const NegativeVeryThinSpace$1 = "​"; +const NestedGreaterGreater$1 = "≫"; +const NestedLessLess$1 = "≪"; +const NewLine$1 = "\n"; +const Nfr$1 = "𝔑"; +const NoBreak$1 = "⁠"; +const NonBreakingSpace$1 = " "; +const Nopf$1 = "ℕ"; +const Not$1 = "⫬"; +const NotCongruent$1 = "≢"; +const NotCupCap$1 = "≭"; +const NotDoubleVerticalBar$1 = "∦"; +const NotElement$1 = "∉"; +const NotEqual$1 = "≠"; +const NotEqualTilde$1 = "≂̸"; +const NotExists$1 = "∄"; +const NotGreater$1 = "≯"; +const NotGreaterEqual$1 = "≱"; +const NotGreaterFullEqual$1 = "≧̸"; +const NotGreaterGreater$1 = "≫̸"; +const NotGreaterLess$1 = "≹"; +const NotGreaterSlantEqual$1 = "⩾̸"; +const NotGreaterTilde$1 = "≵"; +const NotHumpDownHump$1 = "≎̸"; +const NotHumpEqual$1 = "≏̸"; +const NotLeftTriangle$1 = "⋪"; +const NotLeftTriangleBar$1 = "⧏̸"; +const NotLeftTriangleEqual$1 = "⋬"; +const NotLess$1 = "≮"; +const NotLessEqual$1 = "≰"; +const NotLessGreater$1 = "≸"; +const NotLessLess$1 = "≪̸"; +const NotLessSlantEqual$1 = "⩽̸"; +const NotLessTilde$1 = "≴"; +const NotNestedGreaterGreater$1 = "⪢̸"; +const NotNestedLessLess$1 = "⪡̸"; +const NotPrecedes$1 = "⊀"; +const NotPrecedesEqual$1 = "⪯̸"; +const NotPrecedesSlantEqual$1 = "⋠"; +const NotReverseElement$1 = "∌"; +const NotRightTriangle$1 = "⋫"; +const NotRightTriangleBar$1 = "⧐̸"; +const NotRightTriangleEqual$1 = "⋭"; +const NotSquareSubset$1 = "⊏̸"; +const NotSquareSubsetEqual$1 = "⋢"; +const NotSquareSuperset$1 = "⊐̸"; +const NotSquareSupersetEqual$1 = "⋣"; +const NotSubset$1 = "⊂⃒"; +const NotSubsetEqual$1 = "⊈"; +const NotSucceeds$1 = "⊁"; +const NotSucceedsEqual$1 = "⪰̸"; +const NotSucceedsSlantEqual$1 = "⋡"; +const NotSucceedsTilde$1 = "≿̸"; +const NotSuperset$1 = "⊃⃒"; +const NotSupersetEqual$1 = "⊉"; +const NotTilde$1 = "≁"; +const NotTildeEqual$1 = "≄"; +const NotTildeFullEqual$1 = "≇"; +const NotTildeTilde$1 = "≉"; +const NotVerticalBar$1 = "∤"; +const Nscr$1 = "𝒩"; +const Ntild$1 = "Ñ"; +const Ntilde$1 = "Ñ"; +const Nu$1 = "Ν"; +const OElig$1 = "Œ"; +const Oacut$1 = "Ó"; +const Oacute$1 = "Ó"; +const Ocir$1 = "Ô"; +const Ocirc$1 = "Ô"; +const Ocy$1 = "О"; +const Odblac$1 = "Ő"; +const Ofr$1 = "𝔒"; +const Ograv$1 = "Ò"; +const Ograve$1 = "Ò"; +const Omacr$1 = "Ō"; +const Omega$1 = "Ω"; +const Omicron$1 = "Ο"; +const Oopf$1 = "𝕆"; +const OpenCurlyDoubleQuote$1 = "“"; +const OpenCurlyQuote$1 = "‘"; +const Or$1 = "⩔"; +const Oscr$1 = "𝒪"; +const Oslas$1 = "Ø"; +const Oslash$1 = "Ø"; +const Otild$1 = "Õ"; +const Otilde$1 = "Õ"; +const Otimes$1 = "⨷"; +const Oum$1 = "Ö"; +const Ouml$1 = "Ö"; +const OverBar$1 = "‾"; +const OverBrace$1 = "⏞"; +const OverBracket$1 = "⎴"; +const OverParenthesis$1 = "⏜"; +const PartialD$1 = "∂"; +const Pcy$1 = "П"; +const Pfr$1 = "𝔓"; +const Phi$1 = "Φ"; +const Pi$1 = "Π"; +const PlusMinus$1 = "±"; +const Poincareplane$1 = "ℌ"; +const Popf$1 = "ℙ"; +const Pr$1 = "⪻"; +const Precedes$1 = "≺"; +const PrecedesEqual$1 = "⪯"; +const PrecedesSlantEqual$1 = "≼"; +const PrecedesTilde$1 = "≾"; +const Prime$1 = "″"; +const Product$1 = "∏"; +const Proportion$1 = "∷"; +const Proportional$1 = "∝"; +const Pscr$1 = "𝒫"; +const Psi$1 = "Ψ"; +const QUO$1 = "\""; +const QUOT$1 = "\""; +const Qfr$1 = "𝔔"; +const Qopf$1 = "ℚ"; +const Qscr$1 = "𝒬"; +const RBarr$1 = "⤐"; +const RE$1 = "®"; +const REG$1 = "®"; +const Racute$1 = "Ŕ"; +const Rang$1 = "⟫"; +const Rarr$1 = "↠"; +const Rarrtl$1 = "⤖"; +const Rcaron$1 = "Ř"; +const Rcedil$1 = "Ŗ"; +const Rcy$1 = "Р"; +const Re$1 = "ℜ"; +const ReverseElement$1 = "∋"; +const ReverseEquilibrium$1 = "⇋"; +const ReverseUpEquilibrium$1 = "⥯"; +const Rfr$1 = "ℜ"; +const Rho$1 = "Ρ"; +const RightAngleBracket$1 = "⟩"; +const RightArrow$1 = "→"; +const RightArrowBar$1 = "⇥"; +const RightArrowLeftArrow$1 = "⇄"; +const RightCeiling$1 = "⌉"; +const RightDoubleBracket$1 = "⟧"; +const RightDownTeeVector$1 = "⥝"; +const RightDownVector$1 = "⇂"; +const RightDownVectorBar$1 = "⥕"; +const RightFloor$1 = "⌋"; +const RightTee$1 = "⊢"; +const RightTeeArrow$1 = "↦"; +const RightTeeVector$1 = "⥛"; +const RightTriangle$1 = "⊳"; +const RightTriangleBar$1 = "⧐"; +const RightTriangleEqual$1 = "⊵"; +const RightUpDownVector$1 = "⥏"; +const RightUpTeeVector$1 = "⥜"; +const RightUpVector$1 = "↾"; +const RightUpVectorBar$1 = "⥔"; +const RightVector$1 = "⇀"; +const RightVectorBar$1 = "⥓"; +const Rightarrow$1 = "⇒"; +const Ropf$1 = "ℝ"; +const RoundImplies$1 = "⥰"; +const Rrightarrow$1 = "⇛"; +const Rscr$1 = "ℛ"; +const Rsh$1 = "↱"; +const RuleDelayed$1 = "⧴"; +const SHCHcy$1 = "Щ"; +const SHcy$1 = "Ш"; +const SOFTcy$1 = "Ь"; +const Sacute$1 = "Ś"; +const Sc$1 = "⪼"; +const Scaron$1 = "Š"; +const Scedil$1 = "Ş"; +const Scirc$1 = "Ŝ"; +const Scy$1 = "С"; +const Sfr$1 = "𝔖"; +const ShortDownArrow$1 = "↓"; +const ShortLeftArrow$1 = "←"; +const ShortRightArrow$1 = "→"; +const ShortUpArrow$1 = "↑"; +const Sigma$1 = "Σ"; +const SmallCircle$1 = "∘"; +const Sopf$1 = "𝕊"; +const Sqrt$1 = "√"; +const Square$1 = "□"; +const SquareIntersection$1 = "⊓"; +const SquareSubset$1 = "⊏"; +const SquareSubsetEqual$1 = "⊑"; +const SquareSuperset$1 = "⊐"; +const SquareSupersetEqual$1 = "⊒"; +const SquareUnion$1 = "⊔"; +const Sscr$1 = "𝒮"; +const Star$1 = "⋆"; +const Sub$1 = "⋐"; +const Subset$1 = "⋐"; +const SubsetEqual$1 = "⊆"; +const Succeeds$1 = "≻"; +const SucceedsEqual$1 = "⪰"; +const SucceedsSlantEqual$1 = "≽"; +const SucceedsTilde$1 = "≿"; +const SuchThat$1 = "∋"; +const Sum$1 = "∑"; +const Sup$1 = "⋑"; +const Superset$1 = "⊃"; +const SupersetEqual$1 = "⊇"; +const Supset$1 = "⋑"; +const THOR$1 = "Þ"; +const THORN$1 = "Þ"; +const TRADE$1 = "™"; +const TSHcy$1 = "Ћ"; +const TScy$1 = "Ц"; +const Tab$1 = "\t"; +const Tau$1 = "Τ"; +const Tcaron$1 = "Ť"; +const Tcedil$1 = "Ţ"; +const Tcy$1 = "Т"; +const Tfr$1 = "𝔗"; +const Therefore$1 = "∴"; +const Theta$1 = "Θ"; +const ThickSpace$1 = "  "; +const ThinSpace$1 = " "; +const Tilde$1 = "∼"; +const TildeEqual$1 = "≃"; +const TildeFullEqual$1 = "≅"; +const TildeTilde$1 = "≈"; +const Topf$1 = "𝕋"; +const TripleDot$1 = "⃛"; +const Tscr$1 = "𝒯"; +const Tstrok$1 = "Ŧ"; +const Uacut$1 = "Ú"; +const Uacute$1 = "Ú"; +const Uarr$1 = "↟"; +const Uarrocir$1 = "⥉"; +const Ubrcy$1 = "Ў"; +const Ubreve$1 = "Ŭ"; +const Ucir$1 = "Û"; +const Ucirc$1 = "Û"; +const Ucy$1 = "У"; +const Udblac$1 = "Ű"; +const Ufr$1 = "𝔘"; +const Ugrav$1 = "Ù"; +const Ugrave$1 = "Ù"; +const Umacr$1 = "Ū"; +const UnderBar$1 = "_"; +const UnderBrace$1 = "⏟"; +const UnderBracket$1 = "⎵"; +const UnderParenthesis$1 = "⏝"; +const Union$1 = "⋃"; +const UnionPlus$1 = "⊎"; +const Uogon$1 = "Ų"; +const Uopf$1 = "𝕌"; +const UpArrow$1 = "↑"; +const UpArrowBar$1 = "⤒"; +const UpArrowDownArrow$1 = "⇅"; +const UpDownArrow$1 = "↕"; +const UpEquilibrium$1 = "⥮"; +const UpTee$1 = "⊥"; +const UpTeeArrow$1 = "↥"; +const Uparrow$1 = "⇑"; +const Updownarrow$1 = "⇕"; +const UpperLeftArrow$1 = "↖"; +const UpperRightArrow$1 = "↗"; +const Upsi$1 = "ϒ"; +const Upsilon$1 = "Υ"; +const Uring$1 = "Ů"; +const Uscr$1 = "𝒰"; +const Utilde$1 = "Ũ"; +const Uum$1 = "Ü"; +const Uuml$1 = "Ü"; +const VDash$1 = "⊫"; +const Vbar$1 = "⫫"; +const Vcy$1 = "В"; +const Vdash$1 = "⊩"; +const Vdashl$1 = "⫦"; +const Vee$1 = "⋁"; +const Verbar$1 = "‖"; +const Vert$1 = "‖"; +const VerticalBar$1 = "∣"; +const VerticalLine$1 = "|"; +const VerticalSeparator$1 = "❘"; +const VerticalTilde$1 = "≀"; +const VeryThinSpace$1 = " "; +const Vfr$1 = "𝔙"; +const Vopf$1 = "𝕍"; +const Vscr$1 = "𝒱"; +const Vvdash$1 = "⊪"; +const Wcirc$1 = "Ŵ"; +const Wedge$1 = "⋀"; +const Wfr$1 = "𝔚"; +const Wopf$1 = "𝕎"; +const Wscr$1 = "𝒲"; +const Xfr$1 = "𝔛"; +const Xi$1 = "Ξ"; +const Xopf$1 = "𝕏"; +const Xscr$1 = "𝒳"; +const YAcy$1 = "Я"; +const YIcy$1 = "Ї"; +const YUcy$1 = "Ю"; +const Yacut$1 = "Ý"; +const Yacute$1 = "Ý"; +const Ycirc$1 = "Ŷ"; +const Ycy$1 = "Ы"; +const Yfr$1 = "𝔜"; +const Yopf$1 = "𝕐"; +const Yscr$1 = "𝒴"; +const Yuml$1 = "Ÿ"; +const ZHcy$1 = "Ж"; +const Zacute$1 = "Ź"; +const Zcaron$1 = "Ž"; +const Zcy$1 = "З"; +const Zdot$1 = "Ż"; +const ZeroWidthSpace$1 = "​"; +const Zeta$1 = "Ζ"; +const Zfr$1 = "ℨ"; +const Zopf$1 = "ℤ"; +const Zscr$1 = "𝒵"; +const aacut$1 = "á"; +const aacute$1 = "á"; +const abreve$1 = "ă"; +const ac$1 = "∾"; +const acE$1 = "∾̳"; +const acd$1 = "∿"; +const acir$1 = "â"; +const acirc$1 = "â"; +const acut$1 = "´"; +const acute$1 = "´"; +const acy$1 = "а"; +const aeli$1 = "æ"; +const aelig$1 = "æ"; +const af$1 = "⁡"; +const afr$1 = "𝔞"; +const agrav$1 = "à"; +const agrave$1 = "à"; +const alefsym$1 = "ℵ"; +const aleph$1 = "ℵ"; +const alpha$1 = "α"; +const amacr$1 = "ā"; +const amalg$1 = "⨿"; +const am$1 = "&"; +const amp$1 = "&"; +const and$1 = "∧"; +const andand$1 = "⩕"; +const andd$1 = "⩜"; +const andslope$1 = "⩘"; +const andv$1 = "⩚"; +const ang$1 = "∠"; +const ange$1 = "⦤"; +const angle$1 = "∠"; +const angmsd$1 = "∡"; +const angmsdaa$1 = "⦨"; +const angmsdab$1 = "⦩"; +const angmsdac$1 = "⦪"; +const angmsdad$1 = "⦫"; +const angmsdae$1 = "⦬"; +const angmsdaf$1 = "⦭"; +const angmsdag$1 = "⦮"; +const angmsdah$1 = "⦯"; +const angrt$1 = "∟"; +const angrtvb$1 = "⊾"; +const angrtvbd$1 = "⦝"; +const angsph$1 = "∢"; +const angst$1 = "Å"; +const angzarr$1 = "⍼"; +const aogon$1 = "ą"; +const aopf$1 = "𝕒"; +const ap$1 = "≈"; +const apE$1 = "⩰"; +const apacir$1 = "⩯"; +const ape$1 = "≊"; +const apid$1 = "≋"; +const apos$1 = "'"; +const approx$1 = "≈"; +const approxeq$1 = "≊"; +const arin$1 = "å"; +const aring$1 = "å"; +const ascr$1 = "𝒶"; +const ast$1 = "*"; +const asymp$1 = "≈"; +const asympeq$1 = "≍"; +const atild$1 = "ã"; +const atilde$1 = "ã"; +const aum$1 = "ä"; +const auml$1 = "ä"; +const awconint$1 = "∳"; +const awint$1 = "⨑"; +const bNot$1 = "⫭"; +const backcong$1 = "≌"; +const backepsilon$1 = "϶"; +const backprime$1 = "‵"; +const backsim$1 = "∽"; +const backsimeq$1 = "⋍"; +const barvee$1 = "⊽"; +const barwed$1 = "⌅"; +const barwedge$1 = "⌅"; +const bbrk$1 = "⎵"; +const bbrktbrk$1 = "⎶"; +const bcong$1 = "≌"; +const bcy$1 = "б"; +const bdquo$1 = "„"; +const becaus$1 = "∵"; +const because$1 = "∵"; +const bemptyv$1 = "⦰"; +const bepsi$1 = "϶"; +const bernou$1 = "ℬ"; +const beta$1 = "β"; +const beth$1 = "ℶ"; +const between$1 = "≬"; +const bfr$1 = "𝔟"; +const bigcap$1 = "⋂"; +const bigcirc$1 = "◯"; +const bigcup$1 = "⋃"; +const bigodot$1 = "⨀"; +const bigoplus$1 = "⨁"; +const bigotimes$1 = "⨂"; +const bigsqcup$1 = "⨆"; +const bigstar$1 = "★"; +const bigtriangledown$1 = "▽"; +const bigtriangleup$1 = "△"; +const biguplus$1 = "⨄"; +const bigvee$1 = "⋁"; +const bigwedge$1 = "⋀"; +const bkarow$1 = "⤍"; +const blacklozenge$1 = "⧫"; +const blacksquare$1 = "▪"; +const blacktriangle$1 = "▴"; +const blacktriangledown$1 = "▾"; +const blacktriangleleft$1 = "◂"; +const blacktriangleright$1 = "▸"; +const blank$1 = "␣"; +const blk12$1 = "▒"; +const blk14$1 = "░"; +const blk34$1 = "▓"; +const block$1 = "█"; +const bne$1 = "=⃥"; +const bnequiv$1 = "≡⃥"; +const bnot$1 = "⌐"; +const bopf$1 = "𝕓"; +const bot$1 = "⊥"; +const bottom$1 = "⊥"; +const bowtie$1 = "⋈"; +const boxDL$1 = "╗"; +const boxDR$1 = "╔"; +const boxDl$1 = "╖"; +const boxDr$1 = "╓"; +const boxH$1 = "═"; +const boxHD$1 = "╦"; +const boxHU$1 = "╩"; +const boxHd$1 = "╤"; +const boxHu$1 = "╧"; +const boxUL$1 = "╝"; +const boxUR$1 = "╚"; +const boxUl$1 = "╜"; +const boxUr$1 = "╙"; +const boxV$1 = "║"; +const boxVH$1 = "╬"; +const boxVL$1 = "╣"; +const boxVR$1 = "╠"; +const boxVh$1 = "╫"; +const boxVl$1 = "╢"; +const boxVr$1 = "╟"; +const boxbox$1 = "⧉"; +const boxdL$1 = "╕"; +const boxdR$1 = "╒"; +const boxdl$1 = "┐"; +const boxdr$1 = "┌"; +const boxh$1 = "─"; +const boxhD$1 = "╥"; +const boxhU$1 = "╨"; +const boxhd$1 = "┬"; +const boxhu$1 = "┴"; +const boxminus$1 = "⊟"; +const boxplus$1 = "⊞"; +const boxtimes$1 = "⊠"; +const boxuL$1 = "╛"; +const boxuR$1 = "╘"; +const boxul$1 = "┘"; +const boxur$1 = "└"; +const boxv$1 = "│"; +const boxvH$1 = "╪"; +const boxvL$1 = "╡"; +const boxvR$1 = "╞"; +const boxvh$1 = "┼"; +const boxvl$1 = "┤"; +const boxvr$1 = "├"; +const bprime$1 = "‵"; +const breve$1 = "˘"; +const brvba$1 = "¦"; +const brvbar$1 = "¦"; +const bscr$1 = "𝒷"; +const bsemi$1 = "⁏"; +const bsim$1 = "∽"; +const bsime$1 = "⋍"; +const bsol$1 = "\\"; +const bsolb$1 = "⧅"; +const bsolhsub$1 = "⟈"; +const bull$1 = "•"; +const bullet$1 = "•"; +const bump$1 = "≎"; +const bumpE$1 = "⪮"; +const bumpe$1 = "≏"; +const bumpeq$1 = "≏"; +const cacute$1 = "ć"; +const cap$1 = "∩"; +const capand$1 = "⩄"; +const capbrcup$1 = "⩉"; +const capcap$1 = "⩋"; +const capcup$1 = "⩇"; +const capdot$1 = "⩀"; +const caps$1 = "∩︀"; +const caret$1 = "⁁"; +const caron$1 = "ˇ"; +const ccaps$1 = "⩍"; +const ccaron$1 = "č"; +const ccedi$1 = "ç"; +const ccedil$1 = "ç"; +const ccirc$1 = "ĉ"; +const ccups$1 = "⩌"; +const ccupssm$1 = "⩐"; +const cdot$1 = "ċ"; +const cedi$1 = "¸"; +const cedil$1 = "¸"; +const cemptyv$1 = "⦲"; +const cen$1 = "¢"; +const cent$1 = "¢"; +const centerdot$1 = "·"; +const cfr$1 = "𝔠"; +const chcy$1 = "ч"; +const check$2 = "✓"; +const checkmark$1 = "✓"; +const chi$1 = "χ"; +const cir$1 = "○"; +const cirE$1 = "⧃"; +const circ$1 = "ˆ"; +const circeq$1 = "≗"; +const circlearrowleft$1 = "↺"; +const circlearrowright$1 = "↻"; +const circledR$1 = "®"; +const circledS$1 = "Ⓢ"; +const circledast$1 = "⊛"; +const circledcirc$1 = "⊚"; +const circleddash$1 = "⊝"; +const cire$1 = "≗"; +const cirfnint$1 = "⨐"; +const cirmid$1 = "⫯"; +const cirscir$1 = "⧂"; +const clubs$1 = "♣"; +const clubsuit$1 = "♣"; +const colon$1 = ":"; +const colone$1 = "≔"; +const coloneq$1 = "≔"; +const comma$1 = ","; +const commat$1 = "@"; +const comp$1 = "∁"; +const compfn$1 = "∘"; +const complement$1 = "∁"; +const complexes$1 = "ℂ"; +const cong$1 = "≅"; +const congdot$1 = "⩭"; +const conint$1 = "∮"; +const copf$1 = "𝕔"; +const coprod$1 = "∐"; +const cop$1 = "©"; +const copy$1 = "©"; +const copysr$1 = "℗"; +const crarr$1 = "↵"; +const cross$1 = "✗"; +const cscr$1 = "𝒸"; +const csub$1 = "⫏"; +const csube$1 = "⫑"; +const csup$1 = "⫐"; +const csupe$1 = "⫒"; +const ctdot$1 = "⋯"; +const cudarrl$1 = "⤸"; +const cudarrr$1 = "⤵"; +const cuepr$1 = "⋞"; +const cuesc$1 = "⋟"; +const cularr$1 = "↶"; +const cularrp$1 = "⤽"; +const cup$1 = "∪"; +const cupbrcap$1 = "⩈"; +const cupcap$1 = "⩆"; +const cupcup$1 = "⩊"; +const cupdot$1 = "⊍"; +const cupor$1 = "⩅"; +const cups$1 = "∪︀"; +const curarr$1 = "↷"; +const curarrm$1 = "⤼"; +const curlyeqprec$1 = "⋞"; +const curlyeqsucc$1 = "⋟"; +const curlyvee$1 = "⋎"; +const curlywedge$1 = "⋏"; +const curre$1 = "¤"; +const curren$1 = "¤"; +const curvearrowleft$1 = "↶"; +const curvearrowright$1 = "↷"; +const cuvee$1 = "⋎"; +const cuwed$1 = "⋏"; +const cwconint$1 = "∲"; +const cwint$1 = "∱"; +const cylcty$1 = "⌭"; +const dArr$1 = "⇓"; +const dHar$1 = "⥥"; +const dagger$1 = "†"; +const daleth$1 = "ℸ"; +const darr$1 = "↓"; +const dash$1 = "‐"; +const dashv$1 = "⊣"; +const dbkarow$1 = "⤏"; +const dblac$1 = "˝"; +const dcaron$1 = "ď"; +const dcy$1 = "д"; +const dd$1 = "ⅆ"; +const ddagger$1 = "‡"; +const ddarr$1 = "⇊"; +const ddotseq$1 = "⩷"; +const de$1 = "°"; +const deg$1 = "°"; +const delta$1 = "δ"; +const demptyv$1 = "⦱"; +const dfisht$1 = "⥿"; +const dfr$1 = "𝔡"; +const dharl$1 = "⇃"; +const dharr$1 = "⇂"; +const diam$1 = "⋄"; +const diamond$1 = "⋄"; +const diamondsuit$1 = "♦"; +const diams$1 = "♦"; +const die$1 = "¨"; +const digamma$1 = "ϝ"; +const disin$1 = "⋲"; +const div$1 = "÷"; +const divid$1 = "÷"; +const divide$1 = "÷"; +const divideontimes$1 = "⋇"; +const divonx$1 = "⋇"; +const djcy$1 = "ђ"; +const dlcorn$1 = "⌞"; +const dlcrop$1 = "⌍"; +const dollar$1 = "$"; +const dopf$1 = "𝕕"; +const dot$1 = "˙"; +const doteq$1 = "≐"; +const doteqdot$1 = "≑"; +const dotminus$1 = "∸"; +const dotplus$1 = "∔"; +const dotsquare$1 = "⊡"; +const doublebarwedge$1 = "⌆"; +const downarrow$1 = "↓"; +const downdownarrows$1 = "⇊"; +const downharpoonleft$1 = "⇃"; +const downharpoonright$1 = "⇂"; +const drbkarow$1 = "⤐"; +const drcorn$1 = "⌟"; +const drcrop$1 = "⌌"; +const dscr$1 = "𝒹"; +const dscy$1 = "ѕ"; +const dsol$1 = "⧶"; +const dstrok$1 = "đ"; +const dtdot$1 = "⋱"; +const dtri$1 = "▿"; +const dtrif$1 = "▾"; +const duarr$1 = "⇵"; +const duhar$1 = "⥯"; +const dwangle$1 = "⦦"; +const dzcy$1 = "џ"; +const dzigrarr$1 = "⟿"; +const eDDot$1 = "⩷"; +const eDot$1 = "≑"; +const eacut$1 = "é"; +const eacute$1 = "é"; +const easter$1 = "⩮"; +const ecaron$1 = "ě"; +const ecir$1 = "ê"; +const ecirc$1 = "ê"; +const ecolon$1 = "≕"; +const ecy$1 = "э"; +const edot$1 = "ė"; +const ee$1 = "ⅇ"; +const efDot$1 = "≒"; +const efr$1 = "𝔢"; +const eg$1 = "⪚"; +const egrav$1 = "è"; +const egrave$1 = "è"; +const egs$1 = "⪖"; +const egsdot$1 = "⪘"; +const el$1 = "⪙"; +const elinters$1 = "⏧"; +const ell$1 = "ℓ"; +const els$1 = "⪕"; +const elsdot$1 = "⪗"; +const emacr$1 = "ē"; +const empty$1 = "∅"; +const emptyset$1 = "∅"; +const emptyv$1 = "∅"; +const emsp13$1 = " "; +const emsp14$1 = " "; +const emsp$1 = " "; +const eng$1 = "ŋ"; +const ensp$1 = " "; +const eogon$1 = "ę"; +const eopf$1 = "𝕖"; +const epar$1 = "⋕"; +const eparsl$1 = "⧣"; +const eplus$1 = "⩱"; +const epsi$1 = "ε"; +const epsilon$1 = "ε"; +const epsiv$1 = "ϵ"; +const eqcirc$1 = "≖"; +const eqcolon$1 = "≕"; +const eqsim$1 = "≂"; +const eqslantgtr$1 = "⪖"; +const eqslantless$1 = "⪕"; +const equals$1 = "="; +const equest$1 = "≟"; +const equiv$1 = "≡"; +const equivDD$1 = "⩸"; +const eqvparsl$1 = "⧥"; +const erDot$1 = "≓"; +const erarr$1 = "⥱"; +const escr$1 = "ℯ"; +const esdot$1 = "≐"; +const esim$1 = "≂"; +const eta$1 = "η"; +const et$1 = "ð"; +const eth$1 = "ð"; +const eum$1 = "ë"; +const euml$1 = "ë"; +const euro$1 = "€"; +const excl$1 = "!"; +const exist$1 = "∃"; +const expectation$1 = "ℰ"; +const exponentiale$1 = "ⅇ"; +const fallingdotseq$1 = "≒"; +const fcy$1 = "ф"; +const female$1 = "♀"; +const ffilig$1 = "ffi"; +const fflig$1 = "ff"; +const ffllig$1 = "ffl"; +const ffr$1 = "𝔣"; +const filig$1 = "fi"; +const fjlig$1 = "fj"; +const flat$1 = "♭"; +const fllig$1 = "fl"; +const fltns$1 = "▱"; +const fnof$1 = "ƒ"; +const fopf$1 = "𝕗"; +const forall$1 = "∀"; +const fork$1 = "⋔"; +const forkv$1 = "⫙"; +const fpartint$1 = "⨍"; +const frac1$1 = "¼"; +const frac12$1 = "½"; +const frac13$1 = "⅓"; +const frac14$1 = "¼"; +const frac15$1 = "⅕"; +const frac16$1 = "⅙"; +const frac18$1 = "⅛"; +const frac23$1 = "⅔"; +const frac25$1 = "⅖"; +const frac3$1 = "¾"; +const frac34$1 = "¾"; +const frac35$1 = "⅗"; +const frac38$1 = "⅜"; +const frac45$1 = "⅘"; +const frac56$1 = "⅚"; +const frac58$1 = "⅝"; +const frac78$1 = "⅞"; +const frasl$1 = "⁄"; +const frown$1 = "⌢"; +const fscr$1 = "𝒻"; +const gE$1 = "≧"; +const gEl$1 = "⪌"; +const gacute$1 = "ǵ"; +const gamma$1 = "γ"; +const gammad$1 = "ϝ"; +const gap$1 = "⪆"; +const gbreve$1 = "ğ"; +const gcirc$1 = "ĝ"; +const gcy$1 = "г"; +const gdot$1 = "ġ"; +const ge$1 = "≥"; +const gel$1 = "⋛"; +const geq$1 = "≥"; +const geqq$1 = "≧"; +const geqslant$1 = "⩾"; +const ges$1 = "⩾"; +const gescc$1 = "⪩"; +const gesdot$1 = "⪀"; +const gesdoto$1 = "⪂"; +const gesdotol$1 = "⪄"; +const gesl$1 = "⋛︀"; +const gesles$1 = "⪔"; +const gfr$1 = "𝔤"; +const gg$1 = "≫"; +const ggg$1 = "⋙"; +const gimel$1 = "ℷ"; +const gjcy$1 = "ѓ"; +const gl$1 = "≷"; +const glE$1 = "⪒"; +const gla$1 = "⪥"; +const glj$1 = "⪤"; +const gnE$1 = "≩"; +const gnap$1 = "⪊"; +const gnapprox$1 = "⪊"; +const gne$1 = "⪈"; +const gneq$1 = "⪈"; +const gneqq$1 = "≩"; +const gnsim$1 = "⋧"; +const gopf$1 = "𝕘"; +const grave$1 = "`"; +const gscr$1 = "ℊ"; +const gsim$1 = "≳"; +const gsime$1 = "⪎"; +const gsiml$1 = "⪐"; +const g$1 = ">"; +const gt$1 = ">"; +const gtcc$1 = "⪧"; +const gtcir$1 = "⩺"; +const gtdot$1 = "⋗"; +const gtlPar$1 = "⦕"; +const gtquest$1 = "⩼"; +const gtrapprox$1 = "⪆"; +const gtrarr$1 = "⥸"; +const gtrdot$1 = "⋗"; +const gtreqless$1 = "⋛"; +const gtreqqless$1 = "⪌"; +const gtrless$1 = "≷"; +const gtrsim$1 = "≳"; +const gvertneqq$1 = "≩︀"; +const gvnE$1 = "≩︀"; +const hArr$1 = "⇔"; +const hairsp$1 = " "; +const half$1 = "½"; +const hamilt$1 = "ℋ"; +const hardcy$1 = "ъ"; +const harr$1 = "↔"; +const harrcir$1 = "⥈"; +const harrw$1 = "↭"; +const hbar$1 = "ℏ"; +const hcirc$1 = "ĥ"; +const hearts$1 = "♥"; +const heartsuit$1 = "♥"; +const hellip$1 = "…"; +const hercon$1 = "⊹"; +const hfr$1 = "𝔥"; +const hksearow$1 = "⤥"; +const hkswarow$1 = "⤦"; +const hoarr$1 = "⇿"; +const homtht$1 = "∻"; +const hookleftarrow$1 = "↩"; +const hookrightarrow$1 = "↪"; +const hopf$1 = "𝕙"; +const horbar$1 = "―"; +const hscr$1 = "𝒽"; +const hslash$1 = "ℏ"; +const hstrok$1 = "ħ"; +const hybull$1 = "⁃"; +const hyphen$1 = "‐"; +const iacut$1 = "í"; +const iacute$1 = "í"; +const ic$1 = "⁣"; +const icir$1 = "î"; +const icirc$1 = "î"; +const icy$1 = "и"; +const iecy$1 = "е"; +const iexc$1 = "¡"; +const iexcl$1 = "¡"; +const iff$1 = "⇔"; +const ifr$1 = "𝔦"; +const igrav$1 = "ì"; +const igrave$1 = "ì"; +const ii$1 = "ⅈ"; +const iiiint$1 = "⨌"; +const iiint$1 = "∭"; +const iinfin$1 = "⧜"; +const iiota$1 = "℩"; +const ijlig$1 = "ij"; +const imacr$1 = "ī"; +const image$2 = "ℑ"; +const imagline$1 = "ℐ"; +const imagpart$1 = "ℑ"; +const imath$1 = "ı"; +const imof$1 = "⊷"; +const imped$1 = "Ƶ"; +const incare$1 = "℅"; +const infin$1 = "∞"; +const infintie$1 = "⧝"; +const inodot$1 = "ı"; +const int$2 = "∫"; +const intcal$1 = "⊺"; +const integers$1 = "ℤ"; +const intercal$1 = "⊺"; +const intlarhk$1 = "⨗"; +const intprod$1 = "⨼"; +const iocy$1 = "ё"; +const iogon$1 = "į"; +const iopf$1 = "𝕚"; +const iota$1 = "ι"; +const iprod$1 = "⨼"; +const iques$1 = "¿"; +const iquest$1 = "¿"; +const iscr$1 = "𝒾"; +const isin$1 = "∈"; +const isinE$1 = "⋹"; +const isindot$1 = "⋵"; +const isins$1 = "⋴"; +const isinsv$1 = "⋳"; +const isinv$1 = "∈"; +const it$1 = "⁢"; +const itilde$1 = "ĩ"; +const iukcy$1 = "і"; +const ium$1 = "ï"; +const iuml$1 = "ï"; +const jcirc$1 = "ĵ"; +const jcy$1 = "й"; +const jfr$1 = "𝔧"; +const jmath$1 = "ȷ"; +const jopf$1 = "𝕛"; +const jscr$1 = "𝒿"; +const jsercy$1 = "ј"; +const jukcy$1 = "є"; +const kappa$1 = "κ"; +const kappav$1 = "ϰ"; +const kcedil$1 = "ķ"; +const kcy$1 = "к"; +const kfr$1 = "𝔨"; +const kgreen$1 = "ĸ"; +const khcy$1 = "х"; +const kjcy$1 = "ќ"; +const kopf$1 = "𝕜"; +const kscr$1 = "𝓀"; +const lAarr$1 = "⇚"; +const lArr$1 = "⇐"; +const lAtail$1 = "⤛"; +const lBarr$1 = "⤎"; +const lE$1 = "≦"; +const lEg$1 = "⪋"; +const lHar$1 = "⥢"; +const lacute$1 = "ĺ"; +const laemptyv$1 = "⦴"; +const lagran$1 = "ℒ"; +const lambda$1 = "λ"; +const lang$1 = "⟨"; +const langd$1 = "⦑"; +const langle$1 = "⟨"; +const lap$1 = "⪅"; +const laqu$1 = "«"; +const laquo$1 = "«"; +const larr$1 = "←"; +const larrb$1 = "⇤"; +const larrbfs$1 = "⤟"; +const larrfs$1 = "⤝"; +const larrhk$1 = "↩"; +const larrlp$1 = "↫"; +const larrpl$1 = "⤹"; +const larrsim$1 = "⥳"; +const larrtl$1 = "↢"; +const lat$1 = "⪫"; +const latail$1 = "⤙"; +const late$1 = "⪭"; +const lates$1 = "⪭︀"; +const lbarr$1 = "⤌"; +const lbbrk$1 = "❲"; +const lbrace$1 = "{"; +const lbrack$1 = "["; +const lbrke$1 = "⦋"; +const lbrksld$1 = "⦏"; +const lbrkslu$1 = "⦍"; +const lcaron$1 = "ľ"; +const lcedil$1 = "ļ"; +const lceil$1 = "⌈"; +const lcub$1 = "{"; +const lcy$1 = "л"; +const ldca$1 = "⤶"; +const ldquo$1 = "“"; +const ldquor$1 = "„"; +const ldrdhar$1 = "⥧"; +const ldrushar$1 = "⥋"; +const ldsh$1 = "↲"; +const le$1 = "≤"; +const leftarrow$1 = "←"; +const leftarrowtail$1 = "↢"; +const leftharpoondown$1 = "↽"; +const leftharpoonup$1 = "↼"; +const leftleftarrows$1 = "⇇"; +const leftrightarrow$1 = "↔"; +const leftrightarrows$1 = "⇆"; +const leftrightharpoons$1 = "⇋"; +const leftrightsquigarrow$1 = "↭"; +const leftthreetimes$1 = "⋋"; +const leg$1 = "⋚"; +const leq$1 = "≤"; +const leqq$1 = "≦"; +const leqslant$1 = "⩽"; +const les$1 = "⩽"; +const lescc$1 = "⪨"; +const lesdot$1 = "⩿"; +const lesdoto$1 = "⪁"; +const lesdotor$1 = "⪃"; +const lesg$1 = "⋚︀"; +const lesges$1 = "⪓"; +const lessapprox$1 = "⪅"; +const lessdot$1 = "⋖"; +const lesseqgtr$1 = "⋚"; +const lesseqqgtr$1 = "⪋"; +const lessgtr$1 = "≶"; +const lesssim$1 = "≲"; +const lfisht$1 = "⥼"; +const lfloor$1 = "⌊"; +const lfr$1 = "𝔩"; +const lg$1 = "≶"; +const lgE$1 = "⪑"; +const lhard$1 = "↽"; +const lharu$1 = "↼"; +const lharul$1 = "⥪"; +const lhblk$1 = "▄"; +const ljcy$1 = "љ"; +const ll$1 = "≪"; +const llarr$1 = "⇇"; +const llcorner$1 = "⌞"; +const llhard$1 = "⥫"; +const lltri$1 = "◺"; +const lmidot$1 = "ŀ"; +const lmoust$1 = "⎰"; +const lmoustache$1 = "⎰"; +const lnE$1 = "≨"; +const lnap$1 = "⪉"; +const lnapprox$1 = "⪉"; +const lne$1 = "⪇"; +const lneq$1 = "⪇"; +const lneqq$1 = "≨"; +const lnsim$1 = "⋦"; +const loang$1 = "⟬"; +const loarr$1 = "⇽"; +const lobrk$1 = "⟦"; +const longleftarrow$1 = "⟵"; +const longleftrightarrow$1 = "⟷"; +const longmapsto$1 = "⟼"; +const longrightarrow$1 = "⟶"; +const looparrowleft$1 = "↫"; +const looparrowright$1 = "↬"; +const lopar$1 = "⦅"; +const lopf$1 = "𝕝"; +const loplus$1 = "⨭"; +const lotimes$1 = "⨴"; +const lowast$1 = "∗"; +const lowbar$1 = "_"; +const loz$1 = "◊"; +const lozenge$1 = "◊"; +const lozf$1 = "⧫"; +const lpar$1 = "("; +const lparlt$1 = "⦓"; +const lrarr$1 = "⇆"; +const lrcorner$1 = "⌟"; +const lrhar$1 = "⇋"; +const lrhard$1 = "⥭"; +const lrm$1 = "‎"; +const lrtri$1 = "⊿"; +const lsaquo$1 = "‹"; +const lscr$1 = "𝓁"; +const lsh$1 = "↰"; +const lsim$1 = "≲"; +const lsime$1 = "⪍"; +const lsimg$1 = "⪏"; +const lsqb$1 = "["; +const lsquo$1 = "‘"; +const lsquor$1 = "‚"; +const lstrok$1 = "ł"; +const l$1 = "<"; +const lt$2 = "<"; +const ltcc$1 = "⪦"; +const ltcir$1 = "⩹"; +const ltdot$1 = "⋖"; +const lthree$1 = "⋋"; +const ltimes$1 = "⋉"; +const ltlarr$1 = "⥶"; +const ltquest$1 = "⩻"; +const ltrPar$1 = "⦖"; +const ltri$1 = "◃"; +const ltrie$1 = "⊴"; +const ltrif$1 = "◂"; +const lurdshar$1 = "⥊"; +const luruhar$1 = "⥦"; +const lvertneqq$1 = "≨︀"; +const lvnE$1 = "≨︀"; +const mDDot$1 = "∺"; +const mac$1 = "¯"; +const macr$1 = "¯"; +const male$1 = "♂"; +const malt$1 = "✠"; +const maltese$1 = "✠"; +const map$4 = "↦"; +const mapsto$1 = "↦"; +const mapstodown$1 = "↧"; +const mapstoleft$1 = "↤"; +const mapstoup$1 = "↥"; +const marker$1 = "▮"; +const mcomma$1 = "⨩"; +const mcy$1 = "м"; +const mdash$1 = "—"; +const measuredangle$1 = "∡"; +const mfr$1 = "𝔪"; +const mho$1 = "℧"; +const micr$1 = "µ"; +const micro$1 = "µ"; +const mid$1 = "∣"; +const midast$1 = "*"; +const midcir$1 = "⫰"; +const middo$1 = "·"; +const middot$1 = "·"; +const minus$1 = "−"; +const minusb$1 = "⊟"; +const minusd$1 = "∸"; +const minusdu$1 = "⨪"; +const mlcp$1 = "⫛"; +const mldr$1 = "…"; +const mnplus$1 = "∓"; +const models$1 = "⊧"; +const mopf$1 = "𝕞"; +const mp$1 = "∓"; +const mscr$1 = "𝓂"; +const mstpos$1 = "∾"; +const mu$1 = "μ"; +const multimap$1 = "⊸"; +const mumap$1 = "⊸"; +const nGg$1 = "⋙̸"; +const nGt$1 = "≫⃒"; +const nGtv$1 = "≫̸"; +const nLeftarrow$1 = "⇍"; +const nLeftrightarrow$1 = "⇎"; +const nLl$1 = "⋘̸"; +const nLt$1 = "≪⃒"; +const nLtv$1 = "≪̸"; +const nRightarrow$1 = "⇏"; +const nVDash$1 = "⊯"; +const nVdash$1 = "⊮"; +const nabla$1 = "∇"; +const nacute$1 = "ń"; +const nang$1 = "∠⃒"; +const nap$1 = "≉"; +const napE$1 = "⩰̸"; +const napid$1 = "≋̸"; +const napos$1 = "ʼn"; +const napprox$1 = "≉"; +const natur$1 = "♮"; +const natural$1 = "♮"; +const naturals$1 = "ℕ"; +const nbs$1 = " "; +const nbsp$1 = " "; +const nbump$1 = "≎̸"; +const nbumpe$1 = "≏̸"; +const ncap$1 = "⩃"; +const ncaron$1 = "ň"; +const ncedil$1 = "ņ"; +const ncong$1 = "≇"; +const ncongdot$1 = "⩭̸"; +const ncup$1 = "⩂"; +const ncy$1 = "н"; +const ndash$1 = "–"; +const ne$1 = "≠"; +const neArr$1 = "⇗"; +const nearhk$1 = "⤤"; +const nearr$1 = "↗"; +const nearrow$1 = "↗"; +const nedot$1 = "≐̸"; +const nequiv$1 = "≢"; +const nesear$1 = "⤨"; +const nesim$1 = "≂̸"; +const nexist$1 = "∄"; +const nexists$1 = "∄"; +const nfr$1 = "𝔫"; +const ngE$1 = "≧̸"; +const nge$1 = "≱"; +const ngeq$1 = "≱"; +const ngeqq$1 = "≧̸"; +const ngeqslant$1 = "⩾̸"; +const nges$1 = "⩾̸"; +const ngsim$1 = "≵"; +const ngt$1 = "≯"; +const ngtr$1 = "≯"; +const nhArr$1 = "⇎"; +const nharr$1 = "↮"; +const nhpar$1 = "⫲"; +const ni$1 = "∋"; +const nis$1 = "⋼"; +const nisd$1 = "⋺"; +const niv$1 = "∋"; +const njcy$1 = "њ"; +const nlArr$1 = "⇍"; +const nlE$1 = "≦̸"; +const nlarr$1 = "↚"; +const nldr$1 = "‥"; +const nle$1 = "≰"; +const nleftarrow$1 = "↚"; +const nleftrightarrow$1 = "↮"; +const nleq$1 = "≰"; +const nleqq$1 = "≦̸"; +const nleqslant$1 = "⩽̸"; +const nles$1 = "⩽̸"; +const nless$1 = "≮"; +const nlsim$1 = "≴"; +const nlt$1 = "≮"; +const nltri$1 = "⋪"; +const nltrie$1 = "⋬"; +const nmid$1 = "∤"; +const nopf$1 = "𝕟"; +const no$1 = "¬"; +const not$1 = "¬"; +const notin$1 = "∉"; +const notinE$1 = "⋹̸"; +const notindot$1 = "⋵̸"; +const notinva$1 = "∉"; +const notinvb$1 = "⋷"; +const notinvc$1 = "⋶"; +const notni$1 = "∌"; +const notniva$1 = "∌"; +const notnivb$1 = "⋾"; +const notnivc$1 = "⋽"; +const npar$1 = "∦"; +const nparallel$1 = "∦"; +const nparsl$1 = "⫽⃥"; +const npart$1 = "∂̸"; +const npolint$1 = "⨔"; +const npr$1 = "⊀"; +const nprcue$1 = "⋠"; +const npre$1 = "⪯̸"; +const nprec$1 = "⊀"; +const npreceq$1 = "⪯̸"; +const nrArr$1 = "⇏"; +const nrarr$1 = "↛"; +const nrarrc$1 = "⤳̸"; +const nrarrw$1 = "↝̸"; +const nrightarrow$1 = "↛"; +const nrtri$1 = "⋫"; +const nrtrie$1 = "⋭"; +const nsc$1 = "⊁"; +const nsccue$1 = "⋡"; +const nsce$1 = "⪰̸"; +const nscr$1 = "𝓃"; +const nshortmid$1 = "∤"; +const nshortparallel$1 = "∦"; +const nsim$1 = "≁"; +const nsime$1 = "≄"; +const nsimeq$1 = "≄"; +const nsmid$1 = "∤"; +const nspar$1 = "∦"; +const nsqsube$1 = "⋢"; +const nsqsupe$1 = "⋣"; +const nsub$1 = "⊄"; +const nsubE$1 = "⫅̸"; +const nsube$1 = "⊈"; +const nsubset$1 = "⊂⃒"; +const nsubseteq$1 = "⊈"; +const nsubseteqq$1 = "⫅̸"; +const nsucc$1 = "⊁"; +const nsucceq$1 = "⪰̸"; +const nsup$1 = "⊅"; +const nsupE$1 = "⫆̸"; +const nsupe$1 = "⊉"; +const nsupset$1 = "⊃⃒"; +const nsupseteq$1 = "⊉"; +const nsupseteqq$1 = "⫆̸"; +const ntgl$1 = "≹"; +const ntild$1 = "ñ"; +const ntilde$1 = "ñ"; +const ntlg$1 = "≸"; +const ntriangleleft$1 = "⋪"; +const ntrianglelefteq$1 = "⋬"; +const ntriangleright$1 = "⋫"; +const ntrianglerighteq$1 = "⋭"; +const nu$1 = "ν"; +const num$1 = "#"; +const numero$1 = "№"; +const numsp$1 = " "; +const nvDash$1 = "⊭"; +const nvHarr$1 = "⤄"; +const nvap$1 = "≍⃒"; +const nvdash$1 = "⊬"; +const nvge$1 = "≥⃒"; +const nvgt$1 = ">⃒"; +const nvinfin$1 = "⧞"; +const nvlArr$1 = "⤂"; +const nvle$1 = "≤⃒"; +const nvlt$1 = "<⃒"; +const nvltrie$1 = "⊴⃒"; +const nvrArr$1 = "⤃"; +const nvrtrie$1 = "⊵⃒"; +const nvsim$1 = "∼⃒"; +const nwArr$1 = "⇖"; +const nwarhk$1 = "⤣"; +const nwarr$1 = "↖"; +const nwarrow$1 = "↖"; +const nwnear$1 = "⤧"; +const oS$1 = "Ⓢ"; +const oacut$1 = "ó"; +const oacute$1 = "ó"; +const oast$1 = "⊛"; +const ocir$1 = "ô"; +const ocirc$1 = "ô"; +const ocy$1 = "о"; +const odash$1 = "⊝"; +const odblac$1 = "ő"; +const odiv$1 = "⨸"; +const odot$1 = "⊙"; +const odsold$1 = "⦼"; +const oelig$1 = "œ"; +const ofcir$1 = "⦿"; +const ofr$1 = "𝔬"; +const ogon$1 = "˛"; +const ograv$1 = "ò"; +const ograve$1 = "ò"; +const ogt$1 = "⧁"; +const ohbar$1 = "⦵"; +const ohm$1 = "Ω"; +const oint$1 = "∮"; +const olarr$1 = "↺"; +const olcir$1 = "⦾"; +const olcross$1 = "⦻"; +const oline$1 = "‾"; +const olt$1 = "⧀"; +const omacr$1 = "ō"; +const omega$1 = "ω"; +const omicron$1 = "ο"; +const omid$1 = "⦶"; +const ominus$1 = "⊖"; +const oopf$1 = "𝕠"; +const opar$1 = "⦷"; +const operp$1 = "⦹"; +const oplus$1 = "⊕"; +const or$1 = "∨"; +const orarr$1 = "↻"; +const ord$1 = "º"; +const order$1 = "ℴ"; +const orderof$1 = "ℴ"; +const ordf$1 = "ª"; +const ordm$1 = "º"; +const origof$1 = "⊶"; +const oror$1 = "⩖"; +const orslope$1 = "⩗"; +const orv$1 = "⩛"; +const oscr$1 = "ℴ"; +const oslas$1 = "ø"; +const oslash$1 = "ø"; +const osol$1 = "⊘"; +const otild$1 = "õ"; +const otilde$1 = "õ"; +const otimes$1 = "⊗"; +const otimesas$1 = "⨶"; +const oum$1 = "ö"; +const ouml$1 = "ö"; +const ovbar$1 = "⌽"; +const par$1 = "¶"; +const para$1 = "¶"; +const parallel$1 = "∥"; +const parsim$1 = "⫳"; +const parsl$1 = "⫽"; +const part$1 = "∂"; +const pcy$1 = "п"; +const percnt$1 = "%"; +const period$1 = "."; +const permil$1 = "‰"; +const perp$1 = "⊥"; +const pertenk$1 = "‱"; +const pfr$1 = "𝔭"; +const phi$1 = "φ"; +const phiv$1 = "ϕ"; +const phmmat$1 = "ℳ"; +const phone$1 = "☎"; +const pi$1 = "π"; +const pitchfork$1 = "⋔"; +const piv$1 = "ϖ"; +const planck$1 = "ℏ"; +const planckh$1 = "ℎ"; +const plankv$1 = "ℏ"; +const plus$1 = "+"; +const plusacir$1 = "⨣"; +const plusb$1 = "⊞"; +const pluscir$1 = "⨢"; +const plusdo$1 = "∔"; +const plusdu$1 = "⨥"; +const pluse$1 = "⩲"; +const plusm$1 = "±"; +const plusmn$1 = "±"; +const plussim$1 = "⨦"; +const plustwo$1 = "⨧"; +const pm$1 = "±"; +const pointint$1 = "⨕"; +const popf$1 = "𝕡"; +const poun$1 = "£"; +const pound$1 = "£"; +const pr$1 = "≺"; +const prE$1 = "⪳"; +const prap$1 = "⪷"; +const prcue$1 = "≼"; +const pre$1 = "⪯"; +const prec$1 = "≺"; +const precapprox$1 = "⪷"; +const preccurlyeq$1 = "≼"; +const preceq$1 = "⪯"; +const precnapprox$1 = "⪹"; +const precneqq$1 = "⪵"; +const precnsim$1 = "⋨"; +const precsim$1 = "≾"; +const prime$1 = "′"; +const primes$1 = "ℙ"; +const prnE$1 = "⪵"; +const prnap$1 = "⪹"; +const prnsim$1 = "⋨"; +const prod$1 = "∏"; +const profalar$1 = "⌮"; +const profline$1 = "⌒"; +const profsurf$1 = "⌓"; +const prop$1 = "∝"; +const propto$1 = "∝"; +const prsim$1 = "≾"; +const prurel$1 = "⊰"; +const pscr$1 = "𝓅"; +const psi$1 = "ψ"; +const puncsp$1 = " "; +const qfr$1 = "𝔮"; +const qint$1 = "⨌"; +const qopf$1 = "𝕢"; +const qprime$1 = "⁗"; +const qscr$1 = "𝓆"; +const quaternions$1 = "ℍ"; +const quatint$1 = "⨖"; +const quest$1 = "?"; +const questeq$1 = "≟"; +const quo$1 = "\""; +const quot$1 = "\""; +const rAarr$1 = "⇛"; +const rArr$1 = "⇒"; +const rAtail$1 = "⤜"; +const rBarr$1 = "⤏"; +const rHar$1 = "⥤"; +const race$1 = "∽̱"; +const racute$1 = "ŕ"; +const radic$1 = "√"; +const raemptyv$1 = "⦳"; +const rang$1 = "⟩"; +const rangd$1 = "⦒"; +const range$1 = "⦥"; +const rangle$1 = "⟩"; +const raqu$1 = "»"; +const raquo$1 = "»"; +const rarr$1 = "→"; +const rarrap$1 = "⥵"; +const rarrb$1 = "⇥"; +const rarrbfs$1 = "⤠"; +const rarrc$1 = "⤳"; +const rarrfs$1 = "⤞"; +const rarrhk$1 = "↪"; +const rarrlp$1 = "↬"; +const rarrpl$1 = "⥅"; +const rarrsim$1 = "⥴"; +const rarrtl$1 = "↣"; +const rarrw$1 = "↝"; +const ratail$1 = "⤚"; +const ratio$1 = "∶"; +const rationals$1 = "ℚ"; +const rbarr$1 = "⤍"; +const rbbrk$1 = "❳"; +const rbrace$1 = "}"; +const rbrack$1 = "]"; +const rbrke$1 = "⦌"; +const rbrksld$1 = "⦎"; +const rbrkslu$1 = "⦐"; +const rcaron$1 = "ř"; +const rcedil$1 = "ŗ"; +const rceil$1 = "⌉"; +const rcub$1 = "}"; +const rcy$1 = "р"; +const rdca$1 = "⤷"; +const rdldhar$1 = "⥩"; +const rdquo$1 = "”"; +const rdquor$1 = "”"; +const rdsh$1 = "↳"; +const real$1 = "ℜ"; +const realine$1 = "ℛ"; +const realpart$1 = "ℜ"; +const reals$1 = "ℝ"; +const rect$1 = "▭"; +const re$5 = "®"; +const reg$1 = "®"; +const rfisht$1 = "⥽"; +const rfloor$1 = "⌋"; +const rfr$1 = "𝔯"; +const rhard$1 = "⇁"; +const rharu$1 = "⇀"; +const rharul$1 = "⥬"; +const rho$1 = "ρ"; +const rhov$1 = "ϱ"; +const rightarrow$1 = "→"; +const rightarrowtail$1 = "↣"; +const rightharpoondown$1 = "⇁"; +const rightharpoonup$1 = "⇀"; +const rightleftarrows$1 = "⇄"; +const rightleftharpoons$1 = "⇌"; +const rightrightarrows$1 = "⇉"; +const rightsquigarrow$1 = "↝"; +const rightthreetimes$1 = "⋌"; +const ring$1 = "˚"; +const risingdotseq$1 = "≓"; +const rlarr$1 = "⇄"; +const rlhar$1 = "⇌"; +const rlm$1 = "‏"; +const rmoust$1 = "⎱"; +const rmoustache$1 = "⎱"; +const rnmid$1 = "⫮"; +const roang$1 = "⟭"; +const roarr$1 = "⇾"; +const robrk$1 = "⟧"; +const ropar$1 = "⦆"; +const ropf$1 = "𝕣"; +const roplus$1 = "⨮"; +const rotimes$1 = "⨵"; +const rpar$1 = ")"; +const rpargt$1 = "⦔"; +const rppolint$1 = "⨒"; +const rrarr$1 = "⇉"; +const rsaquo$1 = "›"; +const rscr$1 = "𝓇"; +const rsh$1 = "↱"; +const rsqb$1 = "]"; +const rsquo$1 = "’"; +const rsquor$1 = "’"; +const rthree$1 = "⋌"; +const rtimes$1 = "⋊"; +const rtri$1 = "▹"; +const rtrie$1 = "⊵"; +const rtrif$1 = "▸"; +const rtriltri$1 = "⧎"; +const ruluhar$1 = "⥨"; +const rx$1 = "℞"; +const sacute$1 = "ś"; +const sbquo$1 = "‚"; +const sc$1 = "≻"; +const scE$1 = "⪴"; +const scap$1 = "⪸"; +const scaron$1 = "š"; +const sccue$1 = "≽"; +const sce$1 = "⪰"; +const scedil$1 = "ş"; +const scirc$1 = "ŝ"; +const scnE$1 = "⪶"; +const scnap$1 = "⪺"; +const scnsim$1 = "⋩"; +const scpolint$1 = "⨓"; +const scsim$1 = "≿"; +const scy$1 = "с"; +const sdot$1 = "⋅"; +const sdotb$1 = "⊡"; +const sdote$1 = "⩦"; +const seArr$1 = "⇘"; +const searhk$1 = "⤥"; +const searr$1 = "↘"; +const searrow$1 = "↘"; +const sec$1 = "§"; +const sect$1 = "§"; +const semi$1 = ";"; +const seswar$1 = "⤩"; +const setminus$1 = "∖"; +const setmn$1 = "∖"; +const sext$1 = "✶"; +const sfr$1 = "𝔰"; +const sfrown$1 = "⌢"; +const sharp$1 = "♯"; +const shchcy$1 = "щ"; +const shcy$1 = "ш"; +const shortmid$1 = "∣"; +const shortparallel$1 = "∥"; +const sh$1 = "­"; +const shy$1 = "­"; +const sigma$1 = "σ"; +const sigmaf$1 = "ς"; +const sigmav$1 = "ς"; +const sim$1 = "∼"; +const simdot$1 = "⩪"; +const sime$1 = "≃"; +const simeq$1 = "≃"; +const simg$1 = "⪞"; +const simgE$1 = "⪠"; +const siml$1 = "⪝"; +const simlE$1 = "⪟"; +const simne$1 = "≆"; +const simplus$1 = "⨤"; +const simrarr$1 = "⥲"; +const slarr$1 = "←"; +const smallsetminus$1 = "∖"; +const smashp$1 = "⨳"; +const smeparsl$1 = "⧤"; +const smid$1 = "∣"; +const smile$1 = "⌣"; +const smt$1 = "⪪"; +const smte$1 = "⪬"; +const smtes$1 = "⪬︀"; +const softcy$1 = "ь"; +const sol$1 = "/"; +const solb$1 = "⧄"; +const solbar$1 = "⌿"; +const sopf$1 = "𝕤"; +const spades$1 = "♠"; +const spadesuit$1 = "♠"; +const spar$1 = "∥"; +const sqcap$1 = "⊓"; +const sqcaps$1 = "⊓︀"; +const sqcup$1 = "⊔"; +const sqcups$1 = "⊔︀"; +const sqsub$1 = "⊏"; +const sqsube$1 = "⊑"; +const sqsubset$1 = "⊏"; +const sqsubseteq$1 = "⊑"; +const sqsup$1 = "⊐"; +const sqsupe$1 = "⊒"; +const sqsupset$1 = "⊐"; +const sqsupseteq$1 = "⊒"; +const squ$1 = "□"; +const square$1 = "□"; +const squarf$1 = "▪"; +const squf$1 = "▪"; +const srarr$1 = "→"; +const sscr$1 = "𝓈"; +const ssetmn$1 = "∖"; +const ssmile$1 = "⌣"; +const sstarf$1 = "⋆"; +const star$1 = "☆"; +const starf$1 = "★"; +const straightepsilon$1 = "ϵ"; +const straightphi$1 = "ϕ"; +const strns$1 = "¯"; +const sub$1 = "⊂"; +const subE$1 = "⫅"; +const subdot$1 = "⪽"; +const sube$1 = "⊆"; +const subedot$1 = "⫃"; +const submult$1 = "⫁"; +const subnE$1 = "⫋"; +const subne$1 = "⊊"; +const subplus$1 = "⪿"; +const subrarr$1 = "⥹"; +const subset$1 = "⊂"; +const subseteq$1 = "⊆"; +const subseteqq$1 = "⫅"; +const subsetneq$1 = "⊊"; +const subsetneqq$1 = "⫋"; +const subsim$1 = "⫇"; +const subsub$1 = "⫕"; +const subsup$1 = "⫓"; +const succ$1 = "≻"; +const succapprox$1 = "⪸"; +const succcurlyeq$1 = "≽"; +const succeq$1 = "⪰"; +const succnapprox$1 = "⪺"; +const succneqq$1 = "⪶"; +const succnsim$1 = "⋩"; +const succsim$1 = "≿"; +const sum$1 = "∑"; +const sung$1 = "♪"; +const sup$1 = "⊃"; +const sup1$1 = "¹"; +const sup2$1 = "²"; +const sup3$1 = "³"; +const supE$1 = "⫆"; +const supdot$1 = "⪾"; +const supdsub$1 = "⫘"; +const supe$1 = "⊇"; +const supedot$1 = "⫄"; +const suphsol$1 = "⟉"; +const suphsub$1 = "⫗"; +const suplarr$1 = "⥻"; +const supmult$1 = "⫂"; +const supnE$1 = "⫌"; +const supne$1 = "⊋"; +const supplus$1 = "⫀"; +const supset$1 = "⊃"; +const supseteq$1 = "⊇"; +const supseteqq$1 = "⫆"; +const supsetneq$1 = "⊋"; +const supsetneqq$1 = "⫌"; +const supsim$1 = "⫈"; +const supsub$1 = "⫔"; +const supsup$1 = "⫖"; +const swArr$1 = "⇙"; +const swarhk$1 = "⤦"; +const swarr$1 = "↙"; +const swarrow$1 = "↙"; +const swnwar$1 = "⤪"; +const szli$1 = "ß"; +const szlig$1 = "ß"; +const target$1 = "⌖"; +const tau$1 = "τ"; +const tbrk$1 = "⎴"; +const tcaron$1 = "ť"; +const tcedil$1 = "ţ"; +const tcy$1 = "т"; +const tdot$1 = "⃛"; +const telrec$1 = "⌕"; +const tfr$1 = "𝔱"; +const there4$1 = "∴"; +const therefore$1 = "∴"; +const theta$1 = "θ"; +const thetasym$1 = "ϑ"; +const thetav$1 = "ϑ"; +const thickapprox$1 = "≈"; +const thicksim$1 = "∼"; +const thinsp$1 = " "; +const thkap$1 = "≈"; +const thksim$1 = "∼"; +const thor$1 = "þ"; +const thorn$1 = "þ"; +const tilde$1 = "˜"; +const time$1 = "×"; +const times$1 = "×"; +const timesb$1 = "⊠"; +const timesbar$1 = "⨱"; +const timesd$1 = "⨰"; +const tint$1 = "∭"; +const toea$1 = "⤨"; +const top$1 = "⊤"; +const topbot$1 = "⌶"; +const topcir$1 = "⫱"; +const topf$1 = "𝕥"; +const topfork$1 = "⫚"; +const tosa$1 = "⤩"; +const tprime$1 = "‴"; +const trade$1 = "™"; +const triangle$1 = "▵"; +const triangledown$1 = "▿"; +const triangleleft$1 = "◃"; +const trianglelefteq$1 = "⊴"; +const triangleq$1 = "≜"; +const triangleright$1 = "▹"; +const trianglerighteq$1 = "⊵"; +const tridot$1 = "◬"; +const trie$1 = "≜"; +const triminus$1 = "⨺"; +const triplus$1 = "⨹"; +const trisb$1 = "⧍"; +const tritime$1 = "⨻"; +const trpezium$1 = "⏢"; +const tscr$1 = "𝓉"; +const tscy$1 = "ц"; +const tshcy$1 = "ћ"; +const tstrok$1 = "ŧ"; +const twixt$1 = "≬"; +const twoheadleftarrow$1 = "↞"; +const twoheadrightarrow$1 = "↠"; +const uArr$1 = "⇑"; +const uHar$1 = "⥣"; +const uacut$1 = "ú"; +const uacute$1 = "ú"; +const uarr$1 = "↑"; +const ubrcy$1 = "ў"; +const ubreve$1 = "ŭ"; +const ucir$1 = "û"; +const ucirc$1 = "û"; +const ucy$1 = "у"; +const udarr$1 = "⇅"; +const udblac$1 = "ű"; +const udhar$1 = "⥮"; +const ufisht$1 = "⥾"; +const ufr$1 = "𝔲"; +const ugrav$1 = "ù"; +const ugrave$1 = "ù"; +const uharl$1 = "↿"; +const uharr$1 = "↾"; +const uhblk$1 = "▀"; +const ulcorn$1 = "⌜"; +const ulcorner$1 = "⌜"; +const ulcrop$1 = "⌏"; +const ultri$1 = "◸"; +const umacr$1 = "ū"; +const um$1 = "¨"; +const uml$1 = "¨"; +const uogon$1 = "ų"; +const uopf$1 = "𝕦"; +const uparrow$1 = "↑"; +const updownarrow$1 = "↕"; +const upharpoonleft$1 = "↿"; +const upharpoonright$1 = "↾"; +const uplus$1 = "⊎"; +const upsi$1 = "υ"; +const upsih$1 = "ϒ"; +const upsilon$1 = "υ"; +const upuparrows$1 = "⇈"; +const urcorn$1 = "⌝"; +const urcorner$1 = "⌝"; +const urcrop$1 = "⌎"; +const uring$1 = "ů"; +const urtri$1 = "◹"; +const uscr$1 = "𝓊"; +const utdot$1 = "⋰"; +const utilde$1 = "ũ"; +const utri$1 = "▵"; +const utrif$1 = "▴"; +const uuarr$1 = "⇈"; +const uum$1 = "ü"; +const uuml$1 = "ü"; +const uwangle$1 = "⦧"; +const vArr$1 = "⇕"; +const vBar$1 = "⫨"; +const vBarv$1 = "⫩"; +const vDash$1 = "⊨"; +const vangrt$1 = "⦜"; +const varepsilon$1 = "ϵ"; +const varkappa$1 = "ϰ"; +const varnothing$1 = "∅"; +const varphi$1 = "ϕ"; +const varpi$1 = "ϖ"; +const varpropto$1 = "∝"; +const varr$1 = "↕"; +const varrho$1 = "ϱ"; +const varsigma$1 = "ς"; +const varsubsetneq$1 = "⊊︀"; +const varsubsetneqq$1 = "⫋︀"; +const varsupsetneq$1 = "⊋︀"; +const varsupsetneqq$1 = "⫌︀"; +const vartheta$1 = "ϑ"; +const vartriangleleft$1 = "⊲"; +const vartriangleright$1 = "⊳"; +const vcy$1 = "в"; +const vdash$1 = "⊢"; +const vee$1 = "∨"; +const veebar$1 = "⊻"; +const veeeq$1 = "≚"; +const vellip$1 = "⋮"; +const verbar$1 = "|"; +const vert$1 = "|"; +const vfr$1 = "𝔳"; +const vltri$1 = "⊲"; +const vnsub$1 = "⊂⃒"; +const vnsup$1 = "⊃⃒"; +const vopf$1 = "𝕧"; +const vprop$1 = "∝"; +const vrtri$1 = "⊳"; +const vscr$1 = "𝓋"; +const vsubnE$1 = "⫋︀"; +const vsubne$1 = "⊊︀"; +const vsupnE$1 = "⫌︀"; +const vsupne$1 = "⊋︀"; +const vzigzag$1 = "⦚"; +const wcirc$1 = "ŵ"; +const wedbar$1 = "⩟"; +const wedge$1 = "∧"; +const wedgeq$1 = "≙"; +const weierp$1 = "℘"; +const wfr$1 = "𝔴"; +const wopf$1 = "𝕨"; +const wp$1 = "℘"; +const wr$1 = "≀"; +const wreath$1 = "≀"; +const wscr$1 = "𝓌"; +const xcap$1 = "⋂"; +const xcirc$1 = "◯"; +const xcup$1 = "⋃"; +const xdtri$1 = "▽"; +const xfr$1 = "𝔵"; +const xhArr$1 = "⟺"; +const xharr$1 = "⟷"; +const xi$1 = "ξ"; +const xlArr$1 = "⟸"; +const xlarr$1 = "⟵"; +const xmap$1 = "⟼"; +const xnis$1 = "⋻"; +const xodot$1 = "⨀"; +const xopf$1 = "𝕩"; +const xoplus$1 = "⨁"; +const xotime$1 = "⨂"; +const xrArr$1 = "⟹"; +const xrarr$1 = "⟶"; +const xscr$1 = "𝓍"; +const xsqcup$1 = "⨆"; +const xuplus$1 = "⨄"; +const xutri$1 = "△"; +const xvee$1 = "⋁"; +const xwedge$1 = "⋀"; +const yacut$1 = "ý"; +const yacute$1 = "ý"; +const yacy$1 = "я"; +const ycirc$1 = "ŷ"; +const ycy$1 = "ы"; +const ye$1 = "¥"; +const yen$1 = "¥"; +const yfr$1 = "𝔶"; +const yicy$1 = "ї"; +const yopf$1 = "𝕪"; +const yscr$1 = "𝓎"; +const yucy$1 = "ю"; +const yum$1 = "ÿ"; +const yuml$1 = "ÿ"; +const zacute$1 = "ź"; +const zcaron$1 = "ž"; +const zcy$1 = "з"; +const zdot$1 = "ż"; +const zeetrf$1 = "ℨ"; +const zeta$1 = "ζ"; +const zfr$1 = "𝔷"; +const zhcy$1 = "ж"; +const zigrarr$1 = "⇝"; +const zopf$1 = "𝕫"; +const zscr$1 = "𝓏"; +const zwj$1 = "‍"; +const zwnj$1 = "‌"; +var require$$0$1 = { + AEli: AEli$1, + AElig: AElig$1, + AM: AM$1, + AMP: AMP$1, + Aacut: Aacut$1, + Aacute: Aacute$1, + Abreve: Abreve$1, + Acir: Acir$1, + Acirc: Acirc$1, + Acy: Acy$1, + Afr: Afr$1, + Agrav: Agrav$1, + Agrave: Agrave$1, + Alpha: Alpha$1, + Amacr: Amacr$1, + And: And$1, + Aogon: Aogon$1, + Aopf: Aopf$1, + ApplyFunction: ApplyFunction$1, + Arin: Arin$1, + Aring: Aring$1, + Ascr: Ascr$1, + Assign: Assign$1, + Atild: Atild$1, + Atilde: Atilde$1, + Aum: Aum$1, + Auml: Auml$1, + Backslash: Backslash$1, + Barv: Barv$1, + Barwed: Barwed$1, + Bcy: Bcy$1, + Because: Because$1, + Bernoullis: Bernoullis$1, + Beta: Beta$1, + Bfr: Bfr$1, + Bopf: Bopf$1, + Breve: Breve$1, + Bscr: Bscr$1, + Bumpeq: Bumpeq$1, + CHcy: CHcy$1, + COP: COP$1, + COPY: COPY$1, + Cacute: Cacute$1, + Cap: Cap$1, + CapitalDifferentialD: CapitalDifferentialD$1, + Cayleys: Cayleys$1, + Ccaron: Ccaron$1, + Ccedi: Ccedi$1, + Ccedil: Ccedil$1, + Ccirc: Ccirc$1, + Cconint: Cconint$1, + Cdot: Cdot$1, + Cedilla: Cedilla$1, + CenterDot: CenterDot$1, + Cfr: Cfr$1, + Chi: Chi$1, + CircleDot: CircleDot$1, + CircleMinus: CircleMinus$1, + CirclePlus: CirclePlus$1, + CircleTimes: CircleTimes$1, + ClockwiseContourIntegral: ClockwiseContourIntegral$1, + CloseCurlyDoubleQuote: CloseCurlyDoubleQuote$1, + CloseCurlyQuote: CloseCurlyQuote$1, + Colon: Colon$1, + Colone: Colone$1, + Congruent: Congruent$1, + Conint: Conint$1, + ContourIntegral: ContourIntegral$1, + Copf: Copf$1, + Coproduct: Coproduct$1, + CounterClockwiseContourIntegral: CounterClockwiseContourIntegral$1, + Cross: Cross$1, + Cscr: Cscr$1, + Cup: Cup$1, + CupCap: CupCap$1, + DD: DD$1, + DDotrahd: DDotrahd$1, + DJcy: DJcy$1, + DScy: DScy$1, + DZcy: DZcy$1, + Dagger: Dagger$1, + Darr: Darr$1, + Dashv: Dashv$1, + Dcaron: Dcaron$1, + Dcy: Dcy$1, + Del: Del$1, + Delta: Delta$1, + Dfr: Dfr$1, + DiacriticalAcute: DiacriticalAcute$1, + DiacriticalDot: DiacriticalDot$1, + DiacriticalDoubleAcute: DiacriticalDoubleAcute$1, + DiacriticalGrave: DiacriticalGrave$1, + DiacriticalTilde: DiacriticalTilde$1, + Diamond: Diamond$1, + DifferentialD: DifferentialD$1, + Dopf: Dopf$1, + Dot: Dot$1, + DotDot: DotDot$1, + DotEqual: DotEqual$1, + DoubleContourIntegral: DoubleContourIntegral$1, + DoubleDot: DoubleDot$1, + DoubleDownArrow: DoubleDownArrow$1, + DoubleLeftArrow: DoubleLeftArrow$1, + DoubleLeftRightArrow: DoubleLeftRightArrow$1, + DoubleLeftTee: DoubleLeftTee$1, + DoubleLongLeftArrow: DoubleLongLeftArrow$1, + DoubleLongLeftRightArrow: DoubleLongLeftRightArrow$1, + DoubleLongRightArrow: DoubleLongRightArrow$1, + DoubleRightArrow: DoubleRightArrow$1, + DoubleRightTee: DoubleRightTee$1, + DoubleUpArrow: DoubleUpArrow$1, + DoubleUpDownArrow: DoubleUpDownArrow$1, + DoubleVerticalBar: DoubleVerticalBar$1, + DownArrow: DownArrow$1, + DownArrowBar: DownArrowBar$1, + DownArrowUpArrow: DownArrowUpArrow$1, + DownBreve: DownBreve$1, + DownLeftRightVector: DownLeftRightVector$1, + DownLeftTeeVector: DownLeftTeeVector$1, + DownLeftVector: DownLeftVector$1, + DownLeftVectorBar: DownLeftVectorBar$1, + DownRightTeeVector: DownRightTeeVector$1, + DownRightVector: DownRightVector$1, + DownRightVectorBar: DownRightVectorBar$1, + DownTee: DownTee$1, + DownTeeArrow: DownTeeArrow$1, + Downarrow: Downarrow$1, + Dscr: Dscr$1, + Dstrok: Dstrok$1, + ENG: ENG$1, + ET: ET$1, + ETH: ETH$1, + Eacut: Eacut$1, + Eacute: Eacute$1, + Ecaron: Ecaron$1, + Ecir: Ecir$1, + Ecirc: Ecirc$1, + Ecy: Ecy$1, + Edot: Edot$1, + Efr: Efr$1, + Egrav: Egrav$1, + Egrave: Egrave$1, + Element: Element$1, + Emacr: Emacr$1, + EmptySmallSquare: EmptySmallSquare$1, + EmptyVerySmallSquare: EmptyVerySmallSquare$1, + Eogon: Eogon$1, + Eopf: Eopf$1, + Epsilon: Epsilon$1, + Equal: Equal$1, + EqualTilde: EqualTilde$1, + Equilibrium: Equilibrium$1, + Escr: Escr$1, + Esim: Esim$1, + Eta: Eta$1, + Eum: Eum$1, + Euml: Euml$1, + Exists: Exists$1, + ExponentialE: ExponentialE$1, + Fcy: Fcy$1, + Ffr: Ffr$1, + FilledSmallSquare: FilledSmallSquare$1, + FilledVerySmallSquare: FilledVerySmallSquare$1, + Fopf: Fopf$1, + ForAll: ForAll$1, + Fouriertrf: Fouriertrf$1, + Fscr: Fscr$1, + GJcy: GJcy$1, + G: G$1, + GT: GT$1, + Gamma: Gamma$1, + Gammad: Gammad$1, + Gbreve: Gbreve$1, + Gcedil: Gcedil$1, + Gcirc: Gcirc$1, + Gcy: Gcy$1, + Gdot: Gdot$1, + Gfr: Gfr$1, + Gg: Gg$1, + Gopf: Gopf$1, + GreaterEqual: GreaterEqual$1, + GreaterEqualLess: GreaterEqualLess$1, + GreaterFullEqual: GreaterFullEqual$1, + GreaterGreater: GreaterGreater$1, + GreaterLess: GreaterLess$1, + GreaterSlantEqual: GreaterSlantEqual$1, + GreaterTilde: GreaterTilde$1, + Gscr: Gscr$1, + Gt: Gt$1, + HARDcy: HARDcy$1, + Hacek: Hacek$1, + Hat: Hat$1, + Hcirc: Hcirc$1, + Hfr: Hfr$1, + HilbertSpace: HilbertSpace$1, + Hopf: Hopf$1, + HorizontalLine: HorizontalLine$1, + Hscr: Hscr$1, + Hstrok: Hstrok$1, + HumpDownHump: HumpDownHump$1, + HumpEqual: HumpEqual$1, + IEcy: IEcy$1, + IJlig: IJlig$1, + IOcy: IOcy$1, + Iacut: Iacut$1, + Iacute: Iacute$1, + Icir: Icir$1, + Icirc: Icirc$1, + Icy: Icy$1, + Idot: Idot$1, + Ifr: Ifr$1, + Igrav: Igrav$1, + Igrave: Igrave$1, + Im: Im$1, + Imacr: Imacr$1, + ImaginaryI: ImaginaryI$1, + Implies: Implies$1, + Int: Int$1, + Integral: Integral$1, + Intersection: Intersection$1, + InvisibleComma: InvisibleComma$1, + InvisibleTimes: InvisibleTimes$1, + Iogon: Iogon$1, + Iopf: Iopf$1, + Iota: Iota$1, + Iscr: Iscr$1, + Itilde: Itilde$1, + Iukcy: Iukcy$1, + Ium: Ium$1, + Iuml: Iuml$1, + Jcirc: Jcirc$1, + Jcy: Jcy$1, + Jfr: Jfr$1, + Jopf: Jopf$1, + Jscr: Jscr$1, + Jsercy: Jsercy$1, + Jukcy: Jukcy$1, + KHcy: KHcy$1, + KJcy: KJcy$1, + Kappa: Kappa$1, + Kcedil: Kcedil$1, + Kcy: Kcy$1, + Kfr: Kfr$1, + Kopf: Kopf$1, + Kscr: Kscr$1, + LJcy: LJcy$1, + L: L$1, + LT: LT$1, + Lacute: Lacute$1, + Lambda: Lambda$1, + Lang: Lang$1, + Laplacetrf: Laplacetrf$1, + Larr: Larr$1, + Lcaron: Lcaron$1, + Lcedil: Lcedil$1, + Lcy: Lcy$1, + LeftAngleBracket: LeftAngleBracket$1, + LeftArrow: LeftArrow$1, + LeftArrowBar: LeftArrowBar$1, + LeftArrowRightArrow: LeftArrowRightArrow$1, + LeftCeiling: LeftCeiling$1, + LeftDoubleBracket: LeftDoubleBracket$1, + LeftDownTeeVector: LeftDownTeeVector$1, + LeftDownVector: LeftDownVector$1, + LeftDownVectorBar: LeftDownVectorBar$1, + LeftFloor: LeftFloor$1, + LeftRightArrow: LeftRightArrow$1, + LeftRightVector: LeftRightVector$1, + LeftTee: LeftTee$1, + LeftTeeArrow: LeftTeeArrow$1, + LeftTeeVector: LeftTeeVector$1, + LeftTriangle: LeftTriangle$1, + LeftTriangleBar: LeftTriangleBar$1, + LeftTriangleEqual: LeftTriangleEqual$1, + LeftUpDownVector: LeftUpDownVector$1, + LeftUpTeeVector: LeftUpTeeVector$1, + LeftUpVector: LeftUpVector$1, + LeftUpVectorBar: LeftUpVectorBar$1, + LeftVector: LeftVector$1, + LeftVectorBar: LeftVectorBar$1, + Leftarrow: Leftarrow$1, + Leftrightarrow: Leftrightarrow$1, + LessEqualGreater: LessEqualGreater$1, + LessFullEqual: LessFullEqual$1, + LessGreater: LessGreater$1, + LessLess: LessLess$1, + LessSlantEqual: LessSlantEqual$1, + LessTilde: LessTilde$1, + Lfr: Lfr$1, + Ll: Ll$1, + Lleftarrow: Lleftarrow$1, + Lmidot: Lmidot$1, + LongLeftArrow: LongLeftArrow$1, + LongLeftRightArrow: LongLeftRightArrow$1, + LongRightArrow: LongRightArrow$1, + Longleftarrow: Longleftarrow$1, + Longleftrightarrow: Longleftrightarrow$1, + Longrightarrow: Longrightarrow$1, + Lopf: Lopf$1, + LowerLeftArrow: LowerLeftArrow$1, + LowerRightArrow: LowerRightArrow$1, + Lscr: Lscr$1, + Lsh: Lsh$1, + Lstrok: Lstrok$1, + Lt: Lt$1, + "Map": "⤅", + Mcy: Mcy$1, + MediumSpace: MediumSpace$1, + Mellintrf: Mellintrf$1, + Mfr: Mfr$1, + MinusPlus: MinusPlus$1, + Mopf: Mopf$1, + Mscr: Mscr$1, + Mu: Mu$1, + NJcy: NJcy$1, + Nacute: Nacute$1, + Ncaron: Ncaron$1, + Ncedil: Ncedil$1, + Ncy: Ncy$1, + NegativeMediumSpace: NegativeMediumSpace$1, + NegativeThickSpace: NegativeThickSpace$1, + NegativeThinSpace: NegativeThinSpace$1, + NegativeVeryThinSpace: NegativeVeryThinSpace$1, + NestedGreaterGreater: NestedGreaterGreater$1, + NestedLessLess: NestedLessLess$1, + NewLine: NewLine$1, + Nfr: Nfr$1, + NoBreak: NoBreak$1, + NonBreakingSpace: NonBreakingSpace$1, + Nopf: Nopf$1, + Not: Not$1, + NotCongruent: NotCongruent$1, + NotCupCap: NotCupCap$1, + NotDoubleVerticalBar: NotDoubleVerticalBar$1, + NotElement: NotElement$1, + NotEqual: NotEqual$1, + NotEqualTilde: NotEqualTilde$1, + NotExists: NotExists$1, + NotGreater: NotGreater$1, + NotGreaterEqual: NotGreaterEqual$1, + NotGreaterFullEqual: NotGreaterFullEqual$1, + NotGreaterGreater: NotGreaterGreater$1, + NotGreaterLess: NotGreaterLess$1, + NotGreaterSlantEqual: NotGreaterSlantEqual$1, + NotGreaterTilde: NotGreaterTilde$1, + NotHumpDownHump: NotHumpDownHump$1, + NotHumpEqual: NotHumpEqual$1, + NotLeftTriangle: NotLeftTriangle$1, + NotLeftTriangleBar: NotLeftTriangleBar$1, + NotLeftTriangleEqual: NotLeftTriangleEqual$1, + NotLess: NotLess$1, + NotLessEqual: NotLessEqual$1, + NotLessGreater: NotLessGreater$1, + NotLessLess: NotLessLess$1, + NotLessSlantEqual: NotLessSlantEqual$1, + NotLessTilde: NotLessTilde$1, + NotNestedGreaterGreater: NotNestedGreaterGreater$1, + NotNestedLessLess: NotNestedLessLess$1, + NotPrecedes: NotPrecedes$1, + NotPrecedesEqual: NotPrecedesEqual$1, + NotPrecedesSlantEqual: NotPrecedesSlantEqual$1, + NotReverseElement: NotReverseElement$1, + NotRightTriangle: NotRightTriangle$1, + NotRightTriangleBar: NotRightTriangleBar$1, + NotRightTriangleEqual: NotRightTriangleEqual$1, + NotSquareSubset: NotSquareSubset$1, + NotSquareSubsetEqual: NotSquareSubsetEqual$1, + NotSquareSuperset: NotSquareSuperset$1, + NotSquareSupersetEqual: NotSquareSupersetEqual$1, + NotSubset: NotSubset$1, + NotSubsetEqual: NotSubsetEqual$1, + NotSucceeds: NotSucceeds$1, + NotSucceedsEqual: NotSucceedsEqual$1, + NotSucceedsSlantEqual: NotSucceedsSlantEqual$1, + NotSucceedsTilde: NotSucceedsTilde$1, + NotSuperset: NotSuperset$1, + NotSupersetEqual: NotSupersetEqual$1, + NotTilde: NotTilde$1, + NotTildeEqual: NotTildeEqual$1, + NotTildeFullEqual: NotTildeFullEqual$1, + NotTildeTilde: NotTildeTilde$1, + NotVerticalBar: NotVerticalBar$1, + Nscr: Nscr$1, + Ntild: Ntild$1, + Ntilde: Ntilde$1, + Nu: Nu$1, + OElig: OElig$1, + Oacut: Oacut$1, + Oacute: Oacute$1, + Ocir: Ocir$1, + Ocirc: Ocirc$1, + Ocy: Ocy$1, + Odblac: Odblac$1, + Ofr: Ofr$1, + Ograv: Ograv$1, + Ograve: Ograve$1, + Omacr: Omacr$1, + Omega: Omega$1, + Omicron: Omicron$1, + Oopf: Oopf$1, + OpenCurlyDoubleQuote: OpenCurlyDoubleQuote$1, + OpenCurlyQuote: OpenCurlyQuote$1, + Or: Or$1, + Oscr: Oscr$1, + Oslas: Oslas$1, + Oslash: Oslash$1, + Otild: Otild$1, + Otilde: Otilde$1, + Otimes: Otimes$1, + Oum: Oum$1, + Ouml: Ouml$1, + OverBar: OverBar$1, + OverBrace: OverBrace$1, + OverBracket: OverBracket$1, + OverParenthesis: OverParenthesis$1, + PartialD: PartialD$1, + Pcy: Pcy$1, + Pfr: Pfr$1, + Phi: Phi$1, + Pi: Pi$1, + PlusMinus: PlusMinus$1, + Poincareplane: Poincareplane$1, + Popf: Popf$1, + Pr: Pr$1, + Precedes: Precedes$1, + PrecedesEqual: PrecedesEqual$1, + PrecedesSlantEqual: PrecedesSlantEqual$1, + PrecedesTilde: PrecedesTilde$1, + Prime: Prime$1, + Product: Product$1, + Proportion: Proportion$1, + Proportional: Proportional$1, + Pscr: Pscr$1, + Psi: Psi$1, + QUO: QUO$1, + QUOT: QUOT$1, + Qfr: Qfr$1, + Qopf: Qopf$1, + Qscr: Qscr$1, + RBarr: RBarr$1, + RE: RE$1, + REG: REG$1, + Racute: Racute$1, + Rang: Rang$1, + Rarr: Rarr$1, + Rarrtl: Rarrtl$1, + Rcaron: Rcaron$1, + Rcedil: Rcedil$1, + Rcy: Rcy$1, + Re: Re$1, + ReverseElement: ReverseElement$1, + ReverseEquilibrium: ReverseEquilibrium$1, + ReverseUpEquilibrium: ReverseUpEquilibrium$1, + Rfr: Rfr$1, + Rho: Rho$1, + RightAngleBracket: RightAngleBracket$1, + RightArrow: RightArrow$1, + RightArrowBar: RightArrowBar$1, + RightArrowLeftArrow: RightArrowLeftArrow$1, + RightCeiling: RightCeiling$1, + RightDoubleBracket: RightDoubleBracket$1, + RightDownTeeVector: RightDownTeeVector$1, + RightDownVector: RightDownVector$1, + RightDownVectorBar: RightDownVectorBar$1, + RightFloor: RightFloor$1, + RightTee: RightTee$1, + RightTeeArrow: RightTeeArrow$1, + RightTeeVector: RightTeeVector$1, + RightTriangle: RightTriangle$1, + RightTriangleBar: RightTriangleBar$1, + RightTriangleEqual: RightTriangleEqual$1, + RightUpDownVector: RightUpDownVector$1, + RightUpTeeVector: RightUpTeeVector$1, + RightUpVector: RightUpVector$1, + RightUpVectorBar: RightUpVectorBar$1, + RightVector: RightVector$1, + RightVectorBar: RightVectorBar$1, + Rightarrow: Rightarrow$1, + Ropf: Ropf$1, + RoundImplies: RoundImplies$1, + Rrightarrow: Rrightarrow$1, + Rscr: Rscr$1, + Rsh: Rsh$1, + RuleDelayed: RuleDelayed$1, + SHCHcy: SHCHcy$1, + SHcy: SHcy$1, + SOFTcy: SOFTcy$1, + Sacute: Sacute$1, + Sc: Sc$1, + Scaron: Scaron$1, + Scedil: Scedil$1, + Scirc: Scirc$1, + Scy: Scy$1, + Sfr: Sfr$1, + ShortDownArrow: ShortDownArrow$1, + ShortLeftArrow: ShortLeftArrow$1, + ShortRightArrow: ShortRightArrow$1, + ShortUpArrow: ShortUpArrow$1, + Sigma: Sigma$1, + SmallCircle: SmallCircle$1, + Sopf: Sopf$1, + Sqrt: Sqrt$1, + Square: Square$1, + SquareIntersection: SquareIntersection$1, + SquareSubset: SquareSubset$1, + SquareSubsetEqual: SquareSubsetEqual$1, + SquareSuperset: SquareSuperset$1, + SquareSupersetEqual: SquareSupersetEqual$1, + SquareUnion: SquareUnion$1, + Sscr: Sscr$1, + Star: Star$1, + Sub: Sub$1, + Subset: Subset$1, + SubsetEqual: SubsetEqual$1, + Succeeds: Succeeds$1, + SucceedsEqual: SucceedsEqual$1, + SucceedsSlantEqual: SucceedsSlantEqual$1, + SucceedsTilde: SucceedsTilde$1, + SuchThat: SuchThat$1, + Sum: Sum$1, + Sup: Sup$1, + Superset: Superset$1, + SupersetEqual: SupersetEqual$1, + Supset: Supset$1, + THOR: THOR$1, + THORN: THORN$1, + TRADE: TRADE$1, + TSHcy: TSHcy$1, + TScy: TScy$1, + Tab: Tab$1, + Tau: Tau$1, + Tcaron: Tcaron$1, + Tcedil: Tcedil$1, + Tcy: Tcy$1, + Tfr: Tfr$1, + Therefore: Therefore$1, + Theta: Theta$1, + ThickSpace: ThickSpace$1, + ThinSpace: ThinSpace$1, + Tilde: Tilde$1, + TildeEqual: TildeEqual$1, + TildeFullEqual: TildeFullEqual$1, + TildeTilde: TildeTilde$1, + Topf: Topf$1, + TripleDot: TripleDot$1, + Tscr: Tscr$1, + Tstrok: Tstrok$1, + Uacut: Uacut$1, + Uacute: Uacute$1, + Uarr: Uarr$1, + Uarrocir: Uarrocir$1, + Ubrcy: Ubrcy$1, + Ubreve: Ubreve$1, + Ucir: Ucir$1, + Ucirc: Ucirc$1, + Ucy: Ucy$1, + Udblac: Udblac$1, + Ufr: Ufr$1, + Ugrav: Ugrav$1, + Ugrave: Ugrave$1, + Umacr: Umacr$1, + UnderBar: UnderBar$1, + UnderBrace: UnderBrace$1, + UnderBracket: UnderBracket$1, + UnderParenthesis: UnderParenthesis$1, + Union: Union$1, + UnionPlus: UnionPlus$1, + Uogon: Uogon$1, + Uopf: Uopf$1, + UpArrow: UpArrow$1, + UpArrowBar: UpArrowBar$1, + UpArrowDownArrow: UpArrowDownArrow$1, + UpDownArrow: UpDownArrow$1, + UpEquilibrium: UpEquilibrium$1, + UpTee: UpTee$1, + UpTeeArrow: UpTeeArrow$1, + Uparrow: Uparrow$1, + Updownarrow: Updownarrow$1, + UpperLeftArrow: UpperLeftArrow$1, + UpperRightArrow: UpperRightArrow$1, + Upsi: Upsi$1, + Upsilon: Upsilon$1, + Uring: Uring$1, + Uscr: Uscr$1, + Utilde: Utilde$1, + Uum: Uum$1, + Uuml: Uuml$1, + VDash: VDash$1, + Vbar: Vbar$1, + Vcy: Vcy$1, + Vdash: Vdash$1, + Vdashl: Vdashl$1, + Vee: Vee$1, + Verbar: Verbar$1, + Vert: Vert$1, + VerticalBar: VerticalBar$1, + VerticalLine: VerticalLine$1, + VerticalSeparator: VerticalSeparator$1, + VerticalTilde: VerticalTilde$1, + VeryThinSpace: VeryThinSpace$1, + Vfr: Vfr$1, + Vopf: Vopf$1, + Vscr: Vscr$1, + Vvdash: Vvdash$1, + Wcirc: Wcirc$1, + Wedge: Wedge$1, + Wfr: Wfr$1, + Wopf: Wopf$1, + Wscr: Wscr$1, + Xfr: Xfr$1, + Xi: Xi$1, + Xopf: Xopf$1, + Xscr: Xscr$1, + YAcy: YAcy$1, + YIcy: YIcy$1, + YUcy: YUcy$1, + Yacut: Yacut$1, + Yacute: Yacute$1, + Ycirc: Ycirc$1, + Ycy: Ycy$1, + Yfr: Yfr$1, + Yopf: Yopf$1, + Yscr: Yscr$1, + Yuml: Yuml$1, + ZHcy: ZHcy$1, + Zacute: Zacute$1, + Zcaron: Zcaron$1, + Zcy: Zcy$1, + Zdot: Zdot$1, + ZeroWidthSpace: ZeroWidthSpace$1, + Zeta: Zeta$1, + Zfr: Zfr$1, + Zopf: Zopf$1, + Zscr: Zscr$1, + aacut: aacut$1, + aacute: aacute$1, + abreve: abreve$1, + ac: ac$1, + acE: acE$1, + acd: acd$1, + acir: acir$1, + acirc: acirc$1, + acut: acut$1, + acute: acute$1, + acy: acy$1, + aeli: aeli$1, + aelig: aelig$1, + af: af$1, + afr: afr$1, + agrav: agrav$1, + agrave: agrave$1, + alefsym: alefsym$1, + aleph: aleph$1, + alpha: alpha$1, + amacr: amacr$1, + amalg: amalg$1, + am: am$1, + amp: amp$1, + and: and$1, + andand: andand$1, + andd: andd$1, + andslope: andslope$1, + andv: andv$1, + ang: ang$1, + ange: ange$1, + angle: angle$1, + angmsd: angmsd$1, + angmsdaa: angmsdaa$1, + angmsdab: angmsdab$1, + angmsdac: angmsdac$1, + angmsdad: angmsdad$1, + angmsdae: angmsdae$1, + angmsdaf: angmsdaf$1, + angmsdag: angmsdag$1, + angmsdah: angmsdah$1, + angrt: angrt$1, + angrtvb: angrtvb$1, + angrtvbd: angrtvbd$1, + angsph: angsph$1, + angst: angst$1, + angzarr: angzarr$1, + aogon: aogon$1, + aopf: aopf$1, + ap: ap$1, + apE: apE$1, + apacir: apacir$1, + ape: ape$1, + apid: apid$1, + apos: apos$1, + approx: approx$1, + approxeq: approxeq$1, + arin: arin$1, + aring: aring$1, + ascr: ascr$1, + ast: ast$1, + asymp: asymp$1, + asympeq: asympeq$1, + atild: atild$1, + atilde: atilde$1, + aum: aum$1, + auml: auml$1, + awconint: awconint$1, + awint: awint$1, + bNot: bNot$1, + backcong: backcong$1, + backepsilon: backepsilon$1, + backprime: backprime$1, + backsim: backsim$1, + backsimeq: backsimeq$1, + barvee: barvee$1, + barwed: barwed$1, + barwedge: barwedge$1, + bbrk: bbrk$1, + bbrktbrk: bbrktbrk$1, + bcong: bcong$1, + bcy: bcy$1, + bdquo: bdquo$1, + becaus: becaus$1, + because: because$1, + bemptyv: bemptyv$1, + bepsi: bepsi$1, + bernou: bernou$1, + beta: beta$1, + beth: beth$1, + between: between$1, + bfr: bfr$1, + bigcap: bigcap$1, + bigcirc: bigcirc$1, + bigcup: bigcup$1, + bigodot: bigodot$1, + bigoplus: bigoplus$1, + bigotimes: bigotimes$1, + bigsqcup: bigsqcup$1, + bigstar: bigstar$1, + bigtriangledown: bigtriangledown$1, + bigtriangleup: bigtriangleup$1, + biguplus: biguplus$1, + bigvee: bigvee$1, + bigwedge: bigwedge$1, + bkarow: bkarow$1, + blacklozenge: blacklozenge$1, + blacksquare: blacksquare$1, + blacktriangle: blacktriangle$1, + blacktriangledown: blacktriangledown$1, + blacktriangleleft: blacktriangleleft$1, + blacktriangleright: blacktriangleright$1, + blank: blank$1, + blk12: blk12$1, + blk14: blk14$1, + blk34: blk34$1, + block: block$1, + bne: bne$1, + bnequiv: bnequiv$1, + bnot: bnot$1, + bopf: bopf$1, + bot: bot$1, + bottom: bottom$1, + bowtie: bowtie$1, + boxDL: boxDL$1, + boxDR: boxDR$1, + boxDl: boxDl$1, + boxDr: boxDr$1, + boxH: boxH$1, + boxHD: boxHD$1, + boxHU: boxHU$1, + boxHd: boxHd$1, + boxHu: boxHu$1, + boxUL: boxUL$1, + boxUR: boxUR$1, + boxUl: boxUl$1, + boxUr: boxUr$1, + boxV: boxV$1, + boxVH: boxVH$1, + boxVL: boxVL$1, + boxVR: boxVR$1, + boxVh: boxVh$1, + boxVl: boxVl$1, + boxVr: boxVr$1, + boxbox: boxbox$1, + boxdL: boxdL$1, + boxdR: boxdR$1, + boxdl: boxdl$1, + boxdr: boxdr$1, + boxh: boxh$1, + boxhD: boxhD$1, + boxhU: boxhU$1, + boxhd: boxhd$1, + boxhu: boxhu$1, + boxminus: boxminus$1, + boxplus: boxplus$1, + boxtimes: boxtimes$1, + boxuL: boxuL$1, + boxuR: boxuR$1, + boxul: boxul$1, + boxur: boxur$1, + boxv: boxv$1, + boxvH: boxvH$1, + boxvL: boxvL$1, + boxvR: boxvR$1, + boxvh: boxvh$1, + boxvl: boxvl$1, + boxvr: boxvr$1, + bprime: bprime$1, + breve: breve$1, + brvba: brvba$1, + brvbar: brvbar$1, + bscr: bscr$1, + bsemi: bsemi$1, + bsim: bsim$1, + bsime: bsime$1, + bsol: bsol$1, + bsolb: bsolb$1, + bsolhsub: bsolhsub$1, + bull: bull$1, + bullet: bullet$1, + bump: bump$1, + bumpE: bumpE$1, + bumpe: bumpe$1, + bumpeq: bumpeq$1, + cacute: cacute$1, + cap: cap$1, + capand: capand$1, + capbrcup: capbrcup$1, + capcap: capcap$1, + capcup: capcup$1, + capdot: capdot$1, + caps: caps$1, + caret: caret$1, + caron: caron$1, + ccaps: ccaps$1, + ccaron: ccaron$1, + ccedi: ccedi$1, + ccedil: ccedil$1, + ccirc: ccirc$1, + ccups: ccups$1, + ccupssm: ccupssm$1, + cdot: cdot$1, + cedi: cedi$1, + cedil: cedil$1, + cemptyv: cemptyv$1, + cen: cen$1, + cent: cent$1, + centerdot: centerdot$1, + cfr: cfr$1, + chcy: chcy$1, + check: check$2, + checkmark: checkmark$1, + chi: chi$1, + cir: cir$1, + cirE: cirE$1, + circ: circ$1, + circeq: circeq$1, + circlearrowleft: circlearrowleft$1, + circlearrowright: circlearrowright$1, + circledR: circledR$1, + circledS: circledS$1, + circledast: circledast$1, + circledcirc: circledcirc$1, + circleddash: circleddash$1, + cire: cire$1, + cirfnint: cirfnint$1, + cirmid: cirmid$1, + cirscir: cirscir$1, + clubs: clubs$1, + clubsuit: clubsuit$1, + colon: colon$1, + colone: colone$1, + coloneq: coloneq$1, + comma: comma$1, + commat: commat$1, + comp: comp$1, + compfn: compfn$1, + complement: complement$1, + complexes: complexes$1, + cong: cong$1, + congdot: congdot$1, + conint: conint$1, + copf: copf$1, + coprod: coprod$1, + cop: cop$1, + copy: copy$1, + copysr: copysr$1, + crarr: crarr$1, + cross: cross$1, + cscr: cscr$1, + csub: csub$1, + csube: csube$1, + csup: csup$1, + csupe: csupe$1, + ctdot: ctdot$1, + cudarrl: cudarrl$1, + cudarrr: cudarrr$1, + cuepr: cuepr$1, + cuesc: cuesc$1, + cularr: cularr$1, + cularrp: cularrp$1, + cup: cup$1, + cupbrcap: cupbrcap$1, + cupcap: cupcap$1, + cupcup: cupcup$1, + cupdot: cupdot$1, + cupor: cupor$1, + cups: cups$1, + curarr: curarr$1, + curarrm: curarrm$1, + curlyeqprec: curlyeqprec$1, + curlyeqsucc: curlyeqsucc$1, + curlyvee: curlyvee$1, + curlywedge: curlywedge$1, + curre: curre$1, + curren: curren$1, + curvearrowleft: curvearrowleft$1, + curvearrowright: curvearrowright$1, + cuvee: cuvee$1, + cuwed: cuwed$1, + cwconint: cwconint$1, + cwint: cwint$1, + cylcty: cylcty$1, + dArr: dArr$1, + dHar: dHar$1, + dagger: dagger$1, + daleth: daleth$1, + darr: darr$1, + dash: dash$1, + dashv: dashv$1, + dbkarow: dbkarow$1, + dblac: dblac$1, + dcaron: dcaron$1, + dcy: dcy$1, + dd: dd$1, + ddagger: ddagger$1, + ddarr: ddarr$1, + ddotseq: ddotseq$1, + de: de$1, + deg: deg$1, + delta: delta$1, + demptyv: demptyv$1, + dfisht: dfisht$1, + dfr: dfr$1, + dharl: dharl$1, + dharr: dharr$1, + diam: diam$1, + diamond: diamond$1, + diamondsuit: diamondsuit$1, + diams: diams$1, + die: die$1, + digamma: digamma$1, + disin: disin$1, + div: div$1, + divid: divid$1, + divide: divide$1, + divideontimes: divideontimes$1, + divonx: divonx$1, + djcy: djcy$1, + dlcorn: dlcorn$1, + dlcrop: dlcrop$1, + dollar: dollar$1, + dopf: dopf$1, + dot: dot$1, + doteq: doteq$1, + doteqdot: doteqdot$1, + dotminus: dotminus$1, + dotplus: dotplus$1, + dotsquare: dotsquare$1, + doublebarwedge: doublebarwedge$1, + downarrow: downarrow$1, + downdownarrows: downdownarrows$1, + downharpoonleft: downharpoonleft$1, + downharpoonright: downharpoonright$1, + drbkarow: drbkarow$1, + drcorn: drcorn$1, + drcrop: drcrop$1, + dscr: dscr$1, + dscy: dscy$1, + dsol: dsol$1, + dstrok: dstrok$1, + dtdot: dtdot$1, + dtri: dtri$1, + dtrif: dtrif$1, + duarr: duarr$1, + duhar: duhar$1, + dwangle: dwangle$1, + dzcy: dzcy$1, + dzigrarr: dzigrarr$1, + eDDot: eDDot$1, + eDot: eDot$1, + eacut: eacut$1, + eacute: eacute$1, + easter: easter$1, + ecaron: ecaron$1, + ecir: ecir$1, + ecirc: ecirc$1, + ecolon: ecolon$1, + ecy: ecy$1, + edot: edot$1, + ee: ee$1, + efDot: efDot$1, + efr: efr$1, + eg: eg$1, + egrav: egrav$1, + egrave: egrave$1, + egs: egs$1, + egsdot: egsdot$1, + el: el$1, + elinters: elinters$1, + ell: ell$1, + els: els$1, + elsdot: elsdot$1, + emacr: emacr$1, + empty: empty$1, + emptyset: emptyset$1, + emptyv: emptyv$1, + emsp13: emsp13$1, + emsp14: emsp14$1, + emsp: emsp$1, + eng: eng$1, + ensp: ensp$1, + eogon: eogon$1, + eopf: eopf$1, + epar: epar$1, + eparsl: eparsl$1, + eplus: eplus$1, + epsi: epsi$1, + epsilon: epsilon$1, + epsiv: epsiv$1, + eqcirc: eqcirc$1, + eqcolon: eqcolon$1, + eqsim: eqsim$1, + eqslantgtr: eqslantgtr$1, + eqslantless: eqslantless$1, + equals: equals$1, + equest: equest$1, + equiv: equiv$1, + equivDD: equivDD$1, + eqvparsl: eqvparsl$1, + erDot: erDot$1, + erarr: erarr$1, + escr: escr$1, + esdot: esdot$1, + esim: esim$1, + eta: eta$1, + et: et$1, + eth: eth$1, + eum: eum$1, + euml: euml$1, + euro: euro$1, + excl: excl$1, + exist: exist$1, + expectation: expectation$1, + exponentiale: exponentiale$1, + fallingdotseq: fallingdotseq$1, + fcy: fcy$1, + female: female$1, + ffilig: ffilig$1, + fflig: fflig$1, + ffllig: ffllig$1, + ffr: ffr$1, + filig: filig$1, + fjlig: fjlig$1, + flat: flat$1, + fllig: fllig$1, + fltns: fltns$1, + fnof: fnof$1, + fopf: fopf$1, + forall: forall$1, + fork: fork$1, + forkv: forkv$1, + fpartint: fpartint$1, + frac1: frac1$1, + frac12: frac12$1, + frac13: frac13$1, + frac14: frac14$1, + frac15: frac15$1, + frac16: frac16$1, + frac18: frac18$1, + frac23: frac23$1, + frac25: frac25$1, + frac3: frac3$1, + frac34: frac34$1, + frac35: frac35$1, + frac38: frac38$1, + frac45: frac45$1, + frac56: frac56$1, + frac58: frac58$1, + frac78: frac78$1, + frasl: frasl$1, + frown: frown$1, + fscr: fscr$1, + gE: gE$1, + gEl: gEl$1, + gacute: gacute$1, + gamma: gamma$1, + gammad: gammad$1, + gap: gap$1, + gbreve: gbreve$1, + gcirc: gcirc$1, + gcy: gcy$1, + gdot: gdot$1, + ge: ge$1, + gel: gel$1, + geq: geq$1, + geqq: geqq$1, + geqslant: geqslant$1, + ges: ges$1, + gescc: gescc$1, + gesdot: gesdot$1, + gesdoto: gesdoto$1, + gesdotol: gesdotol$1, + gesl: gesl$1, + gesles: gesles$1, + gfr: gfr$1, + gg: gg$1, + ggg: ggg$1, + gimel: gimel$1, + gjcy: gjcy$1, + gl: gl$1, + glE: glE$1, + gla: gla$1, + glj: glj$1, + gnE: gnE$1, + gnap: gnap$1, + gnapprox: gnapprox$1, + gne: gne$1, + gneq: gneq$1, + gneqq: gneqq$1, + gnsim: gnsim$1, + gopf: gopf$1, + grave: grave$1, + gscr: gscr$1, + gsim: gsim$1, + gsime: gsime$1, + gsiml: gsiml$1, + g: g$1, + gt: gt$1, + gtcc: gtcc$1, + gtcir: gtcir$1, + gtdot: gtdot$1, + gtlPar: gtlPar$1, + gtquest: gtquest$1, + gtrapprox: gtrapprox$1, + gtrarr: gtrarr$1, + gtrdot: gtrdot$1, + gtreqless: gtreqless$1, + gtreqqless: gtreqqless$1, + gtrless: gtrless$1, + gtrsim: gtrsim$1, + gvertneqq: gvertneqq$1, + gvnE: gvnE$1, + hArr: hArr$1, + hairsp: hairsp$1, + half: half$1, + hamilt: hamilt$1, + hardcy: hardcy$1, + harr: harr$1, + harrcir: harrcir$1, + harrw: harrw$1, + hbar: hbar$1, + hcirc: hcirc$1, + hearts: hearts$1, + heartsuit: heartsuit$1, + hellip: hellip$1, + hercon: hercon$1, + hfr: hfr$1, + hksearow: hksearow$1, + hkswarow: hkswarow$1, + hoarr: hoarr$1, + homtht: homtht$1, + hookleftarrow: hookleftarrow$1, + hookrightarrow: hookrightarrow$1, + hopf: hopf$1, + horbar: horbar$1, + hscr: hscr$1, + hslash: hslash$1, + hstrok: hstrok$1, + hybull: hybull$1, + hyphen: hyphen$1, + iacut: iacut$1, + iacute: iacute$1, + ic: ic$1, + icir: icir$1, + icirc: icirc$1, + icy: icy$1, + iecy: iecy$1, + iexc: iexc$1, + iexcl: iexcl$1, + iff: iff$1, + ifr: ifr$1, + igrav: igrav$1, + igrave: igrave$1, + ii: ii$1, + iiiint: iiiint$1, + iiint: iiint$1, + iinfin: iinfin$1, + iiota: iiota$1, + ijlig: ijlig$1, + imacr: imacr$1, + image: image$2, + imagline: imagline$1, + imagpart: imagpart$1, + imath: imath$1, + imof: imof$1, + imped: imped$1, + "in": "∈", + incare: incare$1, + infin: infin$1, + infintie: infintie$1, + inodot: inodot$1, + int: int$2, + intcal: intcal$1, + integers: integers$1, + intercal: intercal$1, + intlarhk: intlarhk$1, + intprod: intprod$1, + iocy: iocy$1, + iogon: iogon$1, + iopf: iopf$1, + iota: iota$1, + iprod: iprod$1, + iques: iques$1, + iquest: iquest$1, + iscr: iscr$1, + isin: isin$1, + isinE: isinE$1, + isindot: isindot$1, + isins: isins$1, + isinsv: isinsv$1, + isinv: isinv$1, + it: it$1, + itilde: itilde$1, + iukcy: iukcy$1, + ium: ium$1, + iuml: iuml$1, + jcirc: jcirc$1, + jcy: jcy$1, + jfr: jfr$1, + jmath: jmath$1, + jopf: jopf$1, + jscr: jscr$1, + jsercy: jsercy$1, + jukcy: jukcy$1, + kappa: kappa$1, + kappav: kappav$1, + kcedil: kcedil$1, + kcy: kcy$1, + kfr: kfr$1, + kgreen: kgreen$1, + khcy: khcy$1, + kjcy: kjcy$1, + kopf: kopf$1, + kscr: kscr$1, + lAarr: lAarr$1, + lArr: lArr$1, + lAtail: lAtail$1, + lBarr: lBarr$1, + lE: lE$1, + lEg: lEg$1, + lHar: lHar$1, + lacute: lacute$1, + laemptyv: laemptyv$1, + lagran: lagran$1, + lambda: lambda$1, + lang: lang$1, + langd: langd$1, + langle: langle$1, + lap: lap$1, + laqu: laqu$1, + laquo: laquo$1, + larr: larr$1, + larrb: larrb$1, + larrbfs: larrbfs$1, + larrfs: larrfs$1, + larrhk: larrhk$1, + larrlp: larrlp$1, + larrpl: larrpl$1, + larrsim: larrsim$1, + larrtl: larrtl$1, + lat: lat$1, + latail: latail$1, + late: late$1, + lates: lates$1, + lbarr: lbarr$1, + lbbrk: lbbrk$1, + lbrace: lbrace$1, + lbrack: lbrack$1, + lbrke: lbrke$1, + lbrksld: lbrksld$1, + lbrkslu: lbrkslu$1, + lcaron: lcaron$1, + lcedil: lcedil$1, + lceil: lceil$1, + lcub: lcub$1, + lcy: lcy$1, + ldca: ldca$1, + ldquo: ldquo$1, + ldquor: ldquor$1, + ldrdhar: ldrdhar$1, + ldrushar: ldrushar$1, + ldsh: ldsh$1, + le: le$1, + leftarrow: leftarrow$1, + leftarrowtail: leftarrowtail$1, + leftharpoondown: leftharpoondown$1, + leftharpoonup: leftharpoonup$1, + leftleftarrows: leftleftarrows$1, + leftrightarrow: leftrightarrow$1, + leftrightarrows: leftrightarrows$1, + leftrightharpoons: leftrightharpoons$1, + leftrightsquigarrow: leftrightsquigarrow$1, + leftthreetimes: leftthreetimes$1, + leg: leg$1, + leq: leq$1, + leqq: leqq$1, + leqslant: leqslant$1, + les: les$1, + lescc: lescc$1, + lesdot: lesdot$1, + lesdoto: lesdoto$1, + lesdotor: lesdotor$1, + lesg: lesg$1, + lesges: lesges$1, + lessapprox: lessapprox$1, + lessdot: lessdot$1, + lesseqgtr: lesseqgtr$1, + lesseqqgtr: lesseqqgtr$1, + lessgtr: lessgtr$1, + lesssim: lesssim$1, + lfisht: lfisht$1, + lfloor: lfloor$1, + lfr: lfr$1, + lg: lg$1, + lgE: lgE$1, + lhard: lhard$1, + lharu: lharu$1, + lharul: lharul$1, + lhblk: lhblk$1, + ljcy: ljcy$1, + ll: ll$1, + llarr: llarr$1, + llcorner: llcorner$1, + llhard: llhard$1, + lltri: lltri$1, + lmidot: lmidot$1, + lmoust: lmoust$1, + lmoustache: lmoustache$1, + lnE: lnE$1, + lnap: lnap$1, + lnapprox: lnapprox$1, + lne: lne$1, + lneq: lneq$1, + lneqq: lneqq$1, + lnsim: lnsim$1, + loang: loang$1, + loarr: loarr$1, + lobrk: lobrk$1, + longleftarrow: longleftarrow$1, + longleftrightarrow: longleftrightarrow$1, + longmapsto: longmapsto$1, + longrightarrow: longrightarrow$1, + looparrowleft: looparrowleft$1, + looparrowright: looparrowright$1, + lopar: lopar$1, + lopf: lopf$1, + loplus: loplus$1, + lotimes: lotimes$1, + lowast: lowast$1, + lowbar: lowbar$1, + loz: loz$1, + lozenge: lozenge$1, + lozf: lozf$1, + lpar: lpar$1, + lparlt: lparlt$1, + lrarr: lrarr$1, + lrcorner: lrcorner$1, + lrhar: lrhar$1, + lrhard: lrhard$1, + lrm: lrm$1, + lrtri: lrtri$1, + lsaquo: lsaquo$1, + lscr: lscr$1, + lsh: lsh$1, + lsim: lsim$1, + lsime: lsime$1, + lsimg: lsimg$1, + lsqb: lsqb$1, + lsquo: lsquo$1, + lsquor: lsquor$1, + lstrok: lstrok$1, + l: l$1, + lt: lt$2, + ltcc: ltcc$1, + ltcir: ltcir$1, + ltdot: ltdot$1, + lthree: lthree$1, + ltimes: ltimes$1, + ltlarr: ltlarr$1, + ltquest: ltquest$1, + ltrPar: ltrPar$1, + ltri: ltri$1, + ltrie: ltrie$1, + ltrif: ltrif$1, + lurdshar: lurdshar$1, + luruhar: luruhar$1, + lvertneqq: lvertneqq$1, + lvnE: lvnE$1, + mDDot: mDDot$1, + mac: mac$1, + macr: macr$1, + male: male$1, + malt: malt$1, + maltese: maltese$1, + map: map$4, + mapsto: mapsto$1, + mapstodown: mapstodown$1, + mapstoleft: mapstoleft$1, + mapstoup: mapstoup$1, + marker: marker$1, + mcomma: mcomma$1, + mcy: mcy$1, + mdash: mdash$1, + measuredangle: measuredangle$1, + mfr: mfr$1, + mho: mho$1, + micr: micr$1, + micro: micro$1, + mid: mid$1, + midast: midast$1, + midcir: midcir$1, + middo: middo$1, + middot: middot$1, + minus: minus$1, + minusb: minusb$1, + minusd: minusd$1, + minusdu: minusdu$1, + mlcp: mlcp$1, + mldr: mldr$1, + mnplus: mnplus$1, + models: models$1, + mopf: mopf$1, + mp: mp$1, + mscr: mscr$1, + mstpos: mstpos$1, + mu: mu$1, + multimap: multimap$1, + mumap: mumap$1, + nGg: nGg$1, + nGt: nGt$1, + nGtv: nGtv$1, + nLeftarrow: nLeftarrow$1, + nLeftrightarrow: nLeftrightarrow$1, + nLl: nLl$1, + nLt: nLt$1, + nLtv: nLtv$1, + nRightarrow: nRightarrow$1, + nVDash: nVDash$1, + nVdash: nVdash$1, + nabla: nabla$1, + nacute: nacute$1, + nang: nang$1, + nap: nap$1, + napE: napE$1, + napid: napid$1, + napos: napos$1, + napprox: napprox$1, + natur: natur$1, + natural: natural$1, + naturals: naturals$1, + nbs: nbs$1, + nbsp: nbsp$1, + nbump: nbump$1, + nbumpe: nbumpe$1, + ncap: ncap$1, + ncaron: ncaron$1, + ncedil: ncedil$1, + ncong: ncong$1, + ncongdot: ncongdot$1, + ncup: ncup$1, + ncy: ncy$1, + ndash: ndash$1, + ne: ne$1, + neArr: neArr$1, + nearhk: nearhk$1, + nearr: nearr$1, + nearrow: nearrow$1, + nedot: nedot$1, + nequiv: nequiv$1, + nesear: nesear$1, + nesim: nesim$1, + nexist: nexist$1, + nexists: nexists$1, + nfr: nfr$1, + ngE: ngE$1, + nge: nge$1, + ngeq: ngeq$1, + ngeqq: ngeqq$1, + ngeqslant: ngeqslant$1, + nges: nges$1, + ngsim: ngsim$1, + ngt: ngt$1, + ngtr: ngtr$1, + nhArr: nhArr$1, + nharr: nharr$1, + nhpar: nhpar$1, + ni: ni$1, + nis: nis$1, + nisd: nisd$1, + niv: niv$1, + njcy: njcy$1, + nlArr: nlArr$1, + nlE: nlE$1, + nlarr: nlarr$1, + nldr: nldr$1, + nle: nle$1, + nleftarrow: nleftarrow$1, + nleftrightarrow: nleftrightarrow$1, + nleq: nleq$1, + nleqq: nleqq$1, + nleqslant: nleqslant$1, + nles: nles$1, + nless: nless$1, + nlsim: nlsim$1, + nlt: nlt$1, + nltri: nltri$1, + nltrie: nltrie$1, + nmid: nmid$1, + nopf: nopf$1, + no: no$1, + not: not$1, + notin: notin$1, + notinE: notinE$1, + notindot: notindot$1, + notinva: notinva$1, + notinvb: notinvb$1, + notinvc: notinvc$1, + notni: notni$1, + notniva: notniva$1, + notnivb: notnivb$1, + notnivc: notnivc$1, + npar: npar$1, + nparallel: nparallel$1, + nparsl: nparsl$1, + npart: npart$1, + npolint: npolint$1, + npr: npr$1, + nprcue: nprcue$1, + npre: npre$1, + nprec: nprec$1, + npreceq: npreceq$1, + nrArr: nrArr$1, + nrarr: nrarr$1, + nrarrc: nrarrc$1, + nrarrw: nrarrw$1, + nrightarrow: nrightarrow$1, + nrtri: nrtri$1, + nrtrie: nrtrie$1, + nsc: nsc$1, + nsccue: nsccue$1, + nsce: nsce$1, + nscr: nscr$1, + nshortmid: nshortmid$1, + nshortparallel: nshortparallel$1, + nsim: nsim$1, + nsime: nsime$1, + nsimeq: nsimeq$1, + nsmid: nsmid$1, + nspar: nspar$1, + nsqsube: nsqsube$1, + nsqsupe: nsqsupe$1, + nsub: nsub$1, + nsubE: nsubE$1, + nsube: nsube$1, + nsubset: nsubset$1, + nsubseteq: nsubseteq$1, + nsubseteqq: nsubseteqq$1, + nsucc: nsucc$1, + nsucceq: nsucceq$1, + nsup: nsup$1, + nsupE: nsupE$1, + nsupe: nsupe$1, + nsupset: nsupset$1, + nsupseteq: nsupseteq$1, + nsupseteqq: nsupseteqq$1, + ntgl: ntgl$1, + ntild: ntild$1, + ntilde: ntilde$1, + ntlg: ntlg$1, + ntriangleleft: ntriangleleft$1, + ntrianglelefteq: ntrianglelefteq$1, + ntriangleright: ntriangleright$1, + ntrianglerighteq: ntrianglerighteq$1, + nu: nu$1, + num: num$1, + numero: numero$1, + numsp: numsp$1, + nvDash: nvDash$1, + nvHarr: nvHarr$1, + nvap: nvap$1, + nvdash: nvdash$1, + nvge: nvge$1, + nvgt: nvgt$1, + nvinfin: nvinfin$1, + nvlArr: nvlArr$1, + nvle: nvle$1, + nvlt: nvlt$1, + nvltrie: nvltrie$1, + nvrArr: nvrArr$1, + nvrtrie: nvrtrie$1, + nvsim: nvsim$1, + nwArr: nwArr$1, + nwarhk: nwarhk$1, + nwarr: nwarr$1, + nwarrow: nwarrow$1, + nwnear: nwnear$1, + oS: oS$1, + oacut: oacut$1, + oacute: oacute$1, + oast: oast$1, + ocir: ocir$1, + ocirc: ocirc$1, + ocy: ocy$1, + odash: odash$1, + odblac: odblac$1, + odiv: odiv$1, + odot: odot$1, + odsold: odsold$1, + oelig: oelig$1, + ofcir: ofcir$1, + ofr: ofr$1, + ogon: ogon$1, + ograv: ograv$1, + ograve: ograve$1, + ogt: ogt$1, + ohbar: ohbar$1, + ohm: ohm$1, + oint: oint$1, + olarr: olarr$1, + olcir: olcir$1, + olcross: olcross$1, + oline: oline$1, + olt: olt$1, + omacr: omacr$1, + omega: omega$1, + omicron: omicron$1, + omid: omid$1, + ominus: ominus$1, + oopf: oopf$1, + opar: opar$1, + operp: operp$1, + oplus: oplus$1, + or: or$1, + orarr: orarr$1, + ord: ord$1, + order: order$1, + orderof: orderof$1, + ordf: ordf$1, + ordm: ordm$1, + origof: origof$1, + oror: oror$1, + orslope: orslope$1, + orv: orv$1, + oscr: oscr$1, + oslas: oslas$1, + oslash: oslash$1, + osol: osol$1, + otild: otild$1, + otilde: otilde$1, + otimes: otimes$1, + otimesas: otimesas$1, + oum: oum$1, + ouml: ouml$1, + ovbar: ovbar$1, + par: par$1, + para: para$1, + parallel: parallel$1, + parsim: parsim$1, + parsl: parsl$1, + part: part$1, + pcy: pcy$1, + percnt: percnt$1, + period: period$1, + permil: permil$1, + perp: perp$1, + pertenk: pertenk$1, + pfr: pfr$1, + phi: phi$1, + phiv: phiv$1, + phmmat: phmmat$1, + phone: phone$1, + pi: pi$1, + pitchfork: pitchfork$1, + piv: piv$1, + planck: planck$1, + planckh: planckh$1, + plankv: plankv$1, + plus: plus$1, + plusacir: plusacir$1, + plusb: plusb$1, + pluscir: pluscir$1, + plusdo: plusdo$1, + plusdu: plusdu$1, + pluse: pluse$1, + plusm: plusm$1, + plusmn: plusmn$1, + plussim: plussim$1, + plustwo: plustwo$1, + pm: pm$1, + pointint: pointint$1, + popf: popf$1, + poun: poun$1, + pound: pound$1, + pr: pr$1, + prE: prE$1, + prap: prap$1, + prcue: prcue$1, + pre: pre$1, + prec: prec$1, + precapprox: precapprox$1, + preccurlyeq: preccurlyeq$1, + preceq: preceq$1, + precnapprox: precnapprox$1, + precneqq: precneqq$1, + precnsim: precnsim$1, + precsim: precsim$1, + prime: prime$1, + primes: primes$1, + prnE: prnE$1, + prnap: prnap$1, + prnsim: prnsim$1, + prod: prod$1, + profalar: profalar$1, + profline: profline$1, + profsurf: profsurf$1, + prop: prop$1, + propto: propto$1, + prsim: prsim$1, + prurel: prurel$1, + pscr: pscr$1, + psi: psi$1, + puncsp: puncsp$1, + qfr: qfr$1, + qint: qint$1, + qopf: qopf$1, + qprime: qprime$1, + qscr: qscr$1, + quaternions: quaternions$1, + quatint: quatint$1, + quest: quest$1, + questeq: questeq$1, + quo: quo$1, + quot: quot$1, + rAarr: rAarr$1, + rArr: rArr$1, + rAtail: rAtail$1, + rBarr: rBarr$1, + rHar: rHar$1, + race: race$1, + racute: racute$1, + radic: radic$1, + raemptyv: raemptyv$1, + rang: rang$1, + rangd: rangd$1, + range: range$1, + rangle: rangle$1, + raqu: raqu$1, + raquo: raquo$1, + rarr: rarr$1, + rarrap: rarrap$1, + rarrb: rarrb$1, + rarrbfs: rarrbfs$1, + rarrc: rarrc$1, + rarrfs: rarrfs$1, + rarrhk: rarrhk$1, + rarrlp: rarrlp$1, + rarrpl: rarrpl$1, + rarrsim: rarrsim$1, + rarrtl: rarrtl$1, + rarrw: rarrw$1, + ratail: ratail$1, + ratio: ratio$1, + rationals: rationals$1, + rbarr: rbarr$1, + rbbrk: rbbrk$1, + rbrace: rbrace$1, + rbrack: rbrack$1, + rbrke: rbrke$1, + rbrksld: rbrksld$1, + rbrkslu: rbrkslu$1, + rcaron: rcaron$1, + rcedil: rcedil$1, + rceil: rceil$1, + rcub: rcub$1, + rcy: rcy$1, + rdca: rdca$1, + rdldhar: rdldhar$1, + rdquo: rdquo$1, + rdquor: rdquor$1, + rdsh: rdsh$1, + real: real$1, + realine: realine$1, + realpart: realpart$1, + reals: reals$1, + rect: rect$1, + re: re$5, + reg: reg$1, + rfisht: rfisht$1, + rfloor: rfloor$1, + rfr: rfr$1, + rhard: rhard$1, + rharu: rharu$1, + rharul: rharul$1, + rho: rho$1, + rhov: rhov$1, + rightarrow: rightarrow$1, + rightarrowtail: rightarrowtail$1, + rightharpoondown: rightharpoondown$1, + rightharpoonup: rightharpoonup$1, + rightleftarrows: rightleftarrows$1, + rightleftharpoons: rightleftharpoons$1, + rightrightarrows: rightrightarrows$1, + rightsquigarrow: rightsquigarrow$1, + rightthreetimes: rightthreetimes$1, + ring: ring$1, + risingdotseq: risingdotseq$1, + rlarr: rlarr$1, + rlhar: rlhar$1, + rlm: rlm$1, + rmoust: rmoust$1, + rmoustache: rmoustache$1, + rnmid: rnmid$1, + roang: roang$1, + roarr: roarr$1, + robrk: robrk$1, + ropar: ropar$1, + ropf: ropf$1, + roplus: roplus$1, + rotimes: rotimes$1, + rpar: rpar$1, + rpargt: rpargt$1, + rppolint: rppolint$1, + rrarr: rrarr$1, + rsaquo: rsaquo$1, + rscr: rscr$1, + rsh: rsh$1, + rsqb: rsqb$1, + rsquo: rsquo$1, + rsquor: rsquor$1, + rthree: rthree$1, + rtimes: rtimes$1, + rtri: rtri$1, + rtrie: rtrie$1, + rtrif: rtrif$1, + rtriltri: rtriltri$1, + ruluhar: ruluhar$1, + rx: rx$1, + sacute: sacute$1, + sbquo: sbquo$1, + sc: sc$1, + scE: scE$1, + scap: scap$1, + scaron: scaron$1, + sccue: sccue$1, + sce: sce$1, + scedil: scedil$1, + scirc: scirc$1, + scnE: scnE$1, + scnap: scnap$1, + scnsim: scnsim$1, + scpolint: scpolint$1, + scsim: scsim$1, + scy: scy$1, + sdot: sdot$1, + sdotb: sdotb$1, + sdote: sdote$1, + seArr: seArr$1, + searhk: searhk$1, + searr: searr$1, + searrow: searrow$1, + sec: sec$1, + sect: sect$1, + semi: semi$1, + seswar: seswar$1, + setminus: setminus$1, + setmn: setmn$1, + sext: sext$1, + sfr: sfr$1, + sfrown: sfrown$1, + sharp: sharp$1, + shchcy: shchcy$1, + shcy: shcy$1, + shortmid: shortmid$1, + shortparallel: shortparallel$1, + sh: sh$1, + shy: shy$1, + sigma: sigma$1, + sigmaf: sigmaf$1, + sigmav: sigmav$1, + sim: sim$1, + simdot: simdot$1, + sime: sime$1, + simeq: simeq$1, + simg: simg$1, + simgE: simgE$1, + siml: siml$1, + simlE: simlE$1, + simne: simne$1, + simplus: simplus$1, + simrarr: simrarr$1, + slarr: slarr$1, + smallsetminus: smallsetminus$1, + smashp: smashp$1, + smeparsl: smeparsl$1, + smid: smid$1, + smile: smile$1, + smt: smt$1, + smte: smte$1, + smtes: smtes$1, + softcy: softcy$1, + sol: sol$1, + solb: solb$1, + solbar: solbar$1, + sopf: sopf$1, + spades: spades$1, + spadesuit: spadesuit$1, + spar: spar$1, + sqcap: sqcap$1, + sqcaps: sqcaps$1, + sqcup: sqcup$1, + sqcups: sqcups$1, + sqsub: sqsub$1, + sqsube: sqsube$1, + sqsubset: sqsubset$1, + sqsubseteq: sqsubseteq$1, + sqsup: sqsup$1, + sqsupe: sqsupe$1, + sqsupset: sqsupset$1, + sqsupseteq: sqsupseteq$1, + squ: squ$1, + square: square$1, + squarf: squarf$1, + squf: squf$1, + srarr: srarr$1, + sscr: sscr$1, + ssetmn: ssetmn$1, + ssmile: ssmile$1, + sstarf: sstarf$1, + star: star$1, + starf: starf$1, + straightepsilon: straightepsilon$1, + straightphi: straightphi$1, + strns: strns$1, + sub: sub$1, + subE: subE$1, + subdot: subdot$1, + sube: sube$1, + subedot: subedot$1, + submult: submult$1, + subnE: subnE$1, + subne: subne$1, + subplus: subplus$1, + subrarr: subrarr$1, + subset: subset$1, + subseteq: subseteq$1, + subseteqq: subseteqq$1, + subsetneq: subsetneq$1, + subsetneqq: subsetneqq$1, + subsim: subsim$1, + subsub: subsub$1, + subsup: subsup$1, + succ: succ$1, + succapprox: succapprox$1, + succcurlyeq: succcurlyeq$1, + succeq: succeq$1, + succnapprox: succnapprox$1, + succneqq: succneqq$1, + succnsim: succnsim$1, + succsim: succsim$1, + sum: sum$1, + sung: sung$1, + sup: sup$1, + sup1: sup1$1, + sup2: sup2$1, + sup3: sup3$1, + supE: supE$1, + supdot: supdot$1, + supdsub: supdsub$1, + supe: supe$1, + supedot: supedot$1, + suphsol: suphsol$1, + suphsub: suphsub$1, + suplarr: suplarr$1, + supmult: supmult$1, + supnE: supnE$1, + supne: supne$1, + supplus: supplus$1, + supset: supset$1, + supseteq: supseteq$1, + supseteqq: supseteqq$1, + supsetneq: supsetneq$1, + supsetneqq: supsetneqq$1, + supsim: supsim$1, + supsub: supsub$1, + supsup: supsup$1, + swArr: swArr$1, + swarhk: swarhk$1, + swarr: swarr$1, + swarrow: swarrow$1, + swnwar: swnwar$1, + szli: szli$1, + szlig: szlig$1, + target: target$1, + tau: tau$1, + tbrk: tbrk$1, + tcaron: tcaron$1, + tcedil: tcedil$1, + tcy: tcy$1, + tdot: tdot$1, + telrec: telrec$1, + tfr: tfr$1, + there4: there4$1, + therefore: therefore$1, + theta: theta$1, + thetasym: thetasym$1, + thetav: thetav$1, + thickapprox: thickapprox$1, + thicksim: thicksim$1, + thinsp: thinsp$1, + thkap: thkap$1, + thksim: thksim$1, + thor: thor$1, + thorn: thorn$1, + tilde: tilde$1, + time: time$1, + times: times$1, + timesb: timesb$1, + timesbar: timesbar$1, + timesd: timesd$1, + tint: tint$1, + toea: toea$1, + top: top$1, + topbot: topbot$1, + topcir: topcir$1, + topf: topf$1, + topfork: topfork$1, + tosa: tosa$1, + tprime: tprime$1, + trade: trade$1, + triangle: triangle$1, + triangledown: triangledown$1, + triangleleft: triangleleft$1, + trianglelefteq: trianglelefteq$1, + triangleq: triangleq$1, + triangleright: triangleright$1, + trianglerighteq: trianglerighteq$1, + tridot: tridot$1, + trie: trie$1, + triminus: triminus$1, + triplus: triplus$1, + trisb: trisb$1, + tritime: tritime$1, + trpezium: trpezium$1, + tscr: tscr$1, + tscy: tscy$1, + tshcy: tshcy$1, + tstrok: tstrok$1, + twixt: twixt$1, + twoheadleftarrow: twoheadleftarrow$1, + twoheadrightarrow: twoheadrightarrow$1, + uArr: uArr$1, + uHar: uHar$1, + uacut: uacut$1, + uacute: uacute$1, + uarr: uarr$1, + ubrcy: ubrcy$1, + ubreve: ubreve$1, + ucir: ucir$1, + ucirc: ucirc$1, + ucy: ucy$1, + udarr: udarr$1, + udblac: udblac$1, + udhar: udhar$1, + ufisht: ufisht$1, + ufr: ufr$1, + ugrav: ugrav$1, + ugrave: ugrave$1, + uharl: uharl$1, + uharr: uharr$1, + uhblk: uhblk$1, + ulcorn: ulcorn$1, + ulcorner: ulcorner$1, + ulcrop: ulcrop$1, + ultri: ultri$1, + umacr: umacr$1, + um: um$1, + uml: uml$1, + uogon: uogon$1, + uopf: uopf$1, + uparrow: uparrow$1, + updownarrow: updownarrow$1, + upharpoonleft: upharpoonleft$1, + upharpoonright: upharpoonright$1, + uplus: uplus$1, + upsi: upsi$1, + upsih: upsih$1, + upsilon: upsilon$1, + upuparrows: upuparrows$1, + urcorn: urcorn$1, + urcorner: urcorner$1, + urcrop: urcrop$1, + uring: uring$1, + urtri: urtri$1, + uscr: uscr$1, + utdot: utdot$1, + utilde: utilde$1, + utri: utri$1, + utrif: utrif$1, + uuarr: uuarr$1, + uum: uum$1, + uuml: uuml$1, + uwangle: uwangle$1, + vArr: vArr$1, + vBar: vBar$1, + vBarv: vBarv$1, + vDash: vDash$1, + vangrt: vangrt$1, + varepsilon: varepsilon$1, + varkappa: varkappa$1, + varnothing: varnothing$1, + varphi: varphi$1, + varpi: varpi$1, + varpropto: varpropto$1, + varr: varr$1, + varrho: varrho$1, + varsigma: varsigma$1, + varsubsetneq: varsubsetneq$1, + varsubsetneqq: varsubsetneqq$1, + varsupsetneq: varsupsetneq$1, + varsupsetneqq: varsupsetneqq$1, + vartheta: vartheta$1, + vartriangleleft: vartriangleleft$1, + vartriangleright: vartriangleright$1, + vcy: vcy$1, + vdash: vdash$1, + vee: vee$1, + veebar: veebar$1, + veeeq: veeeq$1, + vellip: vellip$1, + verbar: verbar$1, + vert: vert$1, + vfr: vfr$1, + vltri: vltri$1, + vnsub: vnsub$1, + vnsup: vnsup$1, + vopf: vopf$1, + vprop: vprop$1, + vrtri: vrtri$1, + vscr: vscr$1, + vsubnE: vsubnE$1, + vsubne: vsubne$1, + vsupnE: vsupnE$1, + vsupne: vsupne$1, + vzigzag: vzigzag$1, + wcirc: wcirc$1, + wedbar: wedbar$1, + wedge: wedge$1, + wedgeq: wedgeq$1, + weierp: weierp$1, + wfr: wfr$1, + wopf: wopf$1, + wp: wp$1, + wr: wr$1, + wreath: wreath$1, + wscr: wscr$1, + xcap: xcap$1, + xcirc: xcirc$1, + xcup: xcup$1, + xdtri: xdtri$1, + xfr: xfr$1, + xhArr: xhArr$1, + xharr: xharr$1, + xi: xi$1, + xlArr: xlArr$1, + xlarr: xlarr$1, + xmap: xmap$1, + xnis: xnis$1, + xodot: xodot$1, + xopf: xopf$1, + xoplus: xoplus$1, + xotime: xotime$1, + xrArr: xrArr$1, + xrarr: xrarr$1, + xscr: xscr$1, + xsqcup: xsqcup$1, + xuplus: xuplus$1, + xutri: xutri$1, + xvee: xvee$1, + xwedge: xwedge$1, + yacut: yacut$1, + yacute: yacute$1, + yacy: yacy$1, + ycirc: ycirc$1, + ycy: ycy$1, + ye: ye$1, + yen: yen$1, + yfr: yfr$1, + yicy: yicy$1, + yopf: yopf$1, + yscr: yscr$1, + yucy: yucy$1, + yum: yum$1, + yuml: yuml$1, + zacute: zacute$1, + zcaron: zcaron$1, + zcy: zcy$1, + zdot: zdot$1, + zeetrf: zeetrf$1, + zeta: zeta$1, + zfr: zfr$1, + zhcy: zhcy$1, + zigrarr: zigrarr$1, + zopf: zopf$1, + zscr: zscr$1, + zwj: zwj$1, + zwnj: zwnj$1 +}; + +var characterEntities$1 = require$$0$1; + +var decodeEntity_1$1 = decodeEntity$1; + +var own$8 = {}.hasOwnProperty; + +function decodeEntity$1(characters) { + return own$8.call(characterEntities$1, characters) + ? characterEntities$1[characters] + : false +} + +var own$7 = {}.hasOwnProperty; -var dist$2 = fromMarkdown; +var unistUtilStringifyPosition = stringify$2; -// These three are compiled away in the `dist/` +function stringify$2(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + // Node. + if (own$7.call(value, 'position') || own$7.call(value, 'type')) { + return position$3(value.position) + } + // Position. + if (own$7.call(value, 'start') || own$7.call(value, 'end')) { + return position$3(value) + } + // Point. + if (own$7.call(value, 'line') || own$7.call(value, 'column')) { + return point$s(value) + } + // ? + return '' +} +function point$s(point) { + if (!point || typeof point !== 'object') { + point = {}; + } + return index$1(point.line) + ':' + index$1(point.column) +} +function position$3(pos) { + if (!pos || typeof pos !== 'object') { + pos = {}; + } + return point$s(pos.start) + '-' + point$s(pos.end) +} +function index$1(value) { + return value && typeof value === 'number' ? value : 1 +} +var dist = fromMarkdown$1; +// These three are compiled away in the `dist/` -function fromMarkdown(value, encoding, options) { +var toString$4 = mdastUtilToString$1; +var assign = assign_1; +var own$6 = hasOwnProperty$2; +var normalizeIdentifier$1 = normalizeIdentifier_1; +var safeFromInt = safeFromInt_1; +var parser = parse_1$1; +var preprocessor = preprocess_1; +var postprocess = postprocess_1; +var decode$1 = decodeEntity_1$1; +var stringifyPosition$1 = unistUtilStringifyPosition; + +function fromMarkdown$1(value, encoding, options) { if (typeof encoding !== 'string') { options = encoding; encoding = undefined; } return compiler(options)( - postprocess_1( - parse_1$3(options).document().write(preprocess_1()(value, encoding, true)) + postprocess( + parser(options).document().write(preprocessor()(value, encoding, true)) ) ) } @@ -37404,6 +42973,7 @@ function compiler(options) { var settings = options || {}; var config = configure$2( { + transforms: [], canContainEols: [ 'emphasis', 'fragment', @@ -37516,7 +43086,8 @@ function compiler(options) { return compile function compile(events) { - var stack = [{type: 'root', children: []}]; + var tree = {type: 'root', children: []}; + var stack = [tree]; var tokenStack = []; var listStack = []; var index = -1; @@ -37556,9 +43127,9 @@ function compiler(options) { while (++index < events.length) { handler = config[events[index][0]]; - if (hasOwnProperty.call(handler, events[index][1].type)) { + if (own$6.call(handler, events[index][1].type)) { handler[events[index][1].type].call( - assign_1({sliceSerialize: events[index][2].sliceSerialize}, context), + assign({sliceSerialize: events[index][2].sliceSerialize}, context), events[index][1] ); } @@ -37569,7 +43140,7 @@ function compiler(options) { 'Cannot close document, a token (`' + tokenStack[tokenStack.length - 1].type + '`, ' + - unistUtilStringifyPosition({ + stringifyPosition$1({ start: tokenStack[tokenStack.length - 1].start, end: tokenStack[tokenStack.length - 1].end }) + @@ -37578,7 +43149,7 @@ function compiler(options) { } // Figure out `root` position. - stack[0].position = { + tree.position = { start: point( events.length ? events[0][1].start : {line: 1, column: 1, offset: 0} ), @@ -37590,7 +43161,12 @@ function compiler(options) { ) }; - return stack[0] + index = -1; + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree; + } + + return tree } function prepareList(events, start, length) { @@ -37772,7 +43348,7 @@ function compiler(options) { 'Cannot close `' + token.type + '` (' + - unistUtilStringifyPosition({start: token.start, end: token.end}) + + stringifyPosition$1({start: token.start, end: token.end}) + '): it’s not open' ) } else if (open.type !== token.type) { @@ -37780,11 +43356,11 @@ function compiler(options) { 'Cannot close `' + token.type + '` (' + - unistUtilStringifyPosition({start: token.start, end: token.end}) + + stringifyPosition$1({start: token.start, end: token.end}) + '): a different token (`' + open.type + '`, ' + - unistUtilStringifyPosition({start: open.start, end: open.end}) + + stringifyPosition$1({start: open.start, end: open.end}) + ') is open' ) } @@ -37794,7 +43370,7 @@ function compiler(options) { } function resume() { - return mdastUtilToString(this.stack.pop()) + return toString$4(this.stack.pop()) } // @@ -37852,7 +43428,7 @@ function compiler(options) { // Discard label, use the source content instead. var label = this.resume(); this.stack[this.stack.length - 1].label = label; - this.stack[this.stack.length - 1].identifier = normalizeIdentifier_1( + this.stack[this.stack.length - 1].identifier = normalizeIdentifier$1( this.sliceSerialize(token) ).toLowerCase(); } @@ -37986,7 +43562,7 @@ function compiler(options) { } function onexitlabeltext(token) { - this.stack[this.stack.length - 2].identifier = normalizeIdentifier_1( + this.stack[this.stack.length - 2].identifier = normalizeIdentifier$1( this.sliceSerialize(token) ).toLowerCase(); } @@ -38028,7 +43604,7 @@ function compiler(options) { function onexitreferencestring(token) { var label = this.resume(); this.stack[this.stack.length - 1].label = label; - this.stack[this.stack.length - 1].identifier = normalizeIdentifier_1( + this.stack[this.stack.length - 1].identifier = normalizeIdentifier$1( this.sliceSerialize(token) ).toLowerCase(); setData('referenceType', 'full'); @@ -38045,14 +43621,14 @@ function compiler(options) { var tail; if (type) { - value = safeFromInt_1( + value = safeFromInt( data, type === 'characterReferenceMarkerNumeric' ? 10 : 16 ); setData('characterReferenceType'); } else { - value = decodeEntity_1(data); + value = decode$1(data); } tail = this.stack.pop(); @@ -38161,20 +43737,20 @@ function configure$2(config, extensions) { var index = -1; while (++index < extensions.length) { - extension$2(config, extensions[index]); + extension(config, extensions[index]); } return config } -function extension$2(config, extension) { +function extension(config, extension) { var key; var left; for (key in extension) { - left = hasOwnProperty.call(config, key) ? config[key] : (config[key] = {}); + left = own$6.call(config, key) ? config[key] : (config[key] = {}); - if (key === 'canContainEols') { + if (key === 'canContainEols' || key === 'transforms') { config[key] = [].concat(left, extension[key]); } else { Object.assign(left, extension[key]); @@ -38182,19 +43758,19 @@ function extension$2(config, extension) { } } -var mdastUtilFromMarkdown = dist$2; - -var remarkParse = parse$8; +var mdastUtilFromMarkdown = dist; +var remarkParse = parse$2; +var fromMarkdown = mdastUtilFromMarkdown; -function parse$8(options) { +function parse$2(options) { var self = this; this.Parser = parse; function parse(doc) { - return mdastUtilFromMarkdown( + return fromMarkdown( doc, Object.assign({}, self.data('settings'), options, { // Note: these options are not in the readme. @@ -38207,13 +43783,13 @@ function parse$8(options) { } } -var zwitch = factory$1; +var zwitch$1 = factory$3; var noop$1 = Function.prototype; var own$5 = {}.hasOwnProperty; // Handle values based on a property. -function factory$1(key, options) { +function factory$3(key, options) { var settings = options || {}; function one(value) { @@ -38234,16 +43810,16 @@ function factory$1(key, options) { return one } -var configure_1$2 = configure$3; +var configure_1 = configure$1; -function configure$3(base, extension) { +function configure$1(base, extension) { var index = -1; var key; // First do subextensions. if (extension.extensions) { while (++index < extension.extensions.length) { - configure$3(base, extension.extensions[index]); + configure$1(base, extension.extensions[index]); } } @@ -38260,11 +43836,13 @@ function configure$3(base, extension) { return base } -var containerFlow = flow$2; +var handle = {}; +var containerFlow$1 = flow$4; +var repeat$5 = repeatString; -function flow$2(parent, context) { +function flow$4(parent, context) { var children = parent.children || []; var results = []; var index = -1; @@ -38296,7 +43874,7 @@ function flow$2(parent, context) { } if (typeof result === 'number') { - return repeatString('\n', 1 + Number(result)) + return repeat$5('\n', 1 + Number(result)) } if (result === false) { @@ -38308,17 +43886,17 @@ function flow$2(parent, context) { } } -var indentLines_1 = indentLines; +var indentLines_1 = indentLines$4; -var eol = /\r?\n|\r/g; +var eol$1 = /\r?\n|\r/g; -function indentLines(value, map) { +function indentLines$4(value, map) { var result = []; var start = 0; var line = 0; var match; - while ((match = eol.exec(value))) { + while ((match = eol$1.exec(value))) { one(value.slice(start, match.index)); result.push(match[0]); start = match.index + match[0].length; @@ -38336,12 +43914,12 @@ function indentLines(value, map) { var blockquote_1 = blockquote; - - +var flow$3 = containerFlow$1; +var indentLines$3 = indentLines_1; function blockquote(node, _, context) { var exit = context.enter('blockquote'); - var value = indentLines_1(containerFlow(node, context), map$3); + var value = indentLines$3(flow$3(node, context), map$3); exit(); return value } @@ -38350,9 +43928,55 @@ function map$3(line, index, blank) { return '>' + (blank ? '' : ' ') + line } +var patternInScope_1 = patternInScope$2; + +function patternInScope$2(stack, pattern) { + return ( + listInScope(stack, pattern.inConstruct, true) && + !listInScope(stack, pattern.notInConstruct) + ) +} + +function listInScope(stack, list, none) { + var index; + + if (!list) { + return none + } + + if (typeof list === 'string') { + list = [list]; + } + + index = -1; + + while (++index < list.length) { + if (stack.indexOf(list[index]) !== -1) { + return true + } + } + + return false +} + var _break = hardBreak; -function hardBreak() { +var patternInScope$1 = patternInScope_1; + +function hardBreak(node, _, context, safe) { + var index = -1; + + while (++index < context.unsafe.length) { + // If we can’t put eols in this construct (setext headings, tables), use a + // space instead. + if ( + context.unsafe[index].character === '\n' && + patternInScope$1(context.stack, context.unsafe[index]) + ) { + return /[ \t]/.test(safe.before) ? '' : ' ' + } + } + return '\\\n' } @@ -38391,9 +44015,9 @@ function longestStreak(value, character) { return maximum } -var formatCodeAsIndented_1 = formatCodeAsIndented; +var formatCodeAsIndented_1 = formatCodeAsIndented$2; -function formatCodeAsIndented(node, context) { +function formatCodeAsIndented$2(node, context) { return ( !context.options.fences && node.value && @@ -38402,13 +44026,13 @@ function formatCodeAsIndented(node, context) { // And there’s a non-whitespace character… /[^ \r\n]/.test(node.value) && // And the value doesn’t start or end in a blank… - !/^[\t ]*[\r\n]|[\r\n][\t ]*$/.test(node.value) + !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value) ) } -var checkFence_1 = checkFence; +var checkFence_1 = checkFence$1; -function checkFence(context) { +function checkFence$1(context) { var marker = context.options.fence || '`'; if (marker !== '`' && marker !== '~') { @@ -38422,9 +44046,38 @@ function checkFence(context) { return marker } -var safe_1 = safe; +var patternCompile_1 = patternCompile$3; + +function patternCompile$3(pattern) { + var before; + var after; + + if (!pattern._compiled) { + before = pattern.before ? '(?:' + pattern.before + ')' : ''; + after = pattern.after ? '(?:' + pattern.after + ')' : ''; + + if (pattern.atBreak) { + before = '[\\r\\n][\\t ]*' + before; + } + + pattern._compiled = new RegExp( + (before ? '(' + before + ')' : '') + + (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') + + pattern.character + + (after || ''), + 'g' + ); + } + + return pattern._compiled +} + +var safe_1 = safe$7; + +var patternCompile$2 = patternCompile_1; +var patternInScope = patternInScope_1; -function safe(context, input, config) { +function safe$7(context, input, config) { var value = (config.before || '') + (input || '') + (config.after || ''); var positions = []; var result = []; @@ -38442,19 +44095,16 @@ function safe(context, input, config) { while (++index < context.unsafe.length) { pattern = context.unsafe[index]; - if ( - !inScope(context.stack, pattern.inConstruct, true) || - inScope(context.stack, pattern.notInConstruct) - ) { + if (!patternInScope(context.stack, pattern)) { continue } - expression = - pattern._compiled || (pattern._compiled = toExpression(pattern)); + expression = patternCompile$2(pattern); while ((match = expression.exec(value))) { before = 'before' in pattern || pattern.atBreak; after = 'after' in pattern; + position = match.index + (before ? match[1].length : 0); if (positions.indexOf(position) === -1) { @@ -38503,7 +44153,10 @@ function safe(context, input, config) { } if (start !== position) { - result.push(value.slice(start, position)); + // If we have to use a character reference, an ampersand would be more + // correct, but as backslashes only care about punctuation, either will + // do the trick + result.push(escapeBackslashes(value.slice(start, position), '\\')); } start = position; @@ -38523,65 +44176,53 @@ function safe(context, input, config) { } } - result.push(value.slice(start, end)); + result.push(escapeBackslashes(value.slice(start, end), config.after)); return result.join('') } -function inScope(stack, list, none) { - var index; +function numerical(a, b) { + return a - b +} - if (!list) { - return none - } +function escapeBackslashes(value, after) { + var expression = /\\(?=[!-/:-@[-`{-~])/g; + var positions = []; + var results = []; + var index = -1; + var start = 0; + var whole = value + after; + var match; - if (typeof list === 'string') { - list = [list]; + while ((match = expression.exec(whole))) { + positions.push(match.index); } - index = -1; - - while (++index < list.length) { - if (stack.indexOf(list[index]) !== -1) { - return true + while (++index < positions.length) { + if (start !== positions[index]) { + results.push(value.slice(start, positions[index])); } - } - - return false -} - -function toExpression(pattern) { - var before = pattern.before ? '(?:' + pattern.before + ')' : ''; - var after = pattern.after ? '(?:' + pattern.after + ')' : ''; - if (pattern.atBreak) { - before = '[\\r\\n][\\t ]*' + before; + results.push('\\'); + start = positions[index]; } - return new RegExp( - (before ? '(' + before + ')' : '') + - (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') + - pattern.character + - (after || ''), - 'g' - ) -} + results.push(value.slice(start)); -function numerical(a, b) { - return a - b + return results.join('') } -var code_1 = code; - +var code_1 = code$1; +var repeat$4 = repeatString; +var streak = longestStreak_1; +var formatCodeAsIndented$1 = formatCodeAsIndented_1; +var checkFence = checkFence_1; +var indentLines$2 = indentLines_1; +var safe$6 = safe_1; - - - - - -function code(node, _, context) { - var marker = checkFence_1(context); +function code$1(node, _, context) { + var marker = checkFence(context); var raw = node.value || ''; var suffix = marker === '`' ? 'GraveAccent' : 'Tilde'; var value; @@ -38589,17 +44230,17 @@ function code(node, _, context) { var exit; var subexit; - if (formatCodeAsIndented_1(node, context)) { + if (formatCodeAsIndented$1(node, context)) { exit = context.enter('codeIndented'); - value = indentLines_1(raw, map$4); + value = indentLines$2(raw, map$2); } else { - sequence = repeatString(marker, Math.max(longestStreak_1(raw, marker) + 1, 3)); + sequence = repeat$4(marker, Math.max(streak(raw, marker) + 1, 3)); exit = context.enter('codeFenced'); value = sequence; if (node.lang) { subexit = context.enter('codeFencedLang' + suffix); - value += safe_1(context, node.lang, { + value += safe$6(context, node.lang, { before: '`', after: ' ', encode: ['`'] @@ -38611,7 +44252,7 @@ function code(node, _, context) { subexit = context.enter('codeFencedMeta' + suffix); value += ' ' + - safe_1(context, node.meta, { + safe$6(context, node.meta, { before: ' ', after: '\n', encode: ['`'] @@ -38621,27 +44262,4484 @@ function code(node, _, context) { value += '\n'; - if (raw) { - value += raw + '\n'; - } + if (raw) { + value += raw + '\n'; + } + + value += sequence; + } + + exit(); + return value +} + +function map$2(line, _, blank) { + return (blank ? '' : ' ') + line +} + +const AEli = "Æ"; +const AElig = "Æ"; +const AM = "&"; +const AMP = "&"; +const Aacut = "Á"; +const Aacute = "Á"; +const Abreve = "Ă"; +const Acir = "Â"; +const Acirc = "Â"; +const Acy = "А"; +const Afr = "𝔄"; +const Agrav = "À"; +const Agrave = "À"; +const Alpha = "Α"; +const Amacr = "Ā"; +const And = "⩓"; +const Aogon = "Ą"; +const Aopf = "𝔸"; +const ApplyFunction = "⁡"; +const Arin = "Å"; +const Aring = "Å"; +const Ascr = "𝒜"; +const Assign = "≔"; +const Atild = "Ã"; +const Atilde = "Ã"; +const Aum = "Ä"; +const Auml = "Ä"; +const Backslash = "∖"; +const Barv = "⫧"; +const Barwed = "⌆"; +const Bcy = "Б"; +const Because = "∵"; +const Bernoullis = "ℬ"; +const Beta = "Β"; +const Bfr = "𝔅"; +const Bopf = "𝔹"; +const Breve = "˘"; +const Bscr = "ℬ"; +const Bumpeq = "≎"; +const CHcy = "Ч"; +const COP = "©"; +const COPY = "©"; +const Cacute = "Ć"; +const Cap = "⋒"; +const CapitalDifferentialD = "ⅅ"; +const Cayleys = "ℭ"; +const Ccaron = "Č"; +const Ccedi = "Ç"; +const Ccedil = "Ç"; +const Ccirc = "Ĉ"; +const Cconint = "∰"; +const Cdot = "Ċ"; +const Cedilla = "¸"; +const CenterDot = "·"; +const Cfr = "ℭ"; +const Chi = "Χ"; +const CircleDot = "⊙"; +const CircleMinus = "⊖"; +const CirclePlus = "⊕"; +const CircleTimes = "⊗"; +const ClockwiseContourIntegral = "∲"; +const CloseCurlyDoubleQuote = "”"; +const CloseCurlyQuote = "’"; +const Colon = "∷"; +const Colone = "⩴"; +const Congruent = "≡"; +const Conint = "∯"; +const ContourIntegral = "∮"; +const Copf = "ℂ"; +const Coproduct = "∐"; +const CounterClockwiseContourIntegral = "∳"; +const Cross = "⨯"; +const Cscr = "𝒞"; +const Cup = "⋓"; +const CupCap = "≍"; +const DD = "ⅅ"; +const DDotrahd = "⤑"; +const DJcy = "Ђ"; +const DScy = "Ѕ"; +const DZcy = "Џ"; +const Dagger = "‡"; +const Darr = "↡"; +const Dashv = "⫤"; +const Dcaron = "Ď"; +const Dcy = "Д"; +const Del = "∇"; +const Delta = "Δ"; +const Dfr = "𝔇"; +const DiacriticalAcute = "´"; +const DiacriticalDot = "˙"; +const DiacriticalDoubleAcute = "˝"; +const DiacriticalGrave = "`"; +const DiacriticalTilde = "˜"; +const Diamond = "⋄"; +const DifferentialD = "ⅆ"; +const Dopf = "𝔻"; +const Dot = "¨"; +const DotDot = "⃜"; +const DotEqual = "≐"; +const DoubleContourIntegral = "∯"; +const DoubleDot = "¨"; +const DoubleDownArrow = "⇓"; +const DoubleLeftArrow = "⇐"; +const DoubleLeftRightArrow = "⇔"; +const DoubleLeftTee = "⫤"; +const DoubleLongLeftArrow = "⟸"; +const DoubleLongLeftRightArrow = "⟺"; +const DoubleLongRightArrow = "⟹"; +const DoubleRightArrow = "⇒"; +const DoubleRightTee = "⊨"; +const DoubleUpArrow = "⇑"; +const DoubleUpDownArrow = "⇕"; +const DoubleVerticalBar = "∥"; +const DownArrow = "↓"; +const DownArrowBar = "⤓"; +const DownArrowUpArrow = "⇵"; +const DownBreve = "̑"; +const DownLeftRightVector = "⥐"; +const DownLeftTeeVector = "⥞"; +const DownLeftVector = "↽"; +const DownLeftVectorBar = "⥖"; +const DownRightTeeVector = "⥟"; +const DownRightVector = "⇁"; +const DownRightVectorBar = "⥗"; +const DownTee = "⊤"; +const DownTeeArrow = "↧"; +const Downarrow = "⇓"; +const Dscr = "𝒟"; +const Dstrok = "Đ"; +const ENG = "Ŋ"; +const ET = "Ð"; +const ETH = "Ð"; +const Eacut = "É"; +const Eacute = "É"; +const Ecaron = "Ě"; +const Ecir = "Ê"; +const Ecirc = "Ê"; +const Ecy = "Э"; +const Edot = "Ė"; +const Efr = "𝔈"; +const Egrav = "È"; +const Egrave = "È"; +const Element = "∈"; +const Emacr = "Ē"; +const EmptySmallSquare = "◻"; +const EmptyVerySmallSquare = "▫"; +const Eogon = "Ę"; +const Eopf = "𝔼"; +const Epsilon = "Ε"; +const Equal = "⩵"; +const EqualTilde = "≂"; +const Equilibrium = "⇌"; +const Escr = "ℰ"; +const Esim = "⩳"; +const Eta = "Η"; +const Eum = "Ë"; +const Euml = "Ë"; +const Exists = "∃"; +const ExponentialE = "ⅇ"; +const Fcy = "Ф"; +const Ffr = "𝔉"; +const FilledSmallSquare = "◼"; +const FilledVerySmallSquare = "▪"; +const Fopf = "𝔽"; +const ForAll = "∀"; +const Fouriertrf = "ℱ"; +const Fscr = "ℱ"; +const GJcy = "Ѓ"; +const G = ">"; +const GT = ">"; +const Gamma = "Γ"; +const Gammad = "Ϝ"; +const Gbreve = "Ğ"; +const Gcedil = "Ģ"; +const Gcirc = "Ĝ"; +const Gcy = "Г"; +const Gdot = "Ġ"; +const Gfr = "𝔊"; +const Gg = "⋙"; +const Gopf = "𝔾"; +const GreaterEqual = "≥"; +const GreaterEqualLess = "⋛"; +const GreaterFullEqual = "≧"; +const GreaterGreater = "⪢"; +const GreaterLess = "≷"; +const GreaterSlantEqual = "⩾"; +const GreaterTilde = "≳"; +const Gscr = "𝒢"; +const Gt = "≫"; +const HARDcy = "Ъ"; +const Hacek = "ˇ"; +const Hat = "^"; +const Hcirc = "Ĥ"; +const Hfr = "ℌ"; +const HilbertSpace = "ℋ"; +const Hopf = "ℍ"; +const HorizontalLine = "─"; +const Hscr = "ℋ"; +const Hstrok = "Ħ"; +const HumpDownHump = "≎"; +const HumpEqual = "≏"; +const IEcy = "Е"; +const IJlig = "IJ"; +const IOcy = "Ё"; +const Iacut = "Í"; +const Iacute = "Í"; +const Icir = "Î"; +const Icirc = "Î"; +const Icy = "И"; +const Idot = "İ"; +const Ifr = "ℑ"; +const Igrav = "Ì"; +const Igrave = "Ì"; +const Im = "ℑ"; +const Imacr = "Ī"; +const ImaginaryI = "ⅈ"; +const Implies = "⇒"; +const Int = "∬"; +const Integral = "∫"; +const Intersection = "⋂"; +const InvisibleComma = "⁣"; +const InvisibleTimes = "⁢"; +const Iogon = "Į"; +const Iopf = "𝕀"; +const Iota = "Ι"; +const Iscr = "ℐ"; +const Itilde = "Ĩ"; +const Iukcy = "І"; +const Ium = "Ï"; +const Iuml = "Ï"; +const Jcirc = "Ĵ"; +const Jcy = "Й"; +const Jfr = "𝔍"; +const Jopf = "𝕁"; +const Jscr = "𝒥"; +const Jsercy = "Ј"; +const Jukcy = "Є"; +const KHcy = "Х"; +const KJcy = "Ќ"; +const Kappa = "Κ"; +const Kcedil = "Ķ"; +const Kcy = "К"; +const Kfr = "𝔎"; +const Kopf = "𝕂"; +const Kscr = "𝒦"; +const LJcy = "Љ"; +const L = "<"; +const LT = "<"; +const Lacute = "Ĺ"; +const Lambda = "Λ"; +const Lang = "⟪"; +const Laplacetrf = "ℒ"; +const Larr = "↞"; +const Lcaron = "Ľ"; +const Lcedil = "Ļ"; +const Lcy = "Л"; +const LeftAngleBracket = "⟨"; +const LeftArrow = "←"; +const LeftArrowBar = "⇤"; +const LeftArrowRightArrow = "⇆"; +const LeftCeiling = "⌈"; +const LeftDoubleBracket = "⟦"; +const LeftDownTeeVector = "⥡"; +const LeftDownVector = "⇃"; +const LeftDownVectorBar = "⥙"; +const LeftFloor = "⌊"; +const LeftRightArrow = "↔"; +const LeftRightVector = "⥎"; +const LeftTee = "⊣"; +const LeftTeeArrow = "↤"; +const LeftTeeVector = "⥚"; +const LeftTriangle = "⊲"; +const LeftTriangleBar = "⧏"; +const LeftTriangleEqual = "⊴"; +const LeftUpDownVector = "⥑"; +const LeftUpTeeVector = "⥠"; +const LeftUpVector = "↿"; +const LeftUpVectorBar = "⥘"; +const LeftVector = "↼"; +const LeftVectorBar = "⥒"; +const Leftarrow = "⇐"; +const Leftrightarrow = "⇔"; +const LessEqualGreater = "⋚"; +const LessFullEqual = "≦"; +const LessGreater = "≶"; +const LessLess = "⪡"; +const LessSlantEqual = "⩽"; +const LessTilde = "≲"; +const Lfr = "𝔏"; +const Ll = "⋘"; +const Lleftarrow = "⇚"; +const Lmidot = "Ŀ"; +const LongLeftArrow = "⟵"; +const LongLeftRightArrow = "⟷"; +const LongRightArrow = "⟶"; +const Longleftarrow = "⟸"; +const Longleftrightarrow = "⟺"; +const Longrightarrow = "⟹"; +const Lopf = "𝕃"; +const LowerLeftArrow = "↙"; +const LowerRightArrow = "↘"; +const Lscr = "ℒ"; +const Lsh = "↰"; +const Lstrok = "Ł"; +const Lt = "≪"; +const Mcy = "М"; +const MediumSpace = " "; +const Mellintrf = "ℳ"; +const Mfr = "𝔐"; +const MinusPlus = "∓"; +const Mopf = "𝕄"; +const Mscr = "ℳ"; +const Mu = "Μ"; +const NJcy = "Њ"; +const Nacute = "Ń"; +const Ncaron = "Ň"; +const Ncedil = "Ņ"; +const Ncy = "Н"; +const NegativeMediumSpace = "​"; +const NegativeThickSpace = "​"; +const NegativeThinSpace = "​"; +const NegativeVeryThinSpace = "​"; +const NestedGreaterGreater = "≫"; +const NestedLessLess = "≪"; +const NewLine = "\n"; +const Nfr = "𝔑"; +const NoBreak = "⁠"; +const NonBreakingSpace = " "; +const Nopf = "ℕ"; +const Not = "⫬"; +const NotCongruent = "≢"; +const NotCupCap = "≭"; +const NotDoubleVerticalBar = "∦"; +const NotElement = "∉"; +const NotEqual = "≠"; +const NotEqualTilde = "≂̸"; +const NotExists = "∄"; +const NotGreater = "≯"; +const NotGreaterEqual = "≱"; +const NotGreaterFullEqual = "≧̸"; +const NotGreaterGreater = "≫̸"; +const NotGreaterLess = "≹"; +const NotGreaterSlantEqual = "⩾̸"; +const NotGreaterTilde = "≵"; +const NotHumpDownHump = "≎̸"; +const NotHumpEqual = "≏̸"; +const NotLeftTriangle = "⋪"; +const NotLeftTriangleBar = "⧏̸"; +const NotLeftTriangleEqual = "⋬"; +const NotLess = "≮"; +const NotLessEqual = "≰"; +const NotLessGreater = "≸"; +const NotLessLess = "≪̸"; +const NotLessSlantEqual = "⩽̸"; +const NotLessTilde = "≴"; +const NotNestedGreaterGreater = "⪢̸"; +const NotNestedLessLess = "⪡̸"; +const NotPrecedes = "⊀"; +const NotPrecedesEqual = "⪯̸"; +const NotPrecedesSlantEqual = "⋠"; +const NotReverseElement = "∌"; +const NotRightTriangle = "⋫"; +const NotRightTriangleBar = "⧐̸"; +const NotRightTriangleEqual = "⋭"; +const NotSquareSubset = "⊏̸"; +const NotSquareSubsetEqual = "⋢"; +const NotSquareSuperset = "⊐̸"; +const NotSquareSupersetEqual = "⋣"; +const NotSubset = "⊂⃒"; +const NotSubsetEqual = "⊈"; +const NotSucceeds = "⊁"; +const NotSucceedsEqual = "⪰̸"; +const NotSucceedsSlantEqual = "⋡"; +const NotSucceedsTilde = "≿̸"; +const NotSuperset = "⊃⃒"; +const NotSupersetEqual = "⊉"; +const NotTilde = "≁"; +const NotTildeEqual = "≄"; +const NotTildeFullEqual = "≇"; +const NotTildeTilde = "≉"; +const NotVerticalBar = "∤"; +const Nscr = "𝒩"; +const Ntild = "Ñ"; +const Ntilde = "Ñ"; +const Nu = "Ν"; +const OElig = "Œ"; +const Oacut = "Ó"; +const Oacute = "Ó"; +const Ocir = "Ô"; +const Ocirc = "Ô"; +const Ocy = "О"; +const Odblac = "Ő"; +const Ofr = "𝔒"; +const Ograv = "Ò"; +const Ograve = "Ò"; +const Omacr = "Ō"; +const Omega = "Ω"; +const Omicron = "Ο"; +const Oopf = "𝕆"; +const OpenCurlyDoubleQuote = "“"; +const OpenCurlyQuote = "‘"; +const Or = "⩔"; +const Oscr = "𝒪"; +const Oslas = "Ø"; +const Oslash = "Ø"; +const Otild = "Õ"; +const Otilde = "Õ"; +const Otimes = "⨷"; +const Oum = "Ö"; +const Ouml = "Ö"; +const OverBar = "‾"; +const OverBrace = "⏞"; +const OverBracket = "⎴"; +const OverParenthesis = "⏜"; +const PartialD = "∂"; +const Pcy = "П"; +const Pfr = "𝔓"; +const Phi = "Φ"; +const Pi = "Π"; +const PlusMinus = "±"; +const Poincareplane = "ℌ"; +const Popf = "ℙ"; +const Pr = "⪻"; +const Precedes = "≺"; +const PrecedesEqual = "⪯"; +const PrecedesSlantEqual = "≼"; +const PrecedesTilde = "≾"; +const Prime = "″"; +const Product = "∏"; +const Proportion = "∷"; +const Proportional = "∝"; +const Pscr = "𝒫"; +const Psi = "Ψ"; +const QUO = "\""; +const QUOT = "\""; +const Qfr = "𝔔"; +const Qopf = "ℚ"; +const Qscr = "𝒬"; +const RBarr = "⤐"; +const RE = "®"; +const REG = "®"; +const Racute = "Ŕ"; +const Rang = "⟫"; +const Rarr = "↠"; +const Rarrtl = "⤖"; +const Rcaron = "Ř"; +const Rcedil = "Ŗ"; +const Rcy = "Р"; +const Re = "ℜ"; +const ReverseElement = "∋"; +const ReverseEquilibrium = "⇋"; +const ReverseUpEquilibrium = "⥯"; +const Rfr = "ℜ"; +const Rho = "Ρ"; +const RightAngleBracket = "⟩"; +const RightArrow = "→"; +const RightArrowBar = "⇥"; +const RightArrowLeftArrow = "⇄"; +const RightCeiling = "⌉"; +const RightDoubleBracket = "⟧"; +const RightDownTeeVector = "⥝"; +const RightDownVector = "⇂"; +const RightDownVectorBar = "⥕"; +const RightFloor = "⌋"; +const RightTee = "⊢"; +const RightTeeArrow = "↦"; +const RightTeeVector = "⥛"; +const RightTriangle = "⊳"; +const RightTriangleBar = "⧐"; +const RightTriangleEqual = "⊵"; +const RightUpDownVector = "⥏"; +const RightUpTeeVector = "⥜"; +const RightUpVector = "↾"; +const RightUpVectorBar = "⥔"; +const RightVector = "⇀"; +const RightVectorBar = "⥓"; +const Rightarrow = "⇒"; +const Ropf = "ℝ"; +const RoundImplies = "⥰"; +const Rrightarrow = "⇛"; +const Rscr = "ℛ"; +const Rsh = "↱"; +const RuleDelayed = "⧴"; +const SHCHcy = "Щ"; +const SHcy = "Ш"; +const SOFTcy = "Ь"; +const Sacute = "Ś"; +const Sc = "⪼"; +const Scaron = "Š"; +const Scedil = "Ş"; +const Scirc = "Ŝ"; +const Scy = "С"; +const Sfr = "𝔖"; +const ShortDownArrow = "↓"; +const ShortLeftArrow = "←"; +const ShortRightArrow = "→"; +const ShortUpArrow = "↑"; +const Sigma = "Σ"; +const SmallCircle = "∘"; +const Sopf = "𝕊"; +const Sqrt = "√"; +const Square = "□"; +const SquareIntersection = "⊓"; +const SquareSubset = "⊏"; +const SquareSubsetEqual = "⊑"; +const SquareSuperset = "⊐"; +const SquareSupersetEqual = "⊒"; +const SquareUnion = "⊔"; +const Sscr = "𝒮"; +const Star = "⋆"; +const Sub = "⋐"; +const Subset = "⋐"; +const SubsetEqual = "⊆"; +const Succeeds = "≻"; +const SucceedsEqual = "⪰"; +const SucceedsSlantEqual = "≽"; +const SucceedsTilde = "≿"; +const SuchThat = "∋"; +const Sum = "∑"; +const Sup = "⋑"; +const Superset = "⊃"; +const SupersetEqual = "⊇"; +const Supset = "⋑"; +const THOR = "Þ"; +const THORN = "Þ"; +const TRADE = "™"; +const TSHcy = "Ћ"; +const TScy = "Ц"; +const Tab = "\t"; +const Tau = "Τ"; +const Tcaron = "Ť"; +const Tcedil = "Ţ"; +const Tcy = "Т"; +const Tfr = "𝔗"; +const Therefore = "∴"; +const Theta = "Θ"; +const ThickSpace = "  "; +const ThinSpace = " "; +const Tilde = "∼"; +const TildeEqual = "≃"; +const TildeFullEqual = "≅"; +const TildeTilde = "≈"; +const Topf = "𝕋"; +const TripleDot = "⃛"; +const Tscr = "𝒯"; +const Tstrok = "Ŧ"; +const Uacut = "Ú"; +const Uacute = "Ú"; +const Uarr = "↟"; +const Uarrocir = "⥉"; +const Ubrcy = "Ў"; +const Ubreve = "Ŭ"; +const Ucir = "Û"; +const Ucirc = "Û"; +const Ucy = "У"; +const Udblac = "Ű"; +const Ufr = "𝔘"; +const Ugrav = "Ù"; +const Ugrave = "Ù"; +const Umacr = "Ū"; +const UnderBar = "_"; +const UnderBrace = "⏟"; +const UnderBracket = "⎵"; +const UnderParenthesis = "⏝"; +const Union = "⋃"; +const UnionPlus = "⊎"; +const Uogon = "Ų"; +const Uopf = "𝕌"; +const UpArrow = "↑"; +const UpArrowBar = "⤒"; +const UpArrowDownArrow = "⇅"; +const UpDownArrow = "↕"; +const UpEquilibrium = "⥮"; +const UpTee = "⊥"; +const UpTeeArrow = "↥"; +const Uparrow = "⇑"; +const Updownarrow = "⇕"; +const UpperLeftArrow = "↖"; +const UpperRightArrow = "↗"; +const Upsi = "ϒ"; +const Upsilon = "Υ"; +const Uring = "Ů"; +const Uscr = "𝒰"; +const Utilde = "Ũ"; +const Uum = "Ü"; +const Uuml = "Ü"; +const VDash = "⊫"; +const Vbar = "⫫"; +const Vcy = "В"; +const Vdash = "⊩"; +const Vdashl = "⫦"; +const Vee = "⋁"; +const Verbar = "‖"; +const Vert = "‖"; +const VerticalBar = "∣"; +const VerticalLine = "|"; +const VerticalSeparator = "❘"; +const VerticalTilde = "≀"; +const VeryThinSpace = " "; +const Vfr = "𝔙"; +const Vopf = "𝕍"; +const Vscr = "𝒱"; +const Vvdash = "⊪"; +const Wcirc = "Ŵ"; +const Wedge = "⋀"; +const Wfr = "𝔚"; +const Wopf = "𝕎"; +const Wscr = "𝒲"; +const Xfr = "𝔛"; +const Xi = "Ξ"; +const Xopf = "𝕏"; +const Xscr = "𝒳"; +const YAcy = "Я"; +const YIcy = "Ї"; +const YUcy = "Ю"; +const Yacut = "Ý"; +const Yacute = "Ý"; +const Ycirc = "Ŷ"; +const Ycy = "Ы"; +const Yfr = "𝔜"; +const Yopf = "𝕐"; +const Yscr = "𝒴"; +const Yuml = "Ÿ"; +const ZHcy = "Ж"; +const Zacute = "Ź"; +const Zcaron = "Ž"; +const Zcy = "З"; +const Zdot = "Ż"; +const ZeroWidthSpace = "​"; +const Zeta = "Ζ"; +const Zfr = "ℨ"; +const Zopf = "ℤ"; +const Zscr = "𝒵"; +const aacut = "á"; +const aacute = "á"; +const abreve = "ă"; +const ac = "∾"; +const acE = "∾̳"; +const acd = "∿"; +const acir = "â"; +const acirc = "â"; +const acut = "´"; +const acute = "´"; +const acy = "а"; +const aeli = "æ"; +const aelig = "æ"; +const af = "⁡"; +const afr = "𝔞"; +const agrav = "à"; +const agrave = "à"; +const alefsym = "ℵ"; +const aleph = "ℵ"; +const alpha = "α"; +const amacr = "ā"; +const amalg = "⨿"; +const am = "&"; +const amp = "&"; +const and = "∧"; +const andand = "⩕"; +const andd = "⩜"; +const andslope = "⩘"; +const andv = "⩚"; +const ang = "∠"; +const ange = "⦤"; +const angle = "∠"; +const angmsd = "∡"; +const angmsdaa = "⦨"; +const angmsdab = "⦩"; +const angmsdac = "⦪"; +const angmsdad = "⦫"; +const angmsdae = "⦬"; +const angmsdaf = "⦭"; +const angmsdag = "⦮"; +const angmsdah = "⦯"; +const angrt = "∟"; +const angrtvb = "⊾"; +const angrtvbd = "⦝"; +const angsph = "∢"; +const angst = "Å"; +const angzarr = "⍼"; +const aogon = "ą"; +const aopf = "𝕒"; +const ap = "≈"; +const apE = "⩰"; +const apacir = "⩯"; +const ape = "≊"; +const apid = "≋"; +const apos = "'"; +const approx = "≈"; +const approxeq = "≊"; +const arin = "å"; +const aring = "å"; +const ascr = "𝒶"; +const ast = "*"; +const asymp = "≈"; +const asympeq = "≍"; +const atild = "ã"; +const atilde = "ã"; +const aum = "ä"; +const auml = "ä"; +const awconint = "∳"; +const awint = "⨑"; +const bNot = "⫭"; +const backcong = "≌"; +const backepsilon = "϶"; +const backprime = "‵"; +const backsim = "∽"; +const backsimeq = "⋍"; +const barvee = "⊽"; +const barwed = "⌅"; +const barwedge = "⌅"; +const bbrk = "⎵"; +const bbrktbrk = "⎶"; +const bcong = "≌"; +const bcy = "б"; +const bdquo = "„"; +const becaus = "∵"; +const because = "∵"; +const bemptyv = "⦰"; +const bepsi = "϶"; +const bernou = "ℬ"; +const beta = "β"; +const beth = "ℶ"; +const between = "≬"; +const bfr = "𝔟"; +const bigcap = "⋂"; +const bigcirc = "◯"; +const bigcup = "⋃"; +const bigodot = "⨀"; +const bigoplus = "⨁"; +const bigotimes = "⨂"; +const bigsqcup = "⨆"; +const bigstar = "★"; +const bigtriangledown = "▽"; +const bigtriangleup = "△"; +const biguplus = "⨄"; +const bigvee = "⋁"; +const bigwedge = "⋀"; +const bkarow = "⤍"; +const blacklozenge = "⧫"; +const blacksquare = "▪"; +const blacktriangle = "▴"; +const blacktriangledown = "▾"; +const blacktriangleleft = "◂"; +const blacktriangleright = "▸"; +const blank = "␣"; +const blk12 = "▒"; +const blk14 = "░"; +const blk34 = "▓"; +const block = "█"; +const bne = "=⃥"; +const bnequiv = "≡⃥"; +const bnot = "⌐"; +const bopf = "𝕓"; +const bot = "⊥"; +const bottom = "⊥"; +const bowtie = "⋈"; +const boxDL = "╗"; +const boxDR = "╔"; +const boxDl = "╖"; +const boxDr = "╓"; +const boxH = "═"; +const boxHD = "╦"; +const boxHU = "╩"; +const boxHd = "╤"; +const boxHu = "╧"; +const boxUL = "╝"; +const boxUR = "╚"; +const boxUl = "╜"; +const boxUr = "╙"; +const boxV = "║"; +const boxVH = "╬"; +const boxVL = "╣"; +const boxVR = "╠"; +const boxVh = "╫"; +const boxVl = "╢"; +const boxVr = "╟"; +const boxbox = "⧉"; +const boxdL = "╕"; +const boxdR = "╒"; +const boxdl = "┐"; +const boxdr = "┌"; +const boxh = "─"; +const boxhD = "╥"; +const boxhU = "╨"; +const boxhd = "┬"; +const boxhu = "┴"; +const boxminus = "⊟"; +const boxplus = "⊞"; +const boxtimes = "⊠"; +const boxuL = "╛"; +const boxuR = "╘"; +const boxul = "┘"; +const boxur = "└"; +const boxv = "│"; +const boxvH = "╪"; +const boxvL = "╡"; +const boxvR = "╞"; +const boxvh = "┼"; +const boxvl = "┤"; +const boxvr = "├"; +const bprime = "‵"; +const breve = "˘"; +const brvba = "¦"; +const brvbar = "¦"; +const bscr = "𝒷"; +const bsemi = "⁏"; +const bsim = "∽"; +const bsime = "⋍"; +const bsol = "\\"; +const bsolb = "⧅"; +const bsolhsub = "⟈"; +const bull = "•"; +const bullet = "•"; +const bump = "≎"; +const bumpE = "⪮"; +const bumpe = "≏"; +const bumpeq = "≏"; +const cacute = "ć"; +const cap = "∩"; +const capand = "⩄"; +const capbrcup = "⩉"; +const capcap = "⩋"; +const capcup = "⩇"; +const capdot = "⩀"; +const caps = "∩︀"; +const caret = "⁁"; +const caron = "ˇ"; +const ccaps = "⩍"; +const ccaron = "č"; +const ccedi = "ç"; +const ccedil = "ç"; +const ccirc = "ĉ"; +const ccups = "⩌"; +const ccupssm = "⩐"; +const cdot = "ċ"; +const cedi = "¸"; +const cedil = "¸"; +const cemptyv = "⦲"; +const cen = "¢"; +const cent = "¢"; +const centerdot = "·"; +const cfr = "𝔠"; +const chcy = "ч"; +const check$1 = "✓"; +const checkmark = "✓"; +const chi = "χ"; +const cir = "○"; +const cirE = "⧃"; +const circ = "ˆ"; +const circeq = "≗"; +const circlearrowleft = "↺"; +const circlearrowright = "↻"; +const circledR = "®"; +const circledS = "Ⓢ"; +const circledast = "⊛"; +const circledcirc = "⊚"; +const circleddash = "⊝"; +const cire = "≗"; +const cirfnint = "⨐"; +const cirmid = "⫯"; +const cirscir = "⧂"; +const clubs = "♣"; +const clubsuit = "♣"; +const colon = ":"; +const colone = "≔"; +const coloneq = "≔"; +const comma = ","; +const commat = "@"; +const comp = "∁"; +const compfn = "∘"; +const complement = "∁"; +const complexes = "ℂ"; +const cong = "≅"; +const congdot = "⩭"; +const conint = "∮"; +const copf = "𝕔"; +const coprod = "∐"; +const cop = "©"; +const copy = "©"; +const copysr = "℗"; +const crarr = "↵"; +const cross = "✗"; +const cscr = "𝒸"; +const csub = "⫏"; +const csube = "⫑"; +const csup = "⫐"; +const csupe = "⫒"; +const ctdot = "⋯"; +const cudarrl = "⤸"; +const cudarrr = "⤵"; +const cuepr = "⋞"; +const cuesc = "⋟"; +const cularr = "↶"; +const cularrp = "⤽"; +const cup = "∪"; +const cupbrcap = "⩈"; +const cupcap = "⩆"; +const cupcup = "⩊"; +const cupdot = "⊍"; +const cupor = "⩅"; +const cups = "∪︀"; +const curarr = "↷"; +const curarrm = "⤼"; +const curlyeqprec = "⋞"; +const curlyeqsucc = "⋟"; +const curlyvee = "⋎"; +const curlywedge = "⋏"; +const curre = "¤"; +const curren = "¤"; +const curvearrowleft = "↶"; +const curvearrowright = "↷"; +const cuvee = "⋎"; +const cuwed = "⋏"; +const cwconint = "∲"; +const cwint = "∱"; +const cylcty = "⌭"; +const dArr = "⇓"; +const dHar = "⥥"; +const dagger = "†"; +const daleth = "ℸ"; +const darr = "↓"; +const dash = "‐"; +const dashv = "⊣"; +const dbkarow = "⤏"; +const dblac = "˝"; +const dcaron = "ď"; +const dcy = "д"; +const dd = "ⅆ"; +const ddagger = "‡"; +const ddarr = "⇊"; +const ddotseq = "⩷"; +const de = "°"; +const deg = "°"; +const delta = "δ"; +const demptyv = "⦱"; +const dfisht = "⥿"; +const dfr = "𝔡"; +const dharl = "⇃"; +const dharr = "⇂"; +const diam = "⋄"; +const diamond = "⋄"; +const diamondsuit = "♦"; +const diams = "♦"; +const die = "¨"; +const digamma = "ϝ"; +const disin = "⋲"; +const div = "÷"; +const divid = "÷"; +const divide = "÷"; +const divideontimes = "⋇"; +const divonx = "⋇"; +const djcy = "ђ"; +const dlcorn = "⌞"; +const dlcrop = "⌍"; +const dollar = "$"; +const dopf = "𝕕"; +const dot = "˙"; +const doteq = "≐"; +const doteqdot = "≑"; +const dotminus = "∸"; +const dotplus = "∔"; +const dotsquare = "⊡"; +const doublebarwedge = "⌆"; +const downarrow = "↓"; +const downdownarrows = "⇊"; +const downharpoonleft = "⇃"; +const downharpoonright = "⇂"; +const drbkarow = "⤐"; +const drcorn = "⌟"; +const drcrop = "⌌"; +const dscr = "𝒹"; +const dscy = "ѕ"; +const dsol = "⧶"; +const dstrok = "đ"; +const dtdot = "⋱"; +const dtri = "▿"; +const dtrif = "▾"; +const duarr = "⇵"; +const duhar = "⥯"; +const dwangle = "⦦"; +const dzcy = "џ"; +const dzigrarr = "⟿"; +const eDDot = "⩷"; +const eDot = "≑"; +const eacut = "é"; +const eacute = "é"; +const easter = "⩮"; +const ecaron = "ě"; +const ecir = "ê"; +const ecirc = "ê"; +const ecolon = "≕"; +const ecy = "э"; +const edot = "ė"; +const ee = "ⅇ"; +const efDot = "≒"; +const efr = "𝔢"; +const eg = "⪚"; +const egrav = "è"; +const egrave = "è"; +const egs = "⪖"; +const egsdot = "⪘"; +const el = "⪙"; +const elinters = "⏧"; +const ell = "ℓ"; +const els = "⪕"; +const elsdot = "⪗"; +const emacr = "ē"; +const empty = "∅"; +const emptyset = "∅"; +const emptyv = "∅"; +const emsp13 = " "; +const emsp14 = " "; +const emsp = " "; +const eng = "ŋ"; +const ensp = " "; +const eogon = "ę"; +const eopf = "𝕖"; +const epar = "⋕"; +const eparsl = "⧣"; +const eplus = "⩱"; +const epsi = "ε"; +const epsilon = "ε"; +const epsiv = "ϵ"; +const eqcirc = "≖"; +const eqcolon = "≕"; +const eqsim = "≂"; +const eqslantgtr = "⪖"; +const eqslantless = "⪕"; +const equals = "="; +const equest = "≟"; +const equiv = "≡"; +const equivDD = "⩸"; +const eqvparsl = "⧥"; +const erDot = "≓"; +const erarr = "⥱"; +const escr = "ℯ"; +const esdot = "≐"; +const esim = "≂"; +const eta = "η"; +const et = "ð"; +const eth = "ð"; +const eum = "ë"; +const euml = "ë"; +const euro = "€"; +const excl = "!"; +const exist = "∃"; +const expectation = "ℰ"; +const exponentiale = "ⅇ"; +const fallingdotseq = "≒"; +const fcy = "ф"; +const female = "♀"; +const ffilig = "ffi"; +const fflig = "ff"; +const ffllig = "ffl"; +const ffr = "𝔣"; +const filig = "fi"; +const fjlig = "fj"; +const flat = "♭"; +const fllig = "fl"; +const fltns = "▱"; +const fnof = "ƒ"; +const fopf = "𝕗"; +const forall = "∀"; +const fork = "⋔"; +const forkv = "⫙"; +const fpartint = "⨍"; +const frac1 = "¼"; +const frac12 = "½"; +const frac13 = "⅓"; +const frac14 = "¼"; +const frac15 = "⅕"; +const frac16 = "⅙"; +const frac18 = "⅛"; +const frac23 = "⅔"; +const frac25 = "⅖"; +const frac3 = "¾"; +const frac34 = "¾"; +const frac35 = "⅗"; +const frac38 = "⅜"; +const frac45 = "⅘"; +const frac56 = "⅚"; +const frac58 = "⅝"; +const frac78 = "⅞"; +const frasl = "⁄"; +const frown = "⌢"; +const fscr = "𝒻"; +const gE = "≧"; +const gEl = "⪌"; +const gacute = "ǵ"; +const gamma = "γ"; +const gammad = "ϝ"; +const gap = "⪆"; +const gbreve = "ğ"; +const gcirc = "ĝ"; +const gcy = "г"; +const gdot = "ġ"; +const ge = "≥"; +const gel = "⋛"; +const geq = "≥"; +const geqq = "≧"; +const geqslant = "⩾"; +const ges = "⩾"; +const gescc = "⪩"; +const gesdot = "⪀"; +const gesdoto = "⪂"; +const gesdotol = "⪄"; +const gesl = "⋛︀"; +const gesles = "⪔"; +const gfr = "𝔤"; +const gg = "≫"; +const ggg = "⋙"; +const gimel = "ℷ"; +const gjcy = "ѓ"; +const gl = "≷"; +const glE = "⪒"; +const gla = "⪥"; +const glj = "⪤"; +const gnE = "≩"; +const gnap = "⪊"; +const gnapprox = "⪊"; +const gne = "⪈"; +const gneq = "⪈"; +const gneqq = "≩"; +const gnsim = "⋧"; +const gopf = "𝕘"; +const grave = "`"; +const gscr = "ℊ"; +const gsim = "≳"; +const gsime = "⪎"; +const gsiml = "⪐"; +const g = ">"; +const gt = ">"; +const gtcc = "⪧"; +const gtcir = "⩺"; +const gtdot = "⋗"; +const gtlPar = "⦕"; +const gtquest = "⩼"; +const gtrapprox = "⪆"; +const gtrarr = "⥸"; +const gtrdot = "⋗"; +const gtreqless = "⋛"; +const gtreqqless = "⪌"; +const gtrless = "≷"; +const gtrsim = "≳"; +const gvertneqq = "≩︀"; +const gvnE = "≩︀"; +const hArr = "⇔"; +const hairsp = " "; +const half = "½"; +const hamilt = "ℋ"; +const hardcy = "ъ"; +const harr = "↔"; +const harrcir = "⥈"; +const harrw = "↭"; +const hbar = "ℏ"; +const hcirc = "ĥ"; +const hearts = "♥"; +const heartsuit = "♥"; +const hellip = "…"; +const hercon = "⊹"; +const hfr = "𝔥"; +const hksearow = "⤥"; +const hkswarow = "⤦"; +const hoarr = "⇿"; +const homtht = "∻"; +const hookleftarrow = "↩"; +const hookrightarrow = "↪"; +const hopf = "𝕙"; +const horbar = "―"; +const hscr = "𝒽"; +const hslash = "ℏ"; +const hstrok = "ħ"; +const hybull = "⁃"; +const hyphen = "‐"; +const iacut = "í"; +const iacute = "í"; +const ic = "⁣"; +const icir = "î"; +const icirc = "î"; +const icy = "и"; +const iecy = "е"; +const iexc = "¡"; +const iexcl = "¡"; +const iff = "⇔"; +const ifr = "𝔦"; +const igrav = "ì"; +const igrave = "ì"; +const ii = "ⅈ"; +const iiiint = "⨌"; +const iiint = "∭"; +const iinfin = "⧜"; +const iiota = "℩"; +const ijlig = "ij"; +const imacr = "ī"; +const image$1 = "ℑ"; +const imagline = "ℐ"; +const imagpart = "ℑ"; +const imath = "ı"; +const imof = "⊷"; +const imped = "Ƶ"; +const incare = "℅"; +const infin = "∞"; +const infintie = "⧝"; +const inodot = "ı"; +const int$1 = "∫"; +const intcal = "⊺"; +const integers = "ℤ"; +const intercal = "⊺"; +const intlarhk = "⨗"; +const intprod = "⨼"; +const iocy = "ё"; +const iogon = "į"; +const iopf = "𝕚"; +const iota = "ι"; +const iprod = "⨼"; +const iques = "¿"; +const iquest = "¿"; +const iscr = "𝒾"; +const isin = "∈"; +const isinE = "⋹"; +const isindot = "⋵"; +const isins = "⋴"; +const isinsv = "⋳"; +const isinv = "∈"; +const it = "⁢"; +const itilde = "ĩ"; +const iukcy = "і"; +const ium = "ï"; +const iuml = "ï"; +const jcirc = "ĵ"; +const jcy = "й"; +const jfr = "𝔧"; +const jmath = "ȷ"; +const jopf = "𝕛"; +const jscr = "𝒿"; +const jsercy = "ј"; +const jukcy = "є"; +const kappa = "κ"; +const kappav = "ϰ"; +const kcedil = "ķ"; +const kcy = "к"; +const kfr = "𝔨"; +const kgreen = "ĸ"; +const khcy = "х"; +const kjcy = "ќ"; +const kopf = "𝕜"; +const kscr = "𝓀"; +const lAarr = "⇚"; +const lArr = "⇐"; +const lAtail = "⤛"; +const lBarr = "⤎"; +const lE = "≦"; +const lEg = "⪋"; +const lHar = "⥢"; +const lacute = "ĺ"; +const laemptyv = "⦴"; +const lagran = "ℒ"; +const lambda = "λ"; +const lang = "⟨"; +const langd = "⦑"; +const langle = "⟨"; +const lap = "⪅"; +const laqu = "«"; +const laquo = "«"; +const larr = "←"; +const larrb = "⇤"; +const larrbfs = "⤟"; +const larrfs = "⤝"; +const larrhk = "↩"; +const larrlp = "↫"; +const larrpl = "⤹"; +const larrsim = "⥳"; +const larrtl = "↢"; +const lat = "⪫"; +const latail = "⤙"; +const late = "⪭"; +const lates = "⪭︀"; +const lbarr = "⤌"; +const lbbrk = "❲"; +const lbrace = "{"; +const lbrack = "["; +const lbrke = "⦋"; +const lbrksld = "⦏"; +const lbrkslu = "⦍"; +const lcaron = "ľ"; +const lcedil = "ļ"; +const lceil = "⌈"; +const lcub = "{"; +const lcy = "л"; +const ldca = "⤶"; +const ldquo = "“"; +const ldquor = "„"; +const ldrdhar = "⥧"; +const ldrushar = "⥋"; +const ldsh = "↲"; +const le = "≤"; +const leftarrow = "←"; +const leftarrowtail = "↢"; +const leftharpoondown = "↽"; +const leftharpoonup = "↼"; +const leftleftarrows = "⇇"; +const leftrightarrow = "↔"; +const leftrightarrows = "⇆"; +const leftrightharpoons = "⇋"; +const leftrightsquigarrow = "↭"; +const leftthreetimes = "⋋"; +const leg = "⋚"; +const leq = "≤"; +const leqq = "≦"; +const leqslant = "⩽"; +const les = "⩽"; +const lescc = "⪨"; +const lesdot = "⩿"; +const lesdoto = "⪁"; +const lesdotor = "⪃"; +const lesg = "⋚︀"; +const lesges = "⪓"; +const lessapprox = "⪅"; +const lessdot = "⋖"; +const lesseqgtr = "⋚"; +const lesseqqgtr = "⪋"; +const lessgtr = "≶"; +const lesssim = "≲"; +const lfisht = "⥼"; +const lfloor = "⌊"; +const lfr = "𝔩"; +const lg = "≶"; +const lgE = "⪑"; +const lhard = "↽"; +const lharu = "↼"; +const lharul = "⥪"; +const lhblk = "▄"; +const ljcy = "љ"; +const ll = "≪"; +const llarr = "⇇"; +const llcorner = "⌞"; +const llhard = "⥫"; +const lltri = "◺"; +const lmidot = "ŀ"; +const lmoust = "⎰"; +const lmoustache = "⎰"; +const lnE = "≨"; +const lnap = "⪉"; +const lnapprox = "⪉"; +const lne = "⪇"; +const lneq = "⪇"; +const lneqq = "≨"; +const lnsim = "⋦"; +const loang = "⟬"; +const loarr = "⇽"; +const lobrk = "⟦"; +const longleftarrow = "⟵"; +const longleftrightarrow = "⟷"; +const longmapsto = "⟼"; +const longrightarrow = "⟶"; +const looparrowleft = "↫"; +const looparrowright = "↬"; +const lopar = "⦅"; +const lopf = "𝕝"; +const loplus = "⨭"; +const lotimes = "⨴"; +const lowast = "∗"; +const lowbar = "_"; +const loz = "◊"; +const lozenge = "◊"; +const lozf = "⧫"; +const lpar = "("; +const lparlt = "⦓"; +const lrarr = "⇆"; +const lrcorner = "⌟"; +const lrhar = "⇋"; +const lrhard = "⥭"; +const lrm = "‎"; +const lrtri = "⊿"; +const lsaquo = "‹"; +const lscr = "𝓁"; +const lsh = "↰"; +const lsim = "≲"; +const lsime = "⪍"; +const lsimg = "⪏"; +const lsqb = "["; +const lsquo = "‘"; +const lsquor = "‚"; +const lstrok = "ł"; +const l = "<"; +const lt$1 = "<"; +const ltcc = "⪦"; +const ltcir = "⩹"; +const ltdot = "⋖"; +const lthree = "⋋"; +const ltimes = "⋉"; +const ltlarr = "⥶"; +const ltquest = "⩻"; +const ltrPar = "⦖"; +const ltri = "◃"; +const ltrie = "⊴"; +const ltrif = "◂"; +const lurdshar = "⥊"; +const luruhar = "⥦"; +const lvertneqq = "≨︀"; +const lvnE = "≨︀"; +const mDDot = "∺"; +const mac = "¯"; +const macr = "¯"; +const male = "♂"; +const malt = "✠"; +const maltese = "✠"; +const map$1 = "↦"; +const mapsto = "↦"; +const mapstodown = "↧"; +const mapstoleft = "↤"; +const mapstoup = "↥"; +const marker = "▮"; +const mcomma = "⨩"; +const mcy = "м"; +const mdash = "—"; +const measuredangle = "∡"; +const mfr = "𝔪"; +const mho = "℧"; +const micr = "µ"; +const micro = "µ"; +const mid = "∣"; +const midast = "*"; +const midcir = "⫰"; +const middo = "·"; +const middot = "·"; +const minus = "−"; +const minusb = "⊟"; +const minusd = "∸"; +const minusdu = "⨪"; +const mlcp = "⫛"; +const mldr = "…"; +const mnplus = "∓"; +const models = "⊧"; +const mopf = "𝕞"; +const mp = "∓"; +const mscr = "𝓂"; +const mstpos = "∾"; +const mu = "μ"; +const multimap = "⊸"; +const mumap = "⊸"; +const nGg = "⋙̸"; +const nGt = "≫⃒"; +const nGtv = "≫̸"; +const nLeftarrow = "⇍"; +const nLeftrightarrow = "⇎"; +const nLl = "⋘̸"; +const nLt = "≪⃒"; +const nLtv = "≪̸"; +const nRightarrow = "⇏"; +const nVDash = "⊯"; +const nVdash = "⊮"; +const nabla = "∇"; +const nacute = "ń"; +const nang = "∠⃒"; +const nap = "≉"; +const napE = "⩰̸"; +const napid = "≋̸"; +const napos = "ʼn"; +const napprox = "≉"; +const natur = "♮"; +const natural = "♮"; +const naturals = "ℕ"; +const nbs = " "; +const nbsp = " "; +const nbump = "≎̸"; +const nbumpe = "≏̸"; +const ncap = "⩃"; +const ncaron = "ň"; +const ncedil = "ņ"; +const ncong = "≇"; +const ncongdot = "⩭̸"; +const ncup = "⩂"; +const ncy = "н"; +const ndash = "–"; +const ne = "≠"; +const neArr = "⇗"; +const nearhk = "⤤"; +const nearr = "↗"; +const nearrow = "↗"; +const nedot = "≐̸"; +const nequiv = "≢"; +const nesear = "⤨"; +const nesim = "≂̸"; +const nexist = "∄"; +const nexists = "∄"; +const nfr = "𝔫"; +const ngE = "≧̸"; +const nge = "≱"; +const ngeq = "≱"; +const ngeqq = "≧̸"; +const ngeqslant = "⩾̸"; +const nges = "⩾̸"; +const ngsim = "≵"; +const ngt = "≯"; +const ngtr = "≯"; +const nhArr = "⇎"; +const nharr = "↮"; +const nhpar = "⫲"; +const ni = "∋"; +const nis = "⋼"; +const nisd = "⋺"; +const niv = "∋"; +const njcy = "њ"; +const nlArr = "⇍"; +const nlE = "≦̸"; +const nlarr = "↚"; +const nldr = "‥"; +const nle = "≰"; +const nleftarrow = "↚"; +const nleftrightarrow = "↮"; +const nleq = "≰"; +const nleqq = "≦̸"; +const nleqslant = "⩽̸"; +const nles = "⩽̸"; +const nless = "≮"; +const nlsim = "≴"; +const nlt = "≮"; +const nltri = "⋪"; +const nltrie = "⋬"; +const nmid = "∤"; +const nopf = "𝕟"; +const no = "¬"; +const not = "¬"; +const notin = "∉"; +const notinE = "⋹̸"; +const notindot = "⋵̸"; +const notinva = "∉"; +const notinvb = "⋷"; +const notinvc = "⋶"; +const notni = "∌"; +const notniva = "∌"; +const notnivb = "⋾"; +const notnivc = "⋽"; +const npar = "∦"; +const nparallel = "∦"; +const nparsl = "⫽⃥"; +const npart = "∂̸"; +const npolint = "⨔"; +const npr = "⊀"; +const nprcue = "⋠"; +const npre = "⪯̸"; +const nprec = "⊀"; +const npreceq = "⪯̸"; +const nrArr = "⇏"; +const nrarr = "↛"; +const nrarrc = "⤳̸"; +const nrarrw = "↝̸"; +const nrightarrow = "↛"; +const nrtri = "⋫"; +const nrtrie = "⋭"; +const nsc = "⊁"; +const nsccue = "⋡"; +const nsce = "⪰̸"; +const nscr = "𝓃"; +const nshortmid = "∤"; +const nshortparallel = "∦"; +const nsim = "≁"; +const nsime = "≄"; +const nsimeq = "≄"; +const nsmid = "∤"; +const nspar = "∦"; +const nsqsube = "⋢"; +const nsqsupe = "⋣"; +const nsub = "⊄"; +const nsubE = "⫅̸"; +const nsube = "⊈"; +const nsubset = "⊂⃒"; +const nsubseteq = "⊈"; +const nsubseteqq = "⫅̸"; +const nsucc = "⊁"; +const nsucceq = "⪰̸"; +const nsup = "⊅"; +const nsupE = "⫆̸"; +const nsupe = "⊉"; +const nsupset = "⊃⃒"; +const nsupseteq = "⊉"; +const nsupseteqq = "⫆̸"; +const ntgl = "≹"; +const ntild = "ñ"; +const ntilde = "ñ"; +const ntlg = "≸"; +const ntriangleleft = "⋪"; +const ntrianglelefteq = "⋬"; +const ntriangleright = "⋫"; +const ntrianglerighteq = "⋭"; +const nu = "ν"; +const num = "#"; +const numero = "№"; +const numsp = " "; +const nvDash = "⊭"; +const nvHarr = "⤄"; +const nvap = "≍⃒"; +const nvdash = "⊬"; +const nvge = "≥⃒"; +const nvgt = ">⃒"; +const nvinfin = "⧞"; +const nvlArr = "⤂"; +const nvle = "≤⃒"; +const nvlt = "<⃒"; +const nvltrie = "⊴⃒"; +const nvrArr = "⤃"; +const nvrtrie = "⊵⃒"; +const nvsim = "∼⃒"; +const nwArr = "⇖"; +const nwarhk = "⤣"; +const nwarr = "↖"; +const nwarrow = "↖"; +const nwnear = "⤧"; +const oS = "Ⓢ"; +const oacut = "ó"; +const oacute = "ó"; +const oast = "⊛"; +const ocir = "ô"; +const ocirc = "ô"; +const ocy = "о"; +const odash = "⊝"; +const odblac = "ő"; +const odiv = "⨸"; +const odot = "⊙"; +const odsold = "⦼"; +const oelig = "œ"; +const ofcir = "⦿"; +const ofr = "𝔬"; +const ogon = "˛"; +const ograv = "ò"; +const ograve = "ò"; +const ogt = "⧁"; +const ohbar = "⦵"; +const ohm = "Ω"; +const oint = "∮"; +const olarr = "↺"; +const olcir = "⦾"; +const olcross = "⦻"; +const oline = "‾"; +const olt = "⧀"; +const omacr = "ō"; +const omega = "ω"; +const omicron = "ο"; +const omid = "⦶"; +const ominus = "⊖"; +const oopf = "𝕠"; +const opar = "⦷"; +const operp = "⦹"; +const oplus = "⊕"; +const or = "∨"; +const orarr = "↻"; +const ord = "º"; +const order = "ℴ"; +const orderof = "ℴ"; +const ordf = "ª"; +const ordm = "º"; +const origof = "⊶"; +const oror = "⩖"; +const orslope = "⩗"; +const orv = "⩛"; +const oscr = "ℴ"; +const oslas = "ø"; +const oslash = "ø"; +const osol = "⊘"; +const otild = "õ"; +const otilde = "õ"; +const otimes = "⊗"; +const otimesas = "⨶"; +const oum = "ö"; +const ouml = "ö"; +const ovbar = "⌽"; +const par = "¶"; +const para = "¶"; +const parallel = "∥"; +const parsim = "⫳"; +const parsl = "⫽"; +const part = "∂"; +const pcy = "п"; +const percnt = "%"; +const period = "."; +const permil = "‰"; +const perp = "⊥"; +const pertenk = "‱"; +const pfr = "𝔭"; +const phi = "φ"; +const phiv = "ϕ"; +const phmmat = "ℳ"; +const phone = "☎"; +const pi = "π"; +const pitchfork = "⋔"; +const piv = "ϖ"; +const planck = "ℏ"; +const planckh = "ℎ"; +const plankv = "ℏ"; +const plus = "+"; +const plusacir = "⨣"; +const plusb = "⊞"; +const pluscir = "⨢"; +const plusdo = "∔"; +const plusdu = "⨥"; +const pluse = "⩲"; +const plusm = "±"; +const plusmn = "±"; +const plussim = "⨦"; +const plustwo = "⨧"; +const pm = "±"; +const pointint = "⨕"; +const popf = "𝕡"; +const poun = "£"; +const pound = "£"; +const pr = "≺"; +const prE = "⪳"; +const prap = "⪷"; +const prcue = "≼"; +const pre = "⪯"; +const prec = "≺"; +const precapprox = "⪷"; +const preccurlyeq = "≼"; +const preceq = "⪯"; +const precnapprox = "⪹"; +const precneqq = "⪵"; +const precnsim = "⋨"; +const precsim = "≾"; +const prime = "′"; +const primes = "ℙ"; +const prnE = "⪵"; +const prnap = "⪹"; +const prnsim = "⋨"; +const prod = "∏"; +const profalar = "⌮"; +const profline = "⌒"; +const profsurf = "⌓"; +const prop = "∝"; +const propto = "∝"; +const prsim = "≾"; +const prurel = "⊰"; +const pscr = "𝓅"; +const psi = "ψ"; +const puncsp = " "; +const qfr = "𝔮"; +const qint = "⨌"; +const qopf = "𝕢"; +const qprime = "⁗"; +const qscr = "𝓆"; +const quaternions = "ℍ"; +const quatint = "⨖"; +const quest = "?"; +const questeq = "≟"; +const quo = "\""; +const quot = "\""; +const rAarr = "⇛"; +const rArr = "⇒"; +const rAtail = "⤜"; +const rBarr = "⤏"; +const rHar = "⥤"; +const race = "∽̱"; +const racute = "ŕ"; +const radic = "√"; +const raemptyv = "⦳"; +const rang = "⟩"; +const rangd = "⦒"; +const range = "⦥"; +const rangle = "⟩"; +const raqu = "»"; +const raquo = "»"; +const rarr = "→"; +const rarrap = "⥵"; +const rarrb = "⇥"; +const rarrbfs = "⤠"; +const rarrc = "⤳"; +const rarrfs = "⤞"; +const rarrhk = "↪"; +const rarrlp = "↬"; +const rarrpl = "⥅"; +const rarrsim = "⥴"; +const rarrtl = "↣"; +const rarrw = "↝"; +const ratail = "⤚"; +const ratio = "∶"; +const rationals = "ℚ"; +const rbarr = "⤍"; +const rbbrk = "❳"; +const rbrace = "}"; +const rbrack = "]"; +const rbrke = "⦌"; +const rbrksld = "⦎"; +const rbrkslu = "⦐"; +const rcaron = "ř"; +const rcedil = "ŗ"; +const rceil = "⌉"; +const rcub = "}"; +const rcy = "р"; +const rdca = "⤷"; +const rdldhar = "⥩"; +const rdquo = "”"; +const rdquor = "”"; +const rdsh = "↳"; +const real = "ℜ"; +const realine = "ℛ"; +const realpart = "ℜ"; +const reals = "ℝ"; +const rect = "▭"; +const re$4 = "®"; +const reg = "®"; +const rfisht = "⥽"; +const rfloor = "⌋"; +const rfr = "𝔯"; +const rhard = "⇁"; +const rharu = "⇀"; +const rharul = "⥬"; +const rho = "ρ"; +const rhov = "ϱ"; +const rightarrow = "→"; +const rightarrowtail = "↣"; +const rightharpoondown = "⇁"; +const rightharpoonup = "⇀"; +const rightleftarrows = "⇄"; +const rightleftharpoons = "⇌"; +const rightrightarrows = "⇉"; +const rightsquigarrow = "↝"; +const rightthreetimes = "⋌"; +const ring = "˚"; +const risingdotseq = "≓"; +const rlarr = "⇄"; +const rlhar = "⇌"; +const rlm = "‏"; +const rmoust = "⎱"; +const rmoustache = "⎱"; +const rnmid = "⫮"; +const roang = "⟭"; +const roarr = "⇾"; +const robrk = "⟧"; +const ropar = "⦆"; +const ropf = "𝕣"; +const roplus = "⨮"; +const rotimes = "⨵"; +const rpar = ")"; +const rpargt = "⦔"; +const rppolint = "⨒"; +const rrarr = "⇉"; +const rsaquo = "›"; +const rscr = "𝓇"; +const rsh = "↱"; +const rsqb = "]"; +const rsquo = "’"; +const rsquor = "’"; +const rthree = "⋌"; +const rtimes = "⋊"; +const rtri = "▹"; +const rtrie = "⊵"; +const rtrif = "▸"; +const rtriltri = "⧎"; +const ruluhar = "⥨"; +const rx = "℞"; +const sacute = "ś"; +const sbquo = "‚"; +const sc = "≻"; +const scE = "⪴"; +const scap = "⪸"; +const scaron = "š"; +const sccue = "≽"; +const sce = "⪰"; +const scedil = "ş"; +const scirc = "ŝ"; +const scnE = "⪶"; +const scnap = "⪺"; +const scnsim = "⋩"; +const scpolint = "⨓"; +const scsim = "≿"; +const scy = "с"; +const sdot = "⋅"; +const sdotb = "⊡"; +const sdote = "⩦"; +const seArr = "⇘"; +const searhk = "⤥"; +const searr = "↘"; +const searrow = "↘"; +const sec = "§"; +const sect = "§"; +const semi = ";"; +const seswar = "⤩"; +const setminus = "∖"; +const setmn = "∖"; +const sext = "✶"; +const sfr = "𝔰"; +const sfrown = "⌢"; +const sharp = "♯"; +const shchcy = "щ"; +const shcy = "ш"; +const shortmid = "∣"; +const shortparallel = "∥"; +const sh = "­"; +const shy = "­"; +const sigma = "σ"; +const sigmaf = "ς"; +const sigmav = "ς"; +const sim = "∼"; +const simdot = "⩪"; +const sime = "≃"; +const simeq = "≃"; +const simg = "⪞"; +const simgE = "⪠"; +const siml = "⪝"; +const simlE = "⪟"; +const simne = "≆"; +const simplus = "⨤"; +const simrarr = "⥲"; +const slarr = "←"; +const smallsetminus = "∖"; +const smashp = "⨳"; +const smeparsl = "⧤"; +const smid = "∣"; +const smile = "⌣"; +const smt = "⪪"; +const smte = "⪬"; +const smtes = "⪬︀"; +const softcy = "ь"; +const sol = "/"; +const solb = "⧄"; +const solbar = "⌿"; +const sopf = "𝕤"; +const spades = "♠"; +const spadesuit = "♠"; +const spar = "∥"; +const sqcap = "⊓"; +const sqcaps = "⊓︀"; +const sqcup = "⊔"; +const sqcups = "⊔︀"; +const sqsub = "⊏"; +const sqsube = "⊑"; +const sqsubset = "⊏"; +const sqsubseteq = "⊑"; +const sqsup = "⊐"; +const sqsupe = "⊒"; +const sqsupset = "⊐"; +const sqsupseteq = "⊒"; +const squ = "□"; +const square = "□"; +const squarf = "▪"; +const squf = "▪"; +const srarr = "→"; +const sscr = "𝓈"; +const ssetmn = "∖"; +const ssmile = "⌣"; +const sstarf = "⋆"; +const star = "☆"; +const starf = "★"; +const straightepsilon = "ϵ"; +const straightphi = "ϕ"; +const strns = "¯"; +const sub = "⊂"; +const subE = "⫅"; +const subdot = "⪽"; +const sube = "⊆"; +const subedot = "⫃"; +const submult = "⫁"; +const subnE = "⫋"; +const subne = "⊊"; +const subplus = "⪿"; +const subrarr = "⥹"; +const subset = "⊂"; +const subseteq = "⊆"; +const subseteqq = "⫅"; +const subsetneq = "⊊"; +const subsetneqq = "⫋"; +const subsim = "⫇"; +const subsub = "⫕"; +const subsup = "⫓"; +const succ = "≻"; +const succapprox = "⪸"; +const succcurlyeq = "≽"; +const succeq = "⪰"; +const succnapprox = "⪺"; +const succneqq = "⪶"; +const succnsim = "⋩"; +const succsim = "≿"; +const sum = "∑"; +const sung = "♪"; +const sup = "⊃"; +const sup1 = "¹"; +const sup2 = "²"; +const sup3 = "³"; +const supE = "⫆"; +const supdot = "⪾"; +const supdsub = "⫘"; +const supe = "⊇"; +const supedot = "⫄"; +const suphsol = "⟉"; +const suphsub = "⫗"; +const suplarr = "⥻"; +const supmult = "⫂"; +const supnE = "⫌"; +const supne = "⊋"; +const supplus = "⫀"; +const supset = "⊃"; +const supseteq = "⊇"; +const supseteqq = "⫆"; +const supsetneq = "⊋"; +const supsetneqq = "⫌"; +const supsim = "⫈"; +const supsub = "⫔"; +const supsup = "⫖"; +const swArr = "⇙"; +const swarhk = "⤦"; +const swarr = "↙"; +const swarrow = "↙"; +const swnwar = "⤪"; +const szli = "ß"; +const szlig = "ß"; +const target = "⌖"; +const tau = "τ"; +const tbrk = "⎴"; +const tcaron = "ť"; +const tcedil = "ţ"; +const tcy = "т"; +const tdot = "⃛"; +const telrec = "⌕"; +const tfr = "𝔱"; +const there4 = "∴"; +const therefore = "∴"; +const theta = "θ"; +const thetasym = "ϑ"; +const thetav = "ϑ"; +const thickapprox = "≈"; +const thicksim = "∼"; +const thinsp = " "; +const thkap = "≈"; +const thksim = "∼"; +const thor = "þ"; +const thorn = "þ"; +const tilde = "˜"; +const time = "×"; +const times = "×"; +const timesb = "⊠"; +const timesbar = "⨱"; +const timesd = "⨰"; +const tint = "∭"; +const toea = "⤨"; +const top = "⊤"; +const topbot = "⌶"; +const topcir = "⫱"; +const topf = "𝕥"; +const topfork = "⫚"; +const tosa = "⤩"; +const tprime = "‴"; +const trade = "™"; +const triangle = "▵"; +const triangledown = "▿"; +const triangleleft = "◃"; +const trianglelefteq = "⊴"; +const triangleq = "≜"; +const triangleright = "▹"; +const trianglerighteq = "⊵"; +const tridot = "◬"; +const trie = "≜"; +const triminus = "⨺"; +const triplus = "⨹"; +const trisb = "⧍"; +const tritime = "⨻"; +const trpezium = "⏢"; +const tscr = "𝓉"; +const tscy = "ц"; +const tshcy = "ћ"; +const tstrok = "ŧ"; +const twixt = "≬"; +const twoheadleftarrow = "↞"; +const twoheadrightarrow = "↠"; +const uArr = "⇑"; +const uHar = "⥣"; +const uacut = "ú"; +const uacute = "ú"; +const uarr = "↑"; +const ubrcy = "ў"; +const ubreve = "ŭ"; +const ucir = "û"; +const ucirc = "û"; +const ucy = "у"; +const udarr = "⇅"; +const udblac = "ű"; +const udhar = "⥮"; +const ufisht = "⥾"; +const ufr = "𝔲"; +const ugrav = "ù"; +const ugrave = "ù"; +const uharl = "↿"; +const uharr = "↾"; +const uhblk = "▀"; +const ulcorn = "⌜"; +const ulcorner = "⌜"; +const ulcrop = "⌏"; +const ultri = "◸"; +const umacr = "ū"; +const um = "¨"; +const uml = "¨"; +const uogon = "ų"; +const uopf = "𝕦"; +const uparrow = "↑"; +const updownarrow = "↕"; +const upharpoonleft = "↿"; +const upharpoonright = "↾"; +const uplus = "⊎"; +const upsi = "υ"; +const upsih = "ϒ"; +const upsilon = "υ"; +const upuparrows = "⇈"; +const urcorn = "⌝"; +const urcorner = "⌝"; +const urcrop = "⌎"; +const uring = "ů"; +const urtri = "◹"; +const uscr = "𝓊"; +const utdot = "⋰"; +const utilde = "ũ"; +const utri = "▵"; +const utrif = "▴"; +const uuarr = "⇈"; +const uum = "ü"; +const uuml = "ü"; +const uwangle = "⦧"; +const vArr = "⇕"; +const vBar = "⫨"; +const vBarv = "⫩"; +const vDash = "⊨"; +const vangrt = "⦜"; +const varepsilon = "ϵ"; +const varkappa = "ϰ"; +const varnothing = "∅"; +const varphi = "ϕ"; +const varpi = "ϖ"; +const varpropto = "∝"; +const varr = "↕"; +const varrho = "ϱ"; +const varsigma = "ς"; +const varsubsetneq = "⊊︀"; +const varsubsetneqq = "⫋︀"; +const varsupsetneq = "⊋︀"; +const varsupsetneqq = "⫌︀"; +const vartheta = "ϑ"; +const vartriangleleft = "⊲"; +const vartriangleright = "⊳"; +const vcy = "в"; +const vdash = "⊢"; +const vee = "∨"; +const veebar = "⊻"; +const veeeq = "≚"; +const vellip = "⋮"; +const verbar = "|"; +const vert = "|"; +const vfr = "𝔳"; +const vltri = "⊲"; +const vnsub = "⊂⃒"; +const vnsup = "⊃⃒"; +const vopf = "𝕧"; +const vprop = "∝"; +const vrtri = "⊳"; +const vscr = "𝓋"; +const vsubnE = "⫋︀"; +const vsubne = "⊊︀"; +const vsupnE = "⫌︀"; +const vsupne = "⊋︀"; +const vzigzag = "⦚"; +const wcirc = "ŵ"; +const wedbar = "⩟"; +const wedge = "∧"; +const wedgeq = "≙"; +const weierp = "℘"; +const wfr = "𝔴"; +const wopf = "𝕨"; +const wp = "℘"; +const wr = "≀"; +const wreath = "≀"; +const wscr = "𝓌"; +const xcap = "⋂"; +const xcirc = "◯"; +const xcup = "⋃"; +const xdtri = "▽"; +const xfr = "𝔵"; +const xhArr = "⟺"; +const xharr = "⟷"; +const xi = "ξ"; +const xlArr = "⟸"; +const xlarr = "⟵"; +const xmap = "⟼"; +const xnis = "⋻"; +const xodot = "⨀"; +const xopf = "𝕩"; +const xoplus = "⨁"; +const xotime = "⨂"; +const xrArr = "⟹"; +const xrarr = "⟶"; +const xscr = "𝓍"; +const xsqcup = "⨆"; +const xuplus = "⨄"; +const xutri = "△"; +const xvee = "⋁"; +const xwedge = "⋀"; +const yacut = "ý"; +const yacute = "ý"; +const yacy = "я"; +const ycirc = "ŷ"; +const ycy = "ы"; +const ye = "¥"; +const yen = "¥"; +const yfr = "𝔶"; +const yicy = "ї"; +const yopf = "𝕪"; +const yscr = "𝓎"; +const yucy = "ю"; +const yum = "ÿ"; +const yuml = "ÿ"; +const zacute = "ź"; +const zcaron = "ž"; +const zcy = "з"; +const zdot = "ż"; +const zeetrf = "ℨ"; +const zeta = "ζ"; +const zfr = "𝔷"; +const zhcy = "ж"; +const zigrarr = "⇝"; +const zopf = "𝕫"; +const zscr = "𝓏"; +const zwj = "‍"; +const zwnj = "‌"; +var require$$0 = { + AEli: AEli, + AElig: AElig, + AM: AM, + AMP: AMP, + Aacut: Aacut, + Aacute: Aacute, + Abreve: Abreve, + Acir: Acir, + Acirc: Acirc, + Acy: Acy, + Afr: Afr, + Agrav: Agrav, + Agrave: Agrave, + Alpha: Alpha, + Amacr: Amacr, + And: And, + Aogon: Aogon, + Aopf: Aopf, + ApplyFunction: ApplyFunction, + Arin: Arin, + Aring: Aring, + Ascr: Ascr, + Assign: Assign, + Atild: Atild, + Atilde: Atilde, + Aum: Aum, + Auml: Auml, + Backslash: Backslash, + Barv: Barv, + Barwed: Barwed, + Bcy: Bcy, + Because: Because, + Bernoullis: Bernoullis, + Beta: Beta, + Bfr: Bfr, + Bopf: Bopf, + Breve: Breve, + Bscr: Bscr, + Bumpeq: Bumpeq, + CHcy: CHcy, + COP: COP, + COPY: COPY, + Cacute: Cacute, + Cap: Cap, + CapitalDifferentialD: CapitalDifferentialD, + Cayleys: Cayleys, + Ccaron: Ccaron, + Ccedi: Ccedi, + Ccedil: Ccedil, + Ccirc: Ccirc, + Cconint: Cconint, + Cdot: Cdot, + Cedilla: Cedilla, + CenterDot: CenterDot, + Cfr: Cfr, + Chi: Chi, + CircleDot: CircleDot, + CircleMinus: CircleMinus, + CirclePlus: CirclePlus, + CircleTimes: CircleTimes, + ClockwiseContourIntegral: ClockwiseContourIntegral, + CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, + CloseCurlyQuote: CloseCurlyQuote, + Colon: Colon, + Colone: Colone, + Congruent: Congruent, + Conint: Conint, + ContourIntegral: ContourIntegral, + Copf: Copf, + Coproduct: Coproduct, + CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, + Cross: Cross, + Cscr: Cscr, + Cup: Cup, + CupCap: CupCap, + DD: DD, + DDotrahd: DDotrahd, + DJcy: DJcy, + DScy: DScy, + DZcy: DZcy, + Dagger: Dagger, + Darr: Darr, + Dashv: Dashv, + Dcaron: Dcaron, + Dcy: Dcy, + Del: Del, + Delta: Delta, + Dfr: Dfr, + DiacriticalAcute: DiacriticalAcute, + DiacriticalDot: DiacriticalDot, + DiacriticalDoubleAcute: DiacriticalDoubleAcute, + DiacriticalGrave: DiacriticalGrave, + DiacriticalTilde: DiacriticalTilde, + Diamond: Diamond, + DifferentialD: DifferentialD, + Dopf: Dopf, + Dot: Dot, + DotDot: DotDot, + DotEqual: DotEqual, + DoubleContourIntegral: DoubleContourIntegral, + DoubleDot: DoubleDot, + DoubleDownArrow: DoubleDownArrow, + DoubleLeftArrow: DoubleLeftArrow, + DoubleLeftRightArrow: DoubleLeftRightArrow, + DoubleLeftTee: DoubleLeftTee, + DoubleLongLeftArrow: DoubleLongLeftArrow, + DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, + DoubleLongRightArrow: DoubleLongRightArrow, + DoubleRightArrow: DoubleRightArrow, + DoubleRightTee: DoubleRightTee, + DoubleUpArrow: DoubleUpArrow, + DoubleUpDownArrow: DoubleUpDownArrow, + DoubleVerticalBar: DoubleVerticalBar, + DownArrow: DownArrow, + DownArrowBar: DownArrowBar, + DownArrowUpArrow: DownArrowUpArrow, + DownBreve: DownBreve, + DownLeftRightVector: DownLeftRightVector, + DownLeftTeeVector: DownLeftTeeVector, + DownLeftVector: DownLeftVector, + DownLeftVectorBar: DownLeftVectorBar, + DownRightTeeVector: DownRightTeeVector, + DownRightVector: DownRightVector, + DownRightVectorBar: DownRightVectorBar, + DownTee: DownTee, + DownTeeArrow: DownTeeArrow, + Downarrow: Downarrow, + Dscr: Dscr, + Dstrok: Dstrok, + ENG: ENG, + ET: ET, + ETH: ETH, + Eacut: Eacut, + Eacute: Eacute, + Ecaron: Ecaron, + Ecir: Ecir, + Ecirc: Ecirc, + Ecy: Ecy, + Edot: Edot, + Efr: Efr, + Egrav: Egrav, + Egrave: Egrave, + Element: Element, + Emacr: Emacr, + EmptySmallSquare: EmptySmallSquare, + EmptyVerySmallSquare: EmptyVerySmallSquare, + Eogon: Eogon, + Eopf: Eopf, + Epsilon: Epsilon, + Equal: Equal, + EqualTilde: EqualTilde, + Equilibrium: Equilibrium, + Escr: Escr, + Esim: Esim, + Eta: Eta, + Eum: Eum, + Euml: Euml, + Exists: Exists, + ExponentialE: ExponentialE, + Fcy: Fcy, + Ffr: Ffr, + FilledSmallSquare: FilledSmallSquare, + FilledVerySmallSquare: FilledVerySmallSquare, + Fopf: Fopf, + ForAll: ForAll, + Fouriertrf: Fouriertrf, + Fscr: Fscr, + GJcy: GJcy, + G: G, + GT: GT, + Gamma: Gamma, + Gammad: Gammad, + Gbreve: Gbreve, + Gcedil: Gcedil, + Gcirc: Gcirc, + Gcy: Gcy, + Gdot: Gdot, + Gfr: Gfr, + Gg: Gg, + Gopf: Gopf, + GreaterEqual: GreaterEqual, + GreaterEqualLess: GreaterEqualLess, + GreaterFullEqual: GreaterFullEqual, + GreaterGreater: GreaterGreater, + GreaterLess: GreaterLess, + GreaterSlantEqual: GreaterSlantEqual, + GreaterTilde: GreaterTilde, + Gscr: Gscr, + Gt: Gt, + HARDcy: HARDcy, + Hacek: Hacek, + Hat: Hat, + Hcirc: Hcirc, + Hfr: Hfr, + HilbertSpace: HilbertSpace, + Hopf: Hopf, + HorizontalLine: HorizontalLine, + Hscr: Hscr, + Hstrok: Hstrok, + HumpDownHump: HumpDownHump, + HumpEqual: HumpEqual, + IEcy: IEcy, + IJlig: IJlig, + IOcy: IOcy, + Iacut: Iacut, + Iacute: Iacute, + Icir: Icir, + Icirc: Icirc, + Icy: Icy, + Idot: Idot, + Ifr: Ifr, + Igrav: Igrav, + Igrave: Igrave, + Im: Im, + Imacr: Imacr, + ImaginaryI: ImaginaryI, + Implies: Implies, + Int: Int, + Integral: Integral, + Intersection: Intersection, + InvisibleComma: InvisibleComma, + InvisibleTimes: InvisibleTimes, + Iogon: Iogon, + Iopf: Iopf, + Iota: Iota, + Iscr: Iscr, + Itilde: Itilde, + Iukcy: Iukcy, + Ium: Ium, + Iuml: Iuml, + Jcirc: Jcirc, + Jcy: Jcy, + Jfr: Jfr, + Jopf: Jopf, + Jscr: Jscr, + Jsercy: Jsercy, + Jukcy: Jukcy, + KHcy: KHcy, + KJcy: KJcy, + Kappa: Kappa, + Kcedil: Kcedil, + Kcy: Kcy, + Kfr: Kfr, + Kopf: Kopf, + Kscr: Kscr, + LJcy: LJcy, + L: L, + LT: LT, + Lacute: Lacute, + Lambda: Lambda, + Lang: Lang, + Laplacetrf: Laplacetrf, + Larr: Larr, + Lcaron: Lcaron, + Lcedil: Lcedil, + Lcy: Lcy, + LeftAngleBracket: LeftAngleBracket, + LeftArrow: LeftArrow, + LeftArrowBar: LeftArrowBar, + LeftArrowRightArrow: LeftArrowRightArrow, + LeftCeiling: LeftCeiling, + LeftDoubleBracket: LeftDoubleBracket, + LeftDownTeeVector: LeftDownTeeVector, + LeftDownVector: LeftDownVector, + LeftDownVectorBar: LeftDownVectorBar, + LeftFloor: LeftFloor, + LeftRightArrow: LeftRightArrow, + LeftRightVector: LeftRightVector, + LeftTee: LeftTee, + LeftTeeArrow: LeftTeeArrow, + LeftTeeVector: LeftTeeVector, + LeftTriangle: LeftTriangle, + LeftTriangleBar: LeftTriangleBar, + LeftTriangleEqual: LeftTriangleEqual, + LeftUpDownVector: LeftUpDownVector, + LeftUpTeeVector: LeftUpTeeVector, + LeftUpVector: LeftUpVector, + LeftUpVectorBar: LeftUpVectorBar, + LeftVector: LeftVector, + LeftVectorBar: LeftVectorBar, + Leftarrow: Leftarrow, + Leftrightarrow: Leftrightarrow, + LessEqualGreater: LessEqualGreater, + LessFullEqual: LessFullEqual, + LessGreater: LessGreater, + LessLess: LessLess, + LessSlantEqual: LessSlantEqual, + LessTilde: LessTilde, + Lfr: Lfr, + Ll: Ll, + Lleftarrow: Lleftarrow, + Lmidot: Lmidot, + LongLeftArrow: LongLeftArrow, + LongLeftRightArrow: LongLeftRightArrow, + LongRightArrow: LongRightArrow, + Longleftarrow: Longleftarrow, + Longleftrightarrow: Longleftrightarrow, + Longrightarrow: Longrightarrow, + Lopf: Lopf, + LowerLeftArrow: LowerLeftArrow, + LowerRightArrow: LowerRightArrow, + Lscr: Lscr, + Lsh: Lsh, + Lstrok: Lstrok, + Lt: Lt, + "Map": "⤅", + Mcy: Mcy, + MediumSpace: MediumSpace, + Mellintrf: Mellintrf, + Mfr: Mfr, + MinusPlus: MinusPlus, + Mopf: Mopf, + Mscr: Mscr, + Mu: Mu, + NJcy: NJcy, + Nacute: Nacute, + Ncaron: Ncaron, + Ncedil: Ncedil, + Ncy: Ncy, + NegativeMediumSpace: NegativeMediumSpace, + NegativeThickSpace: NegativeThickSpace, + NegativeThinSpace: NegativeThinSpace, + NegativeVeryThinSpace: NegativeVeryThinSpace, + NestedGreaterGreater: NestedGreaterGreater, + NestedLessLess: NestedLessLess, + NewLine: NewLine, + Nfr: Nfr, + NoBreak: NoBreak, + NonBreakingSpace: NonBreakingSpace, + Nopf: Nopf, + Not: Not, + NotCongruent: NotCongruent, + NotCupCap: NotCupCap, + NotDoubleVerticalBar: NotDoubleVerticalBar, + NotElement: NotElement, + NotEqual: NotEqual, + NotEqualTilde: NotEqualTilde, + NotExists: NotExists, + NotGreater: NotGreater, + NotGreaterEqual: NotGreaterEqual, + NotGreaterFullEqual: NotGreaterFullEqual, + NotGreaterGreater: NotGreaterGreater, + NotGreaterLess: NotGreaterLess, + NotGreaterSlantEqual: NotGreaterSlantEqual, + NotGreaterTilde: NotGreaterTilde, + NotHumpDownHump: NotHumpDownHump, + NotHumpEqual: NotHumpEqual, + NotLeftTriangle: NotLeftTriangle, + NotLeftTriangleBar: NotLeftTriangleBar, + NotLeftTriangleEqual: NotLeftTriangleEqual, + NotLess: NotLess, + NotLessEqual: NotLessEqual, + NotLessGreater: NotLessGreater, + NotLessLess: NotLessLess, + NotLessSlantEqual: NotLessSlantEqual, + NotLessTilde: NotLessTilde, + NotNestedGreaterGreater: NotNestedGreaterGreater, + NotNestedLessLess: NotNestedLessLess, + NotPrecedes: NotPrecedes, + NotPrecedesEqual: NotPrecedesEqual, + NotPrecedesSlantEqual: NotPrecedesSlantEqual, + NotReverseElement: NotReverseElement, + NotRightTriangle: NotRightTriangle, + NotRightTriangleBar: NotRightTriangleBar, + NotRightTriangleEqual: NotRightTriangleEqual, + NotSquareSubset: NotSquareSubset, + NotSquareSubsetEqual: NotSquareSubsetEqual, + NotSquareSuperset: NotSquareSuperset, + NotSquareSupersetEqual: NotSquareSupersetEqual, + NotSubset: NotSubset, + NotSubsetEqual: NotSubsetEqual, + NotSucceeds: NotSucceeds, + NotSucceedsEqual: NotSucceedsEqual, + NotSucceedsSlantEqual: NotSucceedsSlantEqual, + NotSucceedsTilde: NotSucceedsTilde, + NotSuperset: NotSuperset, + NotSupersetEqual: NotSupersetEqual, + NotTilde: NotTilde, + NotTildeEqual: NotTildeEqual, + NotTildeFullEqual: NotTildeFullEqual, + NotTildeTilde: NotTildeTilde, + NotVerticalBar: NotVerticalBar, + Nscr: Nscr, + Ntild: Ntild, + Ntilde: Ntilde, + Nu: Nu, + OElig: OElig, + Oacut: Oacut, + Oacute: Oacute, + Ocir: Ocir, + Ocirc: Ocirc, + Ocy: Ocy, + Odblac: Odblac, + Ofr: Ofr, + Ograv: Ograv, + Ograve: Ograve, + Omacr: Omacr, + Omega: Omega, + Omicron: Omicron, + Oopf: Oopf, + OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, + OpenCurlyQuote: OpenCurlyQuote, + Or: Or, + Oscr: Oscr, + Oslas: Oslas, + Oslash: Oslash, + Otild: Otild, + Otilde: Otilde, + Otimes: Otimes, + Oum: Oum, + Ouml: Ouml, + OverBar: OverBar, + OverBrace: OverBrace, + OverBracket: OverBracket, + OverParenthesis: OverParenthesis, + PartialD: PartialD, + Pcy: Pcy, + Pfr: Pfr, + Phi: Phi, + Pi: Pi, + PlusMinus: PlusMinus, + Poincareplane: Poincareplane, + Popf: Popf, + Pr: Pr, + Precedes: Precedes, + PrecedesEqual: PrecedesEqual, + PrecedesSlantEqual: PrecedesSlantEqual, + PrecedesTilde: PrecedesTilde, + Prime: Prime, + Product: Product, + Proportion: Proportion, + Proportional: Proportional, + Pscr: Pscr, + Psi: Psi, + QUO: QUO, + QUOT: QUOT, + Qfr: Qfr, + Qopf: Qopf, + Qscr: Qscr, + RBarr: RBarr, + RE: RE, + REG: REG, + Racute: Racute, + Rang: Rang, + Rarr: Rarr, + Rarrtl: Rarrtl, + Rcaron: Rcaron, + Rcedil: Rcedil, + Rcy: Rcy, + Re: Re, + ReverseElement: ReverseElement, + ReverseEquilibrium: ReverseEquilibrium, + ReverseUpEquilibrium: ReverseUpEquilibrium, + Rfr: Rfr, + Rho: Rho, + RightAngleBracket: RightAngleBracket, + RightArrow: RightArrow, + RightArrowBar: RightArrowBar, + RightArrowLeftArrow: RightArrowLeftArrow, + RightCeiling: RightCeiling, + RightDoubleBracket: RightDoubleBracket, + RightDownTeeVector: RightDownTeeVector, + RightDownVector: RightDownVector, + RightDownVectorBar: RightDownVectorBar, + RightFloor: RightFloor, + RightTee: RightTee, + RightTeeArrow: RightTeeArrow, + RightTeeVector: RightTeeVector, + RightTriangle: RightTriangle, + RightTriangleBar: RightTriangleBar, + RightTriangleEqual: RightTriangleEqual, + RightUpDownVector: RightUpDownVector, + RightUpTeeVector: RightUpTeeVector, + RightUpVector: RightUpVector, + RightUpVectorBar: RightUpVectorBar, + RightVector: RightVector, + RightVectorBar: RightVectorBar, + Rightarrow: Rightarrow, + Ropf: Ropf, + RoundImplies: RoundImplies, + Rrightarrow: Rrightarrow, + Rscr: Rscr, + Rsh: Rsh, + RuleDelayed: RuleDelayed, + SHCHcy: SHCHcy, + SHcy: SHcy, + SOFTcy: SOFTcy, + Sacute: Sacute, + Sc: Sc, + Scaron: Scaron, + Scedil: Scedil, + Scirc: Scirc, + Scy: Scy, + Sfr: Sfr, + ShortDownArrow: ShortDownArrow, + ShortLeftArrow: ShortLeftArrow, + ShortRightArrow: ShortRightArrow, + ShortUpArrow: ShortUpArrow, + Sigma: Sigma, + SmallCircle: SmallCircle, + Sopf: Sopf, + Sqrt: Sqrt, + Square: Square, + SquareIntersection: SquareIntersection, + SquareSubset: SquareSubset, + SquareSubsetEqual: SquareSubsetEqual, + SquareSuperset: SquareSuperset, + SquareSupersetEqual: SquareSupersetEqual, + SquareUnion: SquareUnion, + Sscr: Sscr, + Star: Star, + Sub: Sub, + Subset: Subset, + SubsetEqual: SubsetEqual, + Succeeds: Succeeds, + SucceedsEqual: SucceedsEqual, + SucceedsSlantEqual: SucceedsSlantEqual, + SucceedsTilde: SucceedsTilde, + SuchThat: SuchThat, + Sum: Sum, + Sup: Sup, + Superset: Superset, + SupersetEqual: SupersetEqual, + Supset: Supset, + THOR: THOR, + THORN: THORN, + TRADE: TRADE, + TSHcy: TSHcy, + TScy: TScy, + Tab: Tab, + Tau: Tau, + Tcaron: Tcaron, + Tcedil: Tcedil, + Tcy: Tcy, + Tfr: Tfr, + Therefore: Therefore, + Theta: Theta, + ThickSpace: ThickSpace, + ThinSpace: ThinSpace, + Tilde: Tilde, + TildeEqual: TildeEqual, + TildeFullEqual: TildeFullEqual, + TildeTilde: TildeTilde, + Topf: Topf, + TripleDot: TripleDot, + Tscr: Tscr, + Tstrok: Tstrok, + Uacut: Uacut, + Uacute: Uacute, + Uarr: Uarr, + Uarrocir: Uarrocir, + Ubrcy: Ubrcy, + Ubreve: Ubreve, + Ucir: Ucir, + Ucirc: Ucirc, + Ucy: Ucy, + Udblac: Udblac, + Ufr: Ufr, + Ugrav: Ugrav, + Ugrave: Ugrave, + Umacr: Umacr, + UnderBar: UnderBar, + UnderBrace: UnderBrace, + UnderBracket: UnderBracket, + UnderParenthesis: UnderParenthesis, + Union: Union, + UnionPlus: UnionPlus, + Uogon: Uogon, + Uopf: Uopf, + UpArrow: UpArrow, + UpArrowBar: UpArrowBar, + UpArrowDownArrow: UpArrowDownArrow, + UpDownArrow: UpDownArrow, + UpEquilibrium: UpEquilibrium, + UpTee: UpTee, + UpTeeArrow: UpTeeArrow, + Uparrow: Uparrow, + Updownarrow: Updownarrow, + UpperLeftArrow: UpperLeftArrow, + UpperRightArrow: UpperRightArrow, + Upsi: Upsi, + Upsilon: Upsilon, + Uring: Uring, + Uscr: Uscr, + Utilde: Utilde, + Uum: Uum, + Uuml: Uuml, + VDash: VDash, + Vbar: Vbar, + Vcy: Vcy, + Vdash: Vdash, + Vdashl: Vdashl, + Vee: Vee, + Verbar: Verbar, + Vert: Vert, + VerticalBar: VerticalBar, + VerticalLine: VerticalLine, + VerticalSeparator: VerticalSeparator, + VerticalTilde: VerticalTilde, + VeryThinSpace: VeryThinSpace, + Vfr: Vfr, + Vopf: Vopf, + Vscr: Vscr, + Vvdash: Vvdash, + Wcirc: Wcirc, + Wedge: Wedge, + Wfr: Wfr, + Wopf: Wopf, + Wscr: Wscr, + Xfr: Xfr, + Xi: Xi, + Xopf: Xopf, + Xscr: Xscr, + YAcy: YAcy, + YIcy: YIcy, + YUcy: YUcy, + Yacut: Yacut, + Yacute: Yacute, + Ycirc: Ycirc, + Ycy: Ycy, + Yfr: Yfr, + Yopf: Yopf, + Yscr: Yscr, + Yuml: Yuml, + ZHcy: ZHcy, + Zacute: Zacute, + Zcaron: Zcaron, + Zcy: Zcy, + Zdot: Zdot, + ZeroWidthSpace: ZeroWidthSpace, + Zeta: Zeta, + Zfr: Zfr, + Zopf: Zopf, + Zscr: Zscr, + aacut: aacut, + aacute: aacute, + abreve: abreve, + ac: ac, + acE: acE, + acd: acd, + acir: acir, + acirc: acirc, + acut: acut, + acute: acute, + acy: acy, + aeli: aeli, + aelig: aelig, + af: af, + afr: afr, + agrav: agrav, + agrave: agrave, + alefsym: alefsym, + aleph: aleph, + alpha: alpha, + amacr: amacr, + amalg: amalg, + am: am, + amp: amp, + and: and, + andand: andand, + andd: andd, + andslope: andslope, + andv: andv, + ang: ang, + ange: ange, + angle: angle, + angmsd: angmsd, + angmsdaa: angmsdaa, + angmsdab: angmsdab, + angmsdac: angmsdac, + angmsdad: angmsdad, + angmsdae: angmsdae, + angmsdaf: angmsdaf, + angmsdag: angmsdag, + angmsdah: angmsdah, + angrt: angrt, + angrtvb: angrtvb, + angrtvbd: angrtvbd, + angsph: angsph, + angst: angst, + angzarr: angzarr, + aogon: aogon, + aopf: aopf, + ap: ap, + apE: apE, + apacir: apacir, + ape: ape, + apid: apid, + apos: apos, + approx: approx, + approxeq: approxeq, + arin: arin, + aring: aring, + ascr: ascr, + ast: ast, + asymp: asymp, + asympeq: asympeq, + atild: atild, + atilde: atilde, + aum: aum, + auml: auml, + awconint: awconint, + awint: awint, + bNot: bNot, + backcong: backcong, + backepsilon: backepsilon, + backprime: backprime, + backsim: backsim, + backsimeq: backsimeq, + barvee: barvee, + barwed: barwed, + barwedge: barwedge, + bbrk: bbrk, + bbrktbrk: bbrktbrk, + bcong: bcong, + bcy: bcy, + bdquo: bdquo, + becaus: becaus, + because: because, + bemptyv: bemptyv, + bepsi: bepsi, + bernou: bernou, + beta: beta, + beth: beth, + between: between, + bfr: bfr, + bigcap: bigcap, + bigcirc: bigcirc, + bigcup: bigcup, + bigodot: bigodot, + bigoplus: bigoplus, + bigotimes: bigotimes, + bigsqcup: bigsqcup, + bigstar: bigstar, + bigtriangledown: bigtriangledown, + bigtriangleup: bigtriangleup, + biguplus: biguplus, + bigvee: bigvee, + bigwedge: bigwedge, + bkarow: bkarow, + blacklozenge: blacklozenge, + blacksquare: blacksquare, + blacktriangle: blacktriangle, + blacktriangledown: blacktriangledown, + blacktriangleleft: blacktriangleleft, + blacktriangleright: blacktriangleright, + blank: blank, + blk12: blk12, + blk14: blk14, + blk34: blk34, + block: block, + bne: bne, + bnequiv: bnequiv, + bnot: bnot, + bopf: bopf, + bot: bot, + bottom: bottom, + bowtie: bowtie, + boxDL: boxDL, + boxDR: boxDR, + boxDl: boxDl, + boxDr: boxDr, + boxH: boxH, + boxHD: boxHD, + boxHU: boxHU, + boxHd: boxHd, + boxHu: boxHu, + boxUL: boxUL, + boxUR: boxUR, + boxUl: boxUl, + boxUr: boxUr, + boxV: boxV, + boxVH: boxVH, + boxVL: boxVL, + boxVR: boxVR, + boxVh: boxVh, + boxVl: boxVl, + boxVr: boxVr, + boxbox: boxbox, + boxdL: boxdL, + boxdR: boxdR, + boxdl: boxdl, + boxdr: boxdr, + boxh: boxh, + boxhD: boxhD, + boxhU: boxhU, + boxhd: boxhd, + boxhu: boxhu, + boxminus: boxminus, + boxplus: boxplus, + boxtimes: boxtimes, + boxuL: boxuL, + boxuR: boxuR, + boxul: boxul, + boxur: boxur, + boxv: boxv, + boxvH: boxvH, + boxvL: boxvL, + boxvR: boxvR, + boxvh: boxvh, + boxvl: boxvl, + boxvr: boxvr, + bprime: bprime, + breve: breve, + brvba: brvba, + brvbar: brvbar, + bscr: bscr, + bsemi: bsemi, + bsim: bsim, + bsime: bsime, + bsol: bsol, + bsolb: bsolb, + bsolhsub: bsolhsub, + bull: bull, + bullet: bullet, + bump: bump, + bumpE: bumpE, + bumpe: bumpe, + bumpeq: bumpeq, + cacute: cacute, + cap: cap, + capand: capand, + capbrcup: capbrcup, + capcap: capcap, + capcup: capcup, + capdot: capdot, + caps: caps, + caret: caret, + caron: caron, + ccaps: ccaps, + ccaron: ccaron, + ccedi: ccedi, + ccedil: ccedil, + ccirc: ccirc, + ccups: ccups, + ccupssm: ccupssm, + cdot: cdot, + cedi: cedi, + cedil: cedil, + cemptyv: cemptyv, + cen: cen, + cent: cent, + centerdot: centerdot, + cfr: cfr, + chcy: chcy, + check: check$1, + checkmark: checkmark, + chi: chi, + cir: cir, + cirE: cirE, + circ: circ, + circeq: circeq, + circlearrowleft: circlearrowleft, + circlearrowright: circlearrowright, + circledR: circledR, + circledS: circledS, + circledast: circledast, + circledcirc: circledcirc, + circleddash: circleddash, + cire: cire, + cirfnint: cirfnint, + cirmid: cirmid, + cirscir: cirscir, + clubs: clubs, + clubsuit: clubsuit, + colon: colon, + colone: colone, + coloneq: coloneq, + comma: comma, + commat: commat, + comp: comp, + compfn: compfn, + complement: complement, + complexes: complexes, + cong: cong, + congdot: congdot, + conint: conint, + copf: copf, + coprod: coprod, + cop: cop, + copy: copy, + copysr: copysr, + crarr: crarr, + cross: cross, + cscr: cscr, + csub: csub, + csube: csube, + csup: csup, + csupe: csupe, + ctdot: ctdot, + cudarrl: cudarrl, + cudarrr: cudarrr, + cuepr: cuepr, + cuesc: cuesc, + cularr: cularr, + cularrp: cularrp, + cup: cup, + cupbrcap: cupbrcap, + cupcap: cupcap, + cupcup: cupcup, + cupdot: cupdot, + cupor: cupor, + cups: cups, + curarr: curarr, + curarrm: curarrm, + curlyeqprec: curlyeqprec, + curlyeqsucc: curlyeqsucc, + curlyvee: curlyvee, + curlywedge: curlywedge, + curre: curre, + curren: curren, + curvearrowleft: curvearrowleft, + curvearrowright: curvearrowright, + cuvee: cuvee, + cuwed: cuwed, + cwconint: cwconint, + cwint: cwint, + cylcty: cylcty, + dArr: dArr, + dHar: dHar, + dagger: dagger, + daleth: daleth, + darr: darr, + dash: dash, + dashv: dashv, + dbkarow: dbkarow, + dblac: dblac, + dcaron: dcaron, + dcy: dcy, + dd: dd, + ddagger: ddagger, + ddarr: ddarr, + ddotseq: ddotseq, + de: de, + deg: deg, + delta: delta, + demptyv: demptyv, + dfisht: dfisht, + dfr: dfr, + dharl: dharl, + dharr: dharr, + diam: diam, + diamond: diamond, + diamondsuit: diamondsuit, + diams: diams, + die: die, + digamma: digamma, + disin: disin, + div: div, + divid: divid, + divide: divide, + divideontimes: divideontimes, + divonx: divonx, + djcy: djcy, + dlcorn: dlcorn, + dlcrop: dlcrop, + dollar: dollar, + dopf: dopf, + dot: dot, + doteq: doteq, + doteqdot: doteqdot, + dotminus: dotminus, + dotplus: dotplus, + dotsquare: dotsquare, + doublebarwedge: doublebarwedge, + downarrow: downarrow, + downdownarrows: downdownarrows, + downharpoonleft: downharpoonleft, + downharpoonright: downharpoonright, + drbkarow: drbkarow, + drcorn: drcorn, + drcrop: drcrop, + dscr: dscr, + dscy: dscy, + dsol: dsol, + dstrok: dstrok, + dtdot: dtdot, + dtri: dtri, + dtrif: dtrif, + duarr: duarr, + duhar: duhar, + dwangle: dwangle, + dzcy: dzcy, + dzigrarr: dzigrarr, + eDDot: eDDot, + eDot: eDot, + eacut: eacut, + eacute: eacute, + easter: easter, + ecaron: ecaron, + ecir: ecir, + ecirc: ecirc, + ecolon: ecolon, + ecy: ecy, + edot: edot, + ee: ee, + efDot: efDot, + efr: efr, + eg: eg, + egrav: egrav, + egrave: egrave, + egs: egs, + egsdot: egsdot, + el: el, + elinters: elinters, + ell: ell, + els: els, + elsdot: elsdot, + emacr: emacr, + empty: empty, + emptyset: emptyset, + emptyv: emptyv, + emsp13: emsp13, + emsp14: emsp14, + emsp: emsp, + eng: eng, + ensp: ensp, + eogon: eogon, + eopf: eopf, + epar: epar, + eparsl: eparsl, + eplus: eplus, + epsi: epsi, + epsilon: epsilon, + epsiv: epsiv, + eqcirc: eqcirc, + eqcolon: eqcolon, + eqsim: eqsim, + eqslantgtr: eqslantgtr, + eqslantless: eqslantless, + equals: equals, + equest: equest, + equiv: equiv, + equivDD: equivDD, + eqvparsl: eqvparsl, + erDot: erDot, + erarr: erarr, + escr: escr, + esdot: esdot, + esim: esim, + eta: eta, + et: et, + eth: eth, + eum: eum, + euml: euml, + euro: euro, + excl: excl, + exist: exist, + expectation: expectation, + exponentiale: exponentiale, + fallingdotseq: fallingdotseq, + fcy: fcy, + female: female, + ffilig: ffilig, + fflig: fflig, + ffllig: ffllig, + ffr: ffr, + filig: filig, + fjlig: fjlig, + flat: flat, + fllig: fllig, + fltns: fltns, + fnof: fnof, + fopf: fopf, + forall: forall, + fork: fork, + forkv: forkv, + fpartint: fpartint, + frac1: frac1, + frac12: frac12, + frac13: frac13, + frac14: frac14, + frac15: frac15, + frac16: frac16, + frac18: frac18, + frac23: frac23, + frac25: frac25, + frac3: frac3, + frac34: frac34, + frac35: frac35, + frac38: frac38, + frac45: frac45, + frac56: frac56, + frac58: frac58, + frac78: frac78, + frasl: frasl, + frown: frown, + fscr: fscr, + gE: gE, + gEl: gEl, + gacute: gacute, + gamma: gamma, + gammad: gammad, + gap: gap, + gbreve: gbreve, + gcirc: gcirc, + gcy: gcy, + gdot: gdot, + ge: ge, + gel: gel, + geq: geq, + geqq: geqq, + geqslant: geqslant, + ges: ges, + gescc: gescc, + gesdot: gesdot, + gesdoto: gesdoto, + gesdotol: gesdotol, + gesl: gesl, + gesles: gesles, + gfr: gfr, + gg: gg, + ggg: ggg, + gimel: gimel, + gjcy: gjcy, + gl: gl, + glE: glE, + gla: gla, + glj: glj, + gnE: gnE, + gnap: gnap, + gnapprox: gnapprox, + gne: gne, + gneq: gneq, + gneqq: gneqq, + gnsim: gnsim, + gopf: gopf, + grave: grave, + gscr: gscr, + gsim: gsim, + gsime: gsime, + gsiml: gsiml, + g: g, + gt: gt, + gtcc: gtcc, + gtcir: gtcir, + gtdot: gtdot, + gtlPar: gtlPar, + gtquest: gtquest, + gtrapprox: gtrapprox, + gtrarr: gtrarr, + gtrdot: gtrdot, + gtreqless: gtreqless, + gtreqqless: gtreqqless, + gtrless: gtrless, + gtrsim: gtrsim, + gvertneqq: gvertneqq, + gvnE: gvnE, + hArr: hArr, + hairsp: hairsp, + half: half, + hamilt: hamilt, + hardcy: hardcy, + harr: harr, + harrcir: harrcir, + harrw: harrw, + hbar: hbar, + hcirc: hcirc, + hearts: hearts, + heartsuit: heartsuit, + hellip: hellip, + hercon: hercon, + hfr: hfr, + hksearow: hksearow, + hkswarow: hkswarow, + hoarr: hoarr, + homtht: homtht, + hookleftarrow: hookleftarrow, + hookrightarrow: hookrightarrow, + hopf: hopf, + horbar: horbar, + hscr: hscr, + hslash: hslash, + hstrok: hstrok, + hybull: hybull, + hyphen: hyphen, + iacut: iacut, + iacute: iacute, + ic: ic, + icir: icir, + icirc: icirc, + icy: icy, + iecy: iecy, + iexc: iexc, + iexcl: iexcl, + iff: iff, + ifr: ifr, + igrav: igrav, + igrave: igrave, + ii: ii, + iiiint: iiiint, + iiint: iiint, + iinfin: iinfin, + iiota: iiota, + ijlig: ijlig, + imacr: imacr, + image: image$1, + imagline: imagline, + imagpart: imagpart, + imath: imath, + imof: imof, + imped: imped, + "in": "∈", + incare: incare, + infin: infin, + infintie: infintie, + inodot: inodot, + int: int$1, + intcal: intcal, + integers: integers, + intercal: intercal, + intlarhk: intlarhk, + intprod: intprod, + iocy: iocy, + iogon: iogon, + iopf: iopf, + iota: iota, + iprod: iprod, + iques: iques, + iquest: iquest, + iscr: iscr, + isin: isin, + isinE: isinE, + isindot: isindot, + isins: isins, + isinsv: isinsv, + isinv: isinv, + it: it, + itilde: itilde, + iukcy: iukcy, + ium: ium, + iuml: iuml, + jcirc: jcirc, + jcy: jcy, + jfr: jfr, + jmath: jmath, + jopf: jopf, + jscr: jscr, + jsercy: jsercy, + jukcy: jukcy, + kappa: kappa, + kappav: kappav, + kcedil: kcedil, + kcy: kcy, + kfr: kfr, + kgreen: kgreen, + khcy: khcy, + kjcy: kjcy, + kopf: kopf, + kscr: kscr, + lAarr: lAarr, + lArr: lArr, + lAtail: lAtail, + lBarr: lBarr, + lE: lE, + lEg: lEg, + lHar: lHar, + lacute: lacute, + laemptyv: laemptyv, + lagran: lagran, + lambda: lambda, + lang: lang, + langd: langd, + langle: langle, + lap: lap, + laqu: laqu, + laquo: laquo, + larr: larr, + larrb: larrb, + larrbfs: larrbfs, + larrfs: larrfs, + larrhk: larrhk, + larrlp: larrlp, + larrpl: larrpl, + larrsim: larrsim, + larrtl: larrtl, + lat: lat, + latail: latail, + late: late, + lates: lates, + lbarr: lbarr, + lbbrk: lbbrk, + lbrace: lbrace, + lbrack: lbrack, + lbrke: lbrke, + lbrksld: lbrksld, + lbrkslu: lbrkslu, + lcaron: lcaron, + lcedil: lcedil, + lceil: lceil, + lcub: lcub, + lcy: lcy, + ldca: ldca, + ldquo: ldquo, + ldquor: ldquor, + ldrdhar: ldrdhar, + ldrushar: ldrushar, + ldsh: ldsh, + le: le, + leftarrow: leftarrow, + leftarrowtail: leftarrowtail, + leftharpoondown: leftharpoondown, + leftharpoonup: leftharpoonup, + leftleftarrows: leftleftarrows, + leftrightarrow: leftrightarrow, + leftrightarrows: leftrightarrows, + leftrightharpoons: leftrightharpoons, + leftrightsquigarrow: leftrightsquigarrow, + leftthreetimes: leftthreetimes, + leg: leg, + leq: leq, + leqq: leqq, + leqslant: leqslant, + les: les, + lescc: lescc, + lesdot: lesdot, + lesdoto: lesdoto, + lesdotor: lesdotor, + lesg: lesg, + lesges: lesges, + lessapprox: lessapprox, + lessdot: lessdot, + lesseqgtr: lesseqgtr, + lesseqqgtr: lesseqqgtr, + lessgtr: lessgtr, + lesssim: lesssim, + lfisht: lfisht, + lfloor: lfloor, + lfr: lfr, + lg: lg, + lgE: lgE, + lhard: lhard, + lharu: lharu, + lharul: lharul, + lhblk: lhblk, + ljcy: ljcy, + ll: ll, + llarr: llarr, + llcorner: llcorner, + llhard: llhard, + lltri: lltri, + lmidot: lmidot, + lmoust: lmoust, + lmoustache: lmoustache, + lnE: lnE, + lnap: lnap, + lnapprox: lnapprox, + lne: lne, + lneq: lneq, + lneqq: lneqq, + lnsim: lnsim, + loang: loang, + loarr: loarr, + lobrk: lobrk, + longleftarrow: longleftarrow, + longleftrightarrow: longleftrightarrow, + longmapsto: longmapsto, + longrightarrow: longrightarrow, + looparrowleft: looparrowleft, + looparrowright: looparrowright, + lopar: lopar, + lopf: lopf, + loplus: loplus, + lotimes: lotimes, + lowast: lowast, + lowbar: lowbar, + loz: loz, + lozenge: lozenge, + lozf: lozf, + lpar: lpar, + lparlt: lparlt, + lrarr: lrarr, + lrcorner: lrcorner, + lrhar: lrhar, + lrhard: lrhard, + lrm: lrm, + lrtri: lrtri, + lsaquo: lsaquo, + lscr: lscr, + lsh: lsh, + lsim: lsim, + lsime: lsime, + lsimg: lsimg, + lsqb: lsqb, + lsquo: lsquo, + lsquor: lsquor, + lstrok: lstrok, + l: l, + lt: lt$1, + ltcc: ltcc, + ltcir: ltcir, + ltdot: ltdot, + lthree: lthree, + ltimes: ltimes, + ltlarr: ltlarr, + ltquest: ltquest, + ltrPar: ltrPar, + ltri: ltri, + ltrie: ltrie, + ltrif: ltrif, + lurdshar: lurdshar, + luruhar: luruhar, + lvertneqq: lvertneqq, + lvnE: lvnE, + mDDot: mDDot, + mac: mac, + macr: macr, + male: male, + malt: malt, + maltese: maltese, + map: map$1, + mapsto: mapsto, + mapstodown: mapstodown, + mapstoleft: mapstoleft, + mapstoup: mapstoup, + marker: marker, + mcomma: mcomma, + mcy: mcy, + mdash: mdash, + measuredangle: measuredangle, + mfr: mfr, + mho: mho, + micr: micr, + micro: micro, + mid: mid, + midast: midast, + midcir: midcir, + middo: middo, + middot: middot, + minus: minus, + minusb: minusb, + minusd: minusd, + minusdu: minusdu, + mlcp: mlcp, + mldr: mldr, + mnplus: mnplus, + models: models, + mopf: mopf, + mp: mp, + mscr: mscr, + mstpos: mstpos, + mu: mu, + multimap: multimap, + mumap: mumap, + nGg: nGg, + nGt: nGt, + nGtv: nGtv, + nLeftarrow: nLeftarrow, + nLeftrightarrow: nLeftrightarrow, + nLl: nLl, + nLt: nLt, + nLtv: nLtv, + nRightarrow: nRightarrow, + nVDash: nVDash, + nVdash: nVdash, + nabla: nabla, + nacute: nacute, + nang: nang, + nap: nap, + napE: napE, + napid: napid, + napos: napos, + napprox: napprox, + natur: natur, + natural: natural, + naturals: naturals, + nbs: nbs, + nbsp: nbsp, + nbump: nbump, + nbumpe: nbumpe, + ncap: ncap, + ncaron: ncaron, + ncedil: ncedil, + ncong: ncong, + ncongdot: ncongdot, + ncup: ncup, + ncy: ncy, + ndash: ndash, + ne: ne, + neArr: neArr, + nearhk: nearhk, + nearr: nearr, + nearrow: nearrow, + nedot: nedot, + nequiv: nequiv, + nesear: nesear, + nesim: nesim, + nexist: nexist, + nexists: nexists, + nfr: nfr, + ngE: ngE, + nge: nge, + ngeq: ngeq, + ngeqq: ngeqq, + ngeqslant: ngeqslant, + nges: nges, + ngsim: ngsim, + ngt: ngt, + ngtr: ngtr, + nhArr: nhArr, + nharr: nharr, + nhpar: nhpar, + ni: ni, + nis: nis, + nisd: nisd, + niv: niv, + njcy: njcy, + nlArr: nlArr, + nlE: nlE, + nlarr: nlarr, + nldr: nldr, + nle: nle, + nleftarrow: nleftarrow, + nleftrightarrow: nleftrightarrow, + nleq: nleq, + nleqq: nleqq, + nleqslant: nleqslant, + nles: nles, + nless: nless, + nlsim: nlsim, + nlt: nlt, + nltri: nltri, + nltrie: nltrie, + nmid: nmid, + nopf: nopf, + no: no, + not: not, + notin: notin, + notinE: notinE, + notindot: notindot, + notinva: notinva, + notinvb: notinvb, + notinvc: notinvc, + notni: notni, + notniva: notniva, + notnivb: notnivb, + notnivc: notnivc, + npar: npar, + nparallel: nparallel, + nparsl: nparsl, + npart: npart, + npolint: npolint, + npr: npr, + nprcue: nprcue, + npre: npre, + nprec: nprec, + npreceq: npreceq, + nrArr: nrArr, + nrarr: nrarr, + nrarrc: nrarrc, + nrarrw: nrarrw, + nrightarrow: nrightarrow, + nrtri: nrtri, + nrtrie: nrtrie, + nsc: nsc, + nsccue: nsccue, + nsce: nsce, + nscr: nscr, + nshortmid: nshortmid, + nshortparallel: nshortparallel, + nsim: nsim, + nsime: nsime, + nsimeq: nsimeq, + nsmid: nsmid, + nspar: nspar, + nsqsube: nsqsube, + nsqsupe: nsqsupe, + nsub: nsub, + nsubE: nsubE, + nsube: nsube, + nsubset: nsubset, + nsubseteq: nsubseteq, + nsubseteqq: nsubseteqq, + nsucc: nsucc, + nsucceq: nsucceq, + nsup: nsup, + nsupE: nsupE, + nsupe: nsupe, + nsupset: nsupset, + nsupseteq: nsupseteq, + nsupseteqq: nsupseteqq, + ntgl: ntgl, + ntild: ntild, + ntilde: ntilde, + ntlg: ntlg, + ntriangleleft: ntriangleleft, + ntrianglelefteq: ntrianglelefteq, + ntriangleright: ntriangleright, + ntrianglerighteq: ntrianglerighteq, + nu: nu, + num: num, + numero: numero, + numsp: numsp, + nvDash: nvDash, + nvHarr: nvHarr, + nvap: nvap, + nvdash: nvdash, + nvge: nvge, + nvgt: nvgt, + nvinfin: nvinfin, + nvlArr: nvlArr, + nvle: nvle, + nvlt: nvlt, + nvltrie: nvltrie, + nvrArr: nvrArr, + nvrtrie: nvrtrie, + nvsim: nvsim, + nwArr: nwArr, + nwarhk: nwarhk, + nwarr: nwarr, + nwarrow: nwarrow, + nwnear: nwnear, + oS: oS, + oacut: oacut, + oacute: oacute, + oast: oast, + ocir: ocir, + ocirc: ocirc, + ocy: ocy, + odash: odash, + odblac: odblac, + odiv: odiv, + odot: odot, + odsold: odsold, + oelig: oelig, + ofcir: ofcir, + ofr: ofr, + ogon: ogon, + ograv: ograv, + ograve: ograve, + ogt: ogt, + ohbar: ohbar, + ohm: ohm, + oint: oint, + olarr: olarr, + olcir: olcir, + olcross: olcross, + oline: oline, + olt: olt, + omacr: omacr, + omega: omega, + omicron: omicron, + omid: omid, + ominus: ominus, + oopf: oopf, + opar: opar, + operp: operp, + oplus: oplus, + or: or, + orarr: orarr, + ord: ord, + order: order, + orderof: orderof, + ordf: ordf, + ordm: ordm, + origof: origof, + oror: oror, + orslope: orslope, + orv: orv, + oscr: oscr, + oslas: oslas, + oslash: oslash, + osol: osol, + otild: otild, + otilde: otilde, + otimes: otimes, + otimesas: otimesas, + oum: oum, + ouml: ouml, + ovbar: ovbar, + par: par, + para: para, + parallel: parallel, + parsim: parsim, + parsl: parsl, + part: part, + pcy: pcy, + percnt: percnt, + period: period, + permil: permil, + perp: perp, + pertenk: pertenk, + pfr: pfr, + phi: phi, + phiv: phiv, + phmmat: phmmat, + phone: phone, + pi: pi, + pitchfork: pitchfork, + piv: piv, + planck: planck, + planckh: planckh, + plankv: plankv, + plus: plus, + plusacir: plusacir, + plusb: plusb, + pluscir: pluscir, + plusdo: plusdo, + plusdu: plusdu, + pluse: pluse, + plusm: plusm, + plusmn: plusmn, + plussim: plussim, + plustwo: plustwo, + pm: pm, + pointint: pointint, + popf: popf, + poun: poun, + pound: pound, + pr: pr, + prE: prE, + prap: prap, + prcue: prcue, + pre: pre, + prec: prec, + precapprox: precapprox, + preccurlyeq: preccurlyeq, + preceq: preceq, + precnapprox: precnapprox, + precneqq: precneqq, + precnsim: precnsim, + precsim: precsim, + prime: prime, + primes: primes, + prnE: prnE, + prnap: prnap, + prnsim: prnsim, + prod: prod, + profalar: profalar, + profline: profline, + profsurf: profsurf, + prop: prop, + propto: propto, + prsim: prsim, + prurel: prurel, + pscr: pscr, + psi: psi, + puncsp: puncsp, + qfr: qfr, + qint: qint, + qopf: qopf, + qprime: qprime, + qscr: qscr, + quaternions: quaternions, + quatint: quatint, + quest: quest, + questeq: questeq, + quo: quo, + quot: quot, + rAarr: rAarr, + rArr: rArr, + rAtail: rAtail, + rBarr: rBarr, + rHar: rHar, + race: race, + racute: racute, + radic: radic, + raemptyv: raemptyv, + rang: rang, + rangd: rangd, + range: range, + rangle: rangle, + raqu: raqu, + raquo: raquo, + rarr: rarr, + rarrap: rarrap, + rarrb: rarrb, + rarrbfs: rarrbfs, + rarrc: rarrc, + rarrfs: rarrfs, + rarrhk: rarrhk, + rarrlp: rarrlp, + rarrpl: rarrpl, + rarrsim: rarrsim, + rarrtl: rarrtl, + rarrw: rarrw, + ratail: ratail, + ratio: ratio, + rationals: rationals, + rbarr: rbarr, + rbbrk: rbbrk, + rbrace: rbrace, + rbrack: rbrack, + rbrke: rbrke, + rbrksld: rbrksld, + rbrkslu: rbrkslu, + rcaron: rcaron, + rcedil: rcedil, + rceil: rceil, + rcub: rcub, + rcy: rcy, + rdca: rdca, + rdldhar: rdldhar, + rdquo: rdquo, + rdquor: rdquor, + rdsh: rdsh, + real: real, + realine: realine, + realpart: realpart, + reals: reals, + rect: rect, + re: re$4, + reg: reg, + rfisht: rfisht, + rfloor: rfloor, + rfr: rfr, + rhard: rhard, + rharu: rharu, + rharul: rharul, + rho: rho, + rhov: rhov, + rightarrow: rightarrow, + rightarrowtail: rightarrowtail, + rightharpoondown: rightharpoondown, + rightharpoonup: rightharpoonup, + rightleftarrows: rightleftarrows, + rightleftharpoons: rightleftharpoons, + rightrightarrows: rightrightarrows, + rightsquigarrow: rightsquigarrow, + rightthreetimes: rightthreetimes, + ring: ring, + risingdotseq: risingdotseq, + rlarr: rlarr, + rlhar: rlhar, + rlm: rlm, + rmoust: rmoust, + rmoustache: rmoustache, + rnmid: rnmid, + roang: roang, + roarr: roarr, + robrk: robrk, + ropar: ropar, + ropf: ropf, + roplus: roplus, + rotimes: rotimes, + rpar: rpar, + rpargt: rpargt, + rppolint: rppolint, + rrarr: rrarr, + rsaquo: rsaquo, + rscr: rscr, + rsh: rsh, + rsqb: rsqb, + rsquo: rsquo, + rsquor: rsquor, + rthree: rthree, + rtimes: rtimes, + rtri: rtri, + rtrie: rtrie, + rtrif: rtrif, + rtriltri: rtriltri, + ruluhar: ruluhar, + rx: rx, + sacute: sacute, + sbquo: sbquo, + sc: sc, + scE: scE, + scap: scap, + scaron: scaron, + sccue: sccue, + sce: sce, + scedil: scedil, + scirc: scirc, + scnE: scnE, + scnap: scnap, + scnsim: scnsim, + scpolint: scpolint, + scsim: scsim, + scy: scy, + sdot: sdot, + sdotb: sdotb, + sdote: sdote, + seArr: seArr, + searhk: searhk, + searr: searr, + searrow: searrow, + sec: sec, + sect: sect, + semi: semi, + seswar: seswar, + setminus: setminus, + setmn: setmn, + sext: sext, + sfr: sfr, + sfrown: sfrown, + sharp: sharp, + shchcy: shchcy, + shcy: shcy, + shortmid: shortmid, + shortparallel: shortparallel, + sh: sh, + shy: shy, + sigma: sigma, + sigmaf: sigmaf, + sigmav: sigmav, + sim: sim, + simdot: simdot, + sime: sime, + simeq: simeq, + simg: simg, + simgE: simgE, + siml: siml, + simlE: simlE, + simne: simne, + simplus: simplus, + simrarr: simrarr, + slarr: slarr, + smallsetminus: smallsetminus, + smashp: smashp, + smeparsl: smeparsl, + smid: smid, + smile: smile, + smt: smt, + smte: smte, + smtes: smtes, + softcy: softcy, + sol: sol, + solb: solb, + solbar: solbar, + sopf: sopf, + spades: spades, + spadesuit: spadesuit, + spar: spar, + sqcap: sqcap, + sqcaps: sqcaps, + sqcup: sqcup, + sqcups: sqcups, + sqsub: sqsub, + sqsube: sqsube, + sqsubset: sqsubset, + sqsubseteq: sqsubseteq, + sqsup: sqsup, + sqsupe: sqsupe, + sqsupset: sqsupset, + sqsupseteq: sqsupseteq, + squ: squ, + square: square, + squarf: squarf, + squf: squf, + srarr: srarr, + sscr: sscr, + ssetmn: ssetmn, + ssmile: ssmile, + sstarf: sstarf, + star: star, + starf: starf, + straightepsilon: straightepsilon, + straightphi: straightphi, + strns: strns, + sub: sub, + subE: subE, + subdot: subdot, + sube: sube, + subedot: subedot, + submult: submult, + subnE: subnE, + subne: subne, + subplus: subplus, + subrarr: subrarr, + subset: subset, + subseteq: subseteq, + subseteqq: subseteqq, + subsetneq: subsetneq, + subsetneqq: subsetneqq, + subsim: subsim, + subsub: subsub, + subsup: subsup, + succ: succ, + succapprox: succapprox, + succcurlyeq: succcurlyeq, + succeq: succeq, + succnapprox: succnapprox, + succneqq: succneqq, + succnsim: succnsim, + succsim: succsim, + sum: sum, + sung: sung, + sup: sup, + sup1: sup1, + sup2: sup2, + sup3: sup3, + supE: supE, + supdot: supdot, + supdsub: supdsub, + supe: supe, + supedot: supedot, + suphsol: suphsol, + suphsub: suphsub, + suplarr: suplarr, + supmult: supmult, + supnE: supnE, + supne: supne, + supplus: supplus, + supset: supset, + supseteq: supseteq, + supseteqq: supseteqq, + supsetneq: supsetneq, + supsetneqq: supsetneqq, + supsim: supsim, + supsub: supsub, + supsup: supsup, + swArr: swArr, + swarhk: swarhk, + swarr: swarr, + swarrow: swarrow, + swnwar: swnwar, + szli: szli, + szlig: szlig, + target: target, + tau: tau, + tbrk: tbrk, + tcaron: tcaron, + tcedil: tcedil, + tcy: tcy, + tdot: tdot, + telrec: telrec, + tfr: tfr, + there4: there4, + therefore: therefore, + theta: theta, + thetasym: thetasym, + thetav: thetav, + thickapprox: thickapprox, + thicksim: thicksim, + thinsp: thinsp, + thkap: thkap, + thksim: thksim, + thor: thor, + thorn: thorn, + tilde: tilde, + time: time, + times: times, + timesb: timesb, + timesbar: timesbar, + timesd: timesd, + tint: tint, + toea: toea, + top: top, + topbot: topbot, + topcir: topcir, + topf: topf, + topfork: topfork, + tosa: tosa, + tprime: tprime, + trade: trade, + triangle: triangle, + triangledown: triangledown, + triangleleft: triangleleft, + trianglelefteq: trianglelefteq, + triangleq: triangleq, + triangleright: triangleright, + trianglerighteq: trianglerighteq, + tridot: tridot, + trie: trie, + triminus: triminus, + triplus: triplus, + trisb: trisb, + tritime: tritime, + trpezium: trpezium, + tscr: tscr, + tscy: tscy, + tshcy: tshcy, + tstrok: tstrok, + twixt: twixt, + twoheadleftarrow: twoheadleftarrow, + twoheadrightarrow: twoheadrightarrow, + uArr: uArr, + uHar: uHar, + uacut: uacut, + uacute: uacute, + uarr: uarr, + ubrcy: ubrcy, + ubreve: ubreve, + ucir: ucir, + ucirc: ucirc, + ucy: ucy, + udarr: udarr, + udblac: udblac, + udhar: udhar, + ufisht: ufisht, + ufr: ufr, + ugrav: ugrav, + ugrave: ugrave, + uharl: uharl, + uharr: uharr, + uhblk: uhblk, + ulcorn: ulcorn, + ulcorner: ulcorner, + ulcrop: ulcrop, + ultri: ultri, + umacr: umacr, + um: um, + uml: uml, + uogon: uogon, + uopf: uopf, + uparrow: uparrow, + updownarrow: updownarrow, + upharpoonleft: upharpoonleft, + upharpoonright: upharpoonright, + uplus: uplus, + upsi: upsi, + upsih: upsih, + upsilon: upsilon, + upuparrows: upuparrows, + urcorn: urcorn, + urcorner: urcorner, + urcrop: urcrop, + uring: uring, + urtri: urtri, + uscr: uscr, + utdot: utdot, + utilde: utilde, + utri: utri, + utrif: utrif, + uuarr: uuarr, + uum: uum, + uuml: uuml, + uwangle: uwangle, + vArr: vArr, + vBar: vBar, + vBarv: vBarv, + vDash: vDash, + vangrt: vangrt, + varepsilon: varepsilon, + varkappa: varkappa, + varnothing: varnothing, + varphi: varphi, + varpi: varpi, + varpropto: varpropto, + varr: varr, + varrho: varrho, + varsigma: varsigma, + varsubsetneq: varsubsetneq, + varsubsetneqq: varsubsetneqq, + varsupsetneq: varsupsetneq, + varsupsetneqq: varsupsetneqq, + vartheta: vartheta, + vartriangleleft: vartriangleleft, + vartriangleright: vartriangleright, + vcy: vcy, + vdash: vdash, + vee: vee, + veebar: veebar, + veeeq: veeeq, + vellip: vellip, + verbar: verbar, + vert: vert, + vfr: vfr, + vltri: vltri, + vnsub: vnsub, + vnsup: vnsup, + vopf: vopf, + vprop: vprop, + vrtri: vrtri, + vscr: vscr, + vsubnE: vsubnE, + vsubne: vsubne, + vsupnE: vsupnE, + vsupne: vsupne, + vzigzag: vzigzag, + wcirc: wcirc, + wedbar: wedbar, + wedge: wedge, + wedgeq: wedgeq, + weierp: weierp, + wfr: wfr, + wopf: wopf, + wp: wp, + wr: wr, + wreath: wreath, + wscr: wscr, + xcap: xcap, + xcirc: xcirc, + xcup: xcup, + xdtri: xdtri, + xfr: xfr, + xhArr: xhArr, + xharr: xharr, + xi: xi, + xlArr: xlArr, + xlarr: xlarr, + xmap: xmap, + xnis: xnis, + xodot: xodot, + xopf: xopf, + xoplus: xoplus, + xotime: xotime, + xrArr: xrArr, + xrarr: xrarr, + xscr: xscr, + xsqcup: xsqcup, + xuplus: xuplus, + xutri: xutri, + xvee: xvee, + xwedge: xwedge, + yacut: yacut, + yacute: yacute, + yacy: yacy, + ycirc: ycirc, + ycy: ycy, + ye: ye, + yen: yen, + yfr: yfr, + yicy: yicy, + yopf: yopf, + yscr: yscr, + yucy: yucy, + yum: yum, + yuml: yuml, + zacute: zacute, + zcaron: zcaron, + zcy: zcy, + zdot: zdot, + zeetrf: zeetrf, + zeta: zeta, + zfr: zfr, + zhcy: zhcy, + zigrarr: zigrarr, + zopf: zopf, + zscr: zscr, + zwj: zwj, + zwnj: zwnj +}; + +var characterEntities = require$$0; - value += sequence; - } +var decodeEntity_1 = decodeEntity; - exit(); - return value -} +var own$4 = {}.hasOwnProperty; -function map$4(line, _, blank) { - return (blank ? '' : ' ') + line +function decodeEntity(characters) { + return own$4.call(characterEntities, characters) + ? characterEntities[characters] + : false } -var association_1 = association; +var association_1 = association$3; +var decode = decodeEntity_1; - -var characterEscape$1 = /\\([!-/:-@[-`{-~])/g; -var characterReference$1 = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; +var characterEscape = /\\([!-/:-@[-`{-~])/g; +var characterReference = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; // The `label` of an association is the string value: character escapes and // references work, and casing is intact. @@ -38653,23 +48751,23 @@ var characterReference$1 = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; // So, we do prefer the label when figuring out how we’re going to serialize: // it has whitespace, casing, and we can ignore most useless character escapes // and all character references. -function association(node) { +function association$3(node) { if (node.label || !node.identifier) { return node.label || '' } return node.identifier - .replace(characterEscape$1, '$1') - .replace(characterReference$1, decodeIfPossible) + .replace(characterEscape, '$1') + .replace(characterReference, decodeIfPossible) } function decodeIfPossible($0, $1) { - return decodeEntity_1($1) || $0 + return decode($1) || $0 } -var checkQuote_1 = checkQuote; +var checkQuote_1 = checkQuote$3; -function checkQuote(context) { +function checkQuote$3(context) { var marker = context.options.quote || '"'; if (marker !== '"' && marker !== "'") { @@ -38683,19 +48781,19 @@ function checkQuote(context) { return marker } -var definition_1$1 = definition$1; - - - +var definition_1 = definition; +var association$2 = association_1; +var checkQuote$2 = checkQuote_1; +var safe$5 = safe_1; -function definition$1(node, _, context) { - var marker = checkQuote_1(context); +function definition(node, _, context) { + var marker = checkQuote$2(context); var suffix = marker === '"' ? 'Quote' : 'Apostrophe'; var exit = context.enter('definition'); var subexit = context.enter('label'); var value = - '[' + safe_1(context, association_1(node), {before: '[', after: ']'}) + ']: '; + '[' + safe$5(context, association$2(node), {before: '[', after: ']'}) + ']: '; subexit(); @@ -38706,11 +48804,11 @@ function definition$1(node, _, context) { /[ \t\r\n]/.test(node.url) ) { subexit = context.enter('destinationLiteral'); - value += '<' + safe_1(context, node.url, {before: '<', after: '>'}) + '>'; + value += '<' + safe$5(context, node.url, {before: '<', after: '>'}) + '>'; } else { // No whitespace, raw is prettier. subexit = context.enter('destinationRaw'); - value += safe_1(context, node.url, {before: ' ', after: ' '}); + value += safe$5(context, node.url, {before: ' ', after: ' '}); } subexit(); @@ -38720,7 +48818,7 @@ function definition$1(node, _, context) { value += ' ' + marker + - safe_1(context, node.title, {before: marker, after: marker}) + + safe$5(context, node.title, {before: marker, after: marker}) + marker; subexit(); } @@ -38730,9 +48828,9 @@ function definition$1(node, _, context) { return value } -var checkEmphasis_1 = checkEmphasis; +var checkEmphasis_1 = checkEmphasis$1; -function checkEmphasis(context) { +function checkEmphasis$1(context) { var marker = context.options.emphasis || '*'; if (marker !== '*' && marker !== '_') { @@ -38746,9 +48844,9 @@ function checkEmphasis(context) { return marker } -var containerPhrasing = phrasing; +var containerPhrasing$1 = phrasing$6; -function phrasing(parent, context, safeOptions) { +function phrasing$6(parent, context, safeOptions) { var children = parent.children || []; var results = []; var index = -1; @@ -38773,12 +48871,31 @@ function phrasing(parent, context, safeOptions) { after = safeOptions.after; } + // In some cases, html (text) can be found in phrasing right after an eol. + // When we’d serialize that, in most cases that would be seen as html + // (flow). + // As we can’t escape or so to prevent it from happening, we take a somewhat + // reasonable approach: replace that eol with a space. + // See: + if ( + results.length > 0 && + (before === '\r' || before === '\n') && + child.type === 'html' + ) { + results[results.length - 1] = results[results.length - 1].replace( + /(\r?\n|\r)$/, + ' ' + ); + before = ' '; + } + results.push( context.handle(child, parent, context, { before: before, after: after }) ); + before = results[results.length - 1].slice(-1); } @@ -38788,17 +48905,17 @@ function phrasing(parent, context, safeOptions) { var emphasis_1 = emphasis; emphasis.peek = emphasisPeek; - - +var checkEmphasis = checkEmphasis_1; +var phrasing$5 = containerPhrasing$1; // To do: there are cases where emphasis cannot “form” depending on the // previous or next character of sequences. // There’s no way around that though, except for injecting zero-width stuff. // Do we need to safeguard against that? function emphasis(node, _, context) { - var marker = checkEmphasis_1(context); + var marker = checkEmphasis(context); var exit = context.enter('emphasis'); - var value = containerPhrasing(node, context, {before: marker, after: marker}); + var value = phrasing$5(node, context, {before: marker, after: marker}); exit(); return marker + value + marker } @@ -38807,21 +48924,49 @@ function emphasisPeek(node, _, context) { return context.options.emphasis || '*' } -var formatHeadingAsSetext_1 = formatHeadingAsSetext; - - +var mdastUtilToString = toString$3; -function formatHeadingAsSetext(node, context) { +// Get the text content of a node. +// Prefer the node’s plain-text fields, otherwise serialize its children, +// and if the given value is an array, serialize the nodes in it. +function toString$3(node) { return ( - context.options.setext && (!node.depth || node.depth < 3) && mdastUtilToString(node) + (node && + (node.value || + node.alt || + node.title || + ('children' in node && all$1(node.children)) || + ('length' in node && all$1(node)))) || + '' ) } -var heading_1 = heading; +function all$1(values) { + var result = []; + var index = -1; + + while (++index < values.length) { + result[index] = toString$3(values[index]); + } + + return result.join('') +} + +var formatHeadingAsSetext_1 = formatHeadingAsSetext$2; +var toString$2 = mdastUtilToString; +function formatHeadingAsSetext$2(node, context) { + return ( + context.options.setext && (!node.depth || node.depth < 3) && toString$2(node) + ) +} +var heading_1 = heading; +var repeat$3 = repeatString; +var formatHeadingAsSetext$1 = formatHeadingAsSetext_1; +var phrasing$4 = containerPhrasing$1; function heading(node, _, context) { var rank = Math.max(Math.min(6, node.depth || 1), 1); @@ -38830,17 +48975,17 @@ function heading(node, _, context) { var value; var sequence; - if (formatHeadingAsSetext_1(node, context)) { + if (formatHeadingAsSetext$1(node, context)) { exit = context.enter('headingSetext'); subexit = context.enter('phrasing'); - value = containerPhrasing(node, context, {before: '\n', after: '\n'}); + value = phrasing$4(node, context, {before: '\n', after: '\n'}); subexit(); exit(); return ( value + '\n' + - repeatString( + repeat$3( rank === 1 ? '=' : '-', // The whole size… value.length - @@ -38851,10 +48996,10 @@ function heading(node, _, context) { ) } - sequence = repeatString('#', rank); + sequence = repeat$3('#', rank); exit = context.enter('headingAtx'); subexit = context.enter('phrasing'); - value = containerPhrasing(node, context, {before: '# ', after: '\n'}); + value = phrasing$4(node, context, {before: '# ', after: '\n'}); value = value ? sequence + ' ' + value : sequence; if (context.options.closeAtx) { value += ' ' + sequence; @@ -38867,23 +49012,28 @@ function heading(node, _, context) { } var html_1 = html; +html.peek = htmlPeek; function html(node) { return node.value || '' } -var image_1 = image$1; -image$1.peek = imagePeek; - +function htmlPeek() { + return '<' +} +var image_1 = image; +image.peek = imagePeek; +var checkQuote$1 = checkQuote_1; +var safe$4 = safe_1; -function image$1(node, _, context) { - var quote = checkQuote_1(context); +function image(node, _, context) { + var quote = checkQuote$1(context); var suffix = quote === '"' ? 'Quote' : 'Apostrophe'; var exit = context.enter('image'); var subexit = context.enter('label'); - var value = '![' + safe_1(context, node.alt, {before: '[', after: ']'}) + ']('; + var value = '![' + safe$4(context, node.alt, {before: '[', after: ']'}) + ']('; subexit(); @@ -38894,11 +49044,11 @@ function image$1(node, _, context) { /[ \t\r\n]/.test(node.url) ) { subexit = context.enter('destinationLiteral'); - value += '<' + safe_1(context, node.url, {before: '<', after: '>'}) + '>'; + value += '<' + safe$4(context, node.url, {before: '<', after: '>'}) + '>'; } else { // No whitespace, raw is prettier. subexit = context.enter('destinationRaw'); - value += safe_1(context, node.url, { + value += safe$4(context, node.url, { before: '(', after: node.title ? ' ' : ')' }); @@ -38911,7 +49061,7 @@ function image$1(node, _, context) { value += ' ' + quote + - safe_1(context, node.title, {before: quote, after: quote}) + + safe$4(context, node.title, {before: quote, after: quote}) + quote; subexit(); } @@ -38929,14 +49079,14 @@ function imagePeek() { var imageReference_1 = imageReference; imageReference.peek = imageReferencePeek; - - +var association$1 = association_1; +var safe$3 = safe_1; function imageReference(node, _, context) { var type = node.referenceType; var exit = context.enter('imageReference'); var subexit = context.enter('label'); - var alt = safe_1(context, node.alt, {before: '[', after: ']'}); + var alt = safe$3(context, node.alt, {before: '[', after: ']'}); var value = '![' + alt + ']'; var reference; var stack; @@ -38946,7 +49096,7 @@ function imageReference(node, _, context) { stack = context.stack; context.stack = []; subexit = context.enter('reference'); - reference = safe_1(context, association_1(node), {before: '[', after: ']'}); + reference = safe$3(context, association$1(node), {before: '[', after: ']'}); subexit(); context.stack = stack; exit(); @@ -38964,13 +49114,19 @@ function imageReferencePeek() { return '!' } -var inlineCode_1 = inlineCode; -inlineCode.peek = inlineCodePeek; +var inlineCode_1 = inlineCode$1; +inlineCode$1.peek = inlineCodePeek$1; + +var patternCompile$1 = patternCompile_1; -function inlineCode(node) { +function inlineCode$1(node, parent, context) { var value = node.value || ''; var sequence = '`'; - var pad = ''; + var index = -1; + var pattern; + var expression; + var match; + var position; // If there is a single grave accent on its own in the code, use a fence of // two. @@ -38986,22 +49142,54 @@ function inlineCode(node) { (/[ \r\n`]/.test(value.charAt(0)) || /[ \r\n`]/.test(value.charAt(value.length - 1))) ) { - pad = ' '; + value = ' ' + value + ' '; + } + + // We have a potential problem: certain characters after eols could result in + // blocks being seen. + // For example, if someone injected the string `'\n# b'`, then that would + // result in an ATX heading. + // We can’t escape characters in `inlineCode`, but because eols are + // transformed to spaces when going from markdown to HTML anyway, we can swap + // them out. + while (++index < context.unsafe.length) { + pattern = context.unsafe[index]; + + // Only look for `atBreak`s. + // Btw: note that `atBreak` patterns will always start the regex at LF or + // CR. + if (!pattern.atBreak) continue + + expression = patternCompile$1(pattern); + + while ((match = expression.exec(value))) { + position = match.index; + + // Support CRLF (patterns only look for one of the characters). + if ( + value.charCodeAt(position) === 10 /* `\n` */ && + value.charCodeAt(position - 1) === 13 /* `\r` */ + ) { + position--; + } + + value = value.slice(0, position) + ' ' + value.slice(match.index + 1); + } } - return sequence + pad + value + pad + sequence + return sequence + value + sequence } -function inlineCodePeek() { +function inlineCodePeek$1() { return '`' } -var formatLinkAsAutolink_1 = formatLinkAsAutolink; +var formatLinkAsAutolink_1 = formatLinkAsAutolink$1; +var toString$1 = mdastUtilToString; - -function formatLinkAsAutolink(node, context) { - var raw = mdastUtilToString(node); +function formatLinkAsAutolink$1(node, context) { + var raw = toString$1(node); return ( !context.options.resourceLink && @@ -39023,28 +49211,28 @@ function formatLinkAsAutolink(node, context) { ) } -var link_1 = link$2; -link$2.peek = linkPeek; - - - +var link_1 = link; +link.peek = linkPeek; +var checkQuote = checkQuote_1; +var formatLinkAsAutolink = formatLinkAsAutolink_1; +var phrasing$3 = containerPhrasing$1; +var safe$2 = safe_1; - -function link$2(node, _, context) { - var quote = checkQuote_1(context); +function link(node, _, context) { + var quote = checkQuote(context); var suffix = quote === '"' ? 'Quote' : 'Apostrophe'; var exit; var subexit; var value; var stack; - if (formatLinkAsAutolink_1(node, context)) { + if (formatLinkAsAutolink(node, context)) { // Hide the fact that we’re in phrasing, because escapes don’t work. stack = context.stack; context.stack = []; exit = context.enter('autolink'); - value = '<' + containerPhrasing(node, context, {before: '<', after: '>'}) + '>'; + value = '<' + phrasing$3(node, context, {before: '<', after: '>'}) + '>'; exit(); context.stack = stack; return value @@ -39052,7 +49240,7 @@ function link$2(node, _, context) { exit = context.enter('link'); subexit = context.enter('label'); - value = '[' + containerPhrasing(node, context, {before: '[', after: ']'}) + ']('; + value = '[' + phrasing$3(node, context, {before: '[', after: ']'}) + ']('; subexit(); if ( @@ -39062,11 +49250,11 @@ function link$2(node, _, context) { /[ \t\r\n]/.test(node.url) ) { subexit = context.enter('destinationLiteral'); - value += '<' + safe_1(context, node.url, {before: '<', after: '>'}) + '>'; + value += '<' + safe$2(context, node.url, {before: '<', after: '>'}) + '>'; } else { // No whitespace, raw is prettier. subexit = context.enter('destinationRaw'); - value += safe_1(context, node.url, { + value += safe$2(context, node.url, { before: '(', after: node.title ? ' ' : ')' }); @@ -39079,7 +49267,7 @@ function link$2(node, _, context) { value += ' ' + quote + - safe_1(context, node.title, {before: quote, after: quote}) + + safe$2(context, node.title, {before: quote, after: quote}) + quote; subexit(); } @@ -39091,21 +49279,21 @@ function link$2(node, _, context) { } function linkPeek(node, _, context) { - return formatLinkAsAutolink_1(node, context) ? '<' : '[' + return formatLinkAsAutolink(node, context) ? '<' : '[' } var linkReference_1 = linkReference; linkReference.peek = linkReferencePeek; - - - +var association = association_1; +var phrasing$2 = containerPhrasing$1; +var safe$1 = safe_1; function linkReference(node, _, context) { var type = node.referenceType; var exit = context.enter('linkReference'); var subexit = context.enter('label'); - var text = containerPhrasing(node, context, {before: '[', after: ']'}); + var text = phrasing$2(node, context, {before: '[', after: ']'}); var value = '[' + text + ']'; var reference; var stack; @@ -39115,7 +49303,7 @@ function linkReference(node, _, context) { stack = context.stack; context.stack = []; subexit = context.enter('reference'); - reference = safe_1(context, association_1(node), {before: '[', after: ']'}); + reference = safe$1(context, association(node), {before: '[', after: ']'}); subexit(); context.stack = stack; exit(); @@ -39133,20 +49321,20 @@ function linkReferencePeek() { return '[' } -var list_1$1 = list$1; - +var list_1 = list; +var flow$2 = containerFlow$1; -function list$1(node, _, context) { +function list(node, _, context) { var exit = context.enter('list'); - var value = containerFlow(node, context); + var value = flow$2(node, context); exit(); return value } -var checkBullet_1 = checkBullet; +var checkBullet_1 = checkBullet$2; -function checkBullet(context) { +function checkBullet$2(context) { var marker = context.options.bullet || '*'; if (marker !== '*' && marker !== '+' && marker !== '-') { @@ -39160,9 +49348,9 @@ function checkBullet(context) { return marker } -var checkListItemIndent_1 = checkListItemIndent; +var checkListItemIndent_1 = checkListItemIndent$2; -function checkListItemIndent(context) { +function checkListItemIndent$2(context) { var style = context.options.listItemIndent || 'tab'; if (style === 1 || style === '1') { @@ -39180,17 +49368,17 @@ function checkListItemIndent(context) { return style } -var listItem_1 = listItem; +var listItem_1 = listItem$1; +var repeat$2 = repeatString; +var checkBullet$1 = checkBullet_1; +var checkListItemIndent$1 = checkListItemIndent_1; +var flow$1 = containerFlow$1; +var indentLines$1 = indentLines_1; - - - - - -function listItem(node, parent, context) { - var bullet = checkBullet_1(context); - var listItemIndent = checkListItemIndent_1(context); +function listItem$1(node, parent, context) { + var bullet = checkBullet$1(context); + var listItemIndent = checkListItemIndent$1(context); var size; var value; var exit; @@ -39214,44 +49402,44 @@ function listItem(node, parent, context) { } exit = context.enter('listItem'); - value = indentLines_1(containerFlow(node, context), map); + value = indentLines$1(flow$1(node, context), map); exit(); return value function map(line, index, blank) { if (index) { - return (blank ? '' : repeatString(' ', size)) + line + return (blank ? '' : repeat$2(' ', size)) + line } - return (blank ? bullet : bullet + repeatString(' ', size - bullet.length)) + line + return (blank ? bullet : bullet + repeat$2(' ', size - bullet.length)) + line } } var paragraph_1 = paragraph; - +var phrasing$1 = containerPhrasing$1; function paragraph(node, _, context) { var exit = context.enter('paragraph'); var subexit = context.enter('phrasing'); - var value = containerPhrasing(node, context, {before: '\n', after: '\n'}); + var value = phrasing$1(node, context, {before: '\n', after: '\n'}); subexit(); exit(); return value } -var root_1 = root$1; - +var root_1 = root; +var flow = containerFlow$1; -function root$1(node, _, context) { - return containerFlow(node, context) +function root(node, _, context) { + return flow(node, context) } -var checkStrong_1 = checkStrong; +var checkStrong_1 = checkStrong$1; -function checkStrong(context) { +function checkStrong$1(context) { var marker = context.options.strong || '*'; if (marker !== '*' && marker !== '_') { @@ -39268,17 +49456,17 @@ function checkStrong(context) { var strong_1 = strong; strong.peek = strongPeek; - - +var checkStrong = checkStrong_1; +var phrasing = containerPhrasing$1; // To do: there are cases where emphasis cannot “form” depending on the // previous or next character of sequences. // There’s no way around that though, except for injecting zero-width stuff. // Do we need to safeguard against that? function strong(node, _, context) { - var marker = checkStrong_1(context); + var marker = checkStrong(context); var exit = context.enter('strong'); - var value = containerPhrasing(node, context, {before: marker, after: marker}); + var value = phrasing(node, context, {before: marker, after: marker}); exit(); return marker + marker + value + marker + marker } @@ -39287,17 +49475,17 @@ function strongPeek(node, _, context) { return context.options.strong || '*' } -var text_1$2 = text$2; +var text_1 = text$1; +var safe = safe_1; - -function text$2(node, parent, context, safeOptions) { - return safe_1(context, node.value, safeOptions) +function text$1(node, parent, context, safeOptions) { + return safe(context, node.value, safeOptions) } -var checkRuleRepeat = checkRule; +var checkRuleRepeat = checkRule$2; -function checkRule(context) { +function checkRule$2(context) { var repetition = context.options.ruleRepetition || 3; if (repetition < 3) { @@ -39327,69 +49515,46 @@ function checkRule$1(context) { return marker } -var thematicBreak_1$1 = thematicBreak$1; - - - +var thematicBreak_1 = thematicBreak; +var repeat$1 = repeatString; +var checkRepeat = checkRuleRepeat; +var checkRule = checkRule_1; -function thematicBreak$1(node, parent, context) { - var value = repeatString( - checkRule_1(context) + (context.options.ruleSpaces ? ' ' : ''), - checkRuleRepeat(context) +function thematicBreak(node, parent, context) { + var value = repeat$1( + checkRule(context) + (context.options.ruleSpaces ? ' ' : ''), + checkRepeat(context) ); return context.options.ruleSpaces ? value.slice(0, -1) : value } -var blockquote$1 = blockquote_1; -var _break$1 = _break; -var code$1 = code_1; -var definition$2 = definition_1$1; -var emphasis$1 = emphasis_1; -var hardBreak$1 = _break; -var heading$1 = heading_1; -var html$1 = html_1; -var image$2 = image_1; -var imageReference$1 = imageReference_1; -var inlineCode$1 = inlineCode_1; -var link$3 = link_1; -var linkReference$1 = linkReference_1; -var list$2 = list_1$1; -var listItem$1 = listItem_1; -var paragraph$1 = paragraph_1; -var root$2 = root_1; -var strong$1 = strong_1; -var text$3 = text_1$2; -var thematicBreak$2 = thematicBreak_1$1; - -var handle = { - blockquote: blockquote$1, - break: _break$1, - code: code$1, - definition: definition$2, - emphasis: emphasis$1, - hardBreak: hardBreak$1, - heading: heading$1, - html: html$1, - image: image$2, - imageReference: imageReference$1, - inlineCode: inlineCode$1, - link: link$3, - linkReference: linkReference$1, - list: list$2, - listItem: listItem$1, - paragraph: paragraph$1, - root: root$2, - strong: strong$1, - text: text$3, - thematicBreak: thematicBreak$2 -}; - -var join$2 = [joinDefaults]; - - - +handle.blockquote = blockquote_1; +handle.break = _break; +handle.code = code_1; +handle.definition = definition_1; +handle.emphasis = emphasis_1; +handle.hardBreak = _break; +handle.heading = heading_1; +handle.html = html_1; +handle.image = image_1; +handle.imageReference = imageReference_1; +handle.inlineCode = inlineCode_1; +handle.link = link_1; +handle.linkReference = linkReference_1; +handle.list = list_1; +handle.listItem = listItem_1; +handle.paragraph = paragraph_1; +handle.root = root_1; +handle.strong = strong_1; +handle.text = text_1; +handle.thematicBreak = thematicBreak_1; + +var join = [joinDefaults]; + +var formatCodeAsIndented = formatCodeAsIndented_1; +var formatHeadingAsSetext = formatHeadingAsSetext_1; function joinDefaults(left, right, parent, context) { if ( @@ -39399,9 +49564,9 @@ function joinDefaults(left, right, parent, context) { Boolean(left.ordered) === Boolean(right.ordered)) || // Indented code after list or another indented code. (right.type === 'code' && - formatCodeAsIndented_1(right, context) && + formatCodeAsIndented(right, context) && (left.type === 'list' || - (left.type === right.type && formatCodeAsIndented_1(left, context)))) + (left.type === right.type && formatCodeAsIndented(left, context)))) ) { return false } @@ -39415,7 +49580,7 @@ function joinDefaults(left, right, parent, context) { (left.type === right.type || right.type === 'definition' || // Paragraph followed by a setext heading. - (right.type === 'heading' && formatHeadingAsSetext_1(right, context))) + (right.type === 'heading' && formatHeadingAsSetext(right, context))) ) { return } @@ -39462,6 +49627,7 @@ var unsafe = [ {character: '"', inConstruct: 'titleQuote'}, // A number sign could start an ATX heading if it starts a line. {atBreak: true, character: '#'}, + {character: '#', inConstruct: 'headingAtx', after: '(?:[\r\n]|$)'}, // Dollar sign and percentage are not used in markdown. // An ampersand could start a character reference. {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'}, @@ -39502,13 +49668,10 @@ var unsafe = [ // Question mark and at sign are not used in markdown for constructs. // A left bracket can start definitions, references, labels, {atBreak: true, character: '['}, - { - character: '[', - inConstruct: ['phrasing', 'label', 'reference'] - }, + {character: '[', inConstruct: ['phrasing', 'label', 'reference']}, // A backslash can start an escape (when followed by punctuation) or a // hard break (when followed by an eol). - {character: '\\', after: '[!-/:-@[-`{-~]'}, + // Note: typical escapes are handled in `safe`! {character: '\\', after: '[\\r\\n]', inConstruct: 'phrasing'}, // A right bracket can exit labels. { @@ -39537,15 +49700,15 @@ var unsafe = [ {atBreak: true, character: '~'} ]; -var lib$8 = toMarkdown; - - - +var lib = toMarkdown$1; +var zwitch = zwitch$1; +var configure = configure_1; +var defaultHandlers = handle; +var defaultJoin = join; +var defaultUnsafe = unsafe; - - -function toMarkdown(tree, options) { +function toMarkdown$1(tree, options) { var settings = options || {}; var context = { enter: enter, @@ -39557,12 +49720,12 @@ function toMarkdown(tree, options) { }; var result; - configure_1$2(context, { - unsafe: unsafe, - join: join$2, - handlers: handle + configure(context, { + unsafe: defaultUnsafe, + join: defaultJoin, + handlers: defaultHandlers }); - configure_1$2(context, settings); + configure(context, settings); if (context.options.tightDefinitions) { context.join = [joinDefinition].concat(context.join); @@ -39611,19 +49774,19 @@ function joinDefinition(left, right) { } } -var mdastUtilToMarkdown = lib$8; +var mdastUtilToMarkdown = lib; -var remarkStringify = stringify$6; +var remarkStringify = stringify$1; +var toMarkdown = mdastUtilToMarkdown; - -function stringify$6(options) { +function stringify$1(options) { var self = this; this.Compiler = compile; function compile(tree) { - return mdastUtilToMarkdown( + return toMarkdown( tree, Object.assign({}, self.data('settings'), options, { // Note: this option is not in the readme. @@ -39635,13 +49798,17 @@ function stringify$6(options) { } } -var remark = unified_1().use(remarkParse).use(remarkStringify).freeze(); +var unified = unified_1; +var parse$1 = remarkParse; +var stringify = remarkStringify; + +var remark = unified().use(parse$1).use(stringify).freeze(); -const name = "remark"; +const name$1 = "remark"; const version$1 = "13.0.0"; -const description = "Markdown processor powered by plugins part of the unified collective"; +const description$1 = "Markdown processor powered by plugins part of the unified collective"; const license = "MIT"; -const keywords$1 = [ +const keywords = [ "unified", "remark", "markdown", @@ -39671,22 +49838,22 @@ const files = [ "index.js", "types/index.d.ts" ]; -const types = "types/index.d.ts"; -const dependencies = { +const types$1 = "types/index.d.ts"; +const dependencies$1 = { "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", unified: "^9.1.0" }; -const scripts = { +const scripts$1 = { test: "tape test.js" }; const xo = false; -var proc = { - name: name, +var require$$3 = { + name: name$1, version: version$1, - description: description, + description: description$1, license: license, - keywords: keywords$1, + keywords: keywords, homepage: homepage, repository: repository, bugs: bugs, @@ -39694,43 +49861,42 @@ var proc = { author: author, contributors: contributors, files: files, - types: types, - dependencies: dependencies, - scripts: scripts, + types: types$1, + dependencies: dependencies$1, + scripts: scripts$1, xo: xo }; -const name$1 = "node-lint-md-cli-rollup"; -const description$1 = "remark packaged for Node.js Markdown linting"; -const version$2 = "2.0.2"; +const name = "node-lint-md-cli-rollup"; +const description = "remark packaged for Node.js Markdown linting"; +const version = "2.0.2"; const devDependencies = { - "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^11.0.1", - rollup: "^2.36.1", + "@rollup/plugin-node-resolve": "^13.0.4", + rollup: "^2.52.7", shx: "^0.3.3" }; -const dependencies$1 = { +const dependencies = { "markdown-extensions": "^1.1.1", remark: "^13.0.0", - "remark-gfm": "^1.0.0", - "remark-lint": "^8.0.0", + "remark-gfm": "^2.0.0", "remark-preset-lint-node": "^3.0.0", "unified-args": "^8.1.0" }; const main = "dist/index.js"; -const scripts$1 = { +const scripts = { build: "npx rollup -c", "build-node": "npm run build && npx shx cp dist/index.js ../lint-md.js" }; -var cli = { - name: name$1, - description: description$1, - version: version$2, +var require$$4 = { + name: name, + description: description, + version: version, devDependencies: devDependencies, - dependencies: dependencies$1, + dependencies: dependencies, main: main, - scripts: scripts$1 + scripts: scripts }; /** @@ -39747,7 +49913,7 @@ var cli = { * * @param {string|Uint8Array|VFile} file */ -function location(file) { +function location$5(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -39824,7 +49990,7 @@ function location(file) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$3 = +const convert$D = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -39844,19 +50010,19 @@ const convert$3 = */ function (test) { if (test === undefined || test === null) { - return ok$1 + return ok$C } if (typeof test === 'string') { - return typeFactory(test) + return typeFactory$C(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory(test) : propsFactory(test) + return Array.isArray(test) ? anyFactory$C(test) : propsFactory$B(test) } if (typeof test === 'function') { - return castFactory(test) + return castFactory$B(test) } throw new Error('Expected function, string, or object as test') @@ -39866,16 +50032,16 @@ const convert$3 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory(tests) { +function anyFactory$C(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$3(tests[index]); + checks[index] = convert$D(tests[index]); } - return castFactory(any) + return castFactory$B(any) /** * @this {unknown} @@ -39900,8 +50066,8 @@ function anyFactory(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory(check) { - return castFactory(all) +function propsFactory$B(check) { + return castFactory$B(all) /** * @param {Node} node @@ -39927,8 +50093,8 @@ function propsFactory(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory(check) { - return castFactory(type) +function typeFactory$C(check) { + return castFactory$B(type) /** * @param {Node} node @@ -39944,7 +50110,7 @@ function typeFactory(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory(check) { +function castFactory$B(check) { return assertion /** @@ -39959,7 +50125,7 @@ function castFactory(check) { } // Utility to return true. -function ok$1() { +function ok$C() { return true } @@ -39967,7 +50133,7 @@ function ok$1() { * @param {string} d * @returns {string} */ -function color$1(d) { +function color$D(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -39980,17 +50146,17 @@ function color$1(d) { /** * Continue traversing as normal */ -const CONTINUE = true; +const CONTINUE$D = true; /** * Do not traverse this node’s children */ -const SKIP = 'skip'; +const SKIP$D = 'skip'; /** * Stop traversing immediately */ -const EXIT = false; +const EXIT$D = false; -const visitParents = +const visitParents$D = /** * @type {( * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & @@ -40015,7 +50181,7 @@ const visitParents = test = null; } - var is = convert$3(test); + var is = convert$D(test); var step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -40042,7 +50208,7 @@ const visitParents = Object.defineProperty(visit, 'name', { value: 'node (' + - color$1(value.type + (name ? '<' + name + '>' : '')) + + color$D(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -40060,14 +50226,14 @@ const visitParents = var grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult(visitor(node, parents)); + result = toResult$C(visitor(node, parents)); - if (result[0] === EXIT) { + if (result[0] === EXIT$D) { return result } } - if (node.children && result[0] !== SKIP) { + if (node.children && result[0] !== SKIP$D) { // @ts-ignore looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-ignore looks like a parent. @@ -40077,7 +50243,7 @@ const visitParents = while (offset > -1 && offset < node.children.length) { subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT) { + if (subresult[0] === EXIT$D) { return subresult } @@ -40096,13 +50262,13 @@ const visitParents = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult(value) { +function toResult$C(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE, value] + return [CONTINUE$D, value] } return [value] @@ -40115,7 +50281,7 @@ function toResult(value) { * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult */ -const visit = +const visit$C = /** * @type {( * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & @@ -40139,7 +50305,7 @@ const visit = test = null; } - visitParents(tree, test, overload, reverse); + visitParents$D(tree, test, overload, reverse); /** * @param {Node} node @@ -40229,7 +50395,7 @@ const visit = * @property {boolean} state */ -const own$6 = {}.hasOwnProperty; +const own$3 = {}.hasOwnProperty; /** * @type {import('unified').Plugin<[Options]>} @@ -40263,7 +50429,7 @@ function messageControl(options) { * @param {VFile} file */ function transformer(tree, file) { - const toOffset = location(file).toOffset; + const toOffset = location$5(file).toOffset; const initial = !reset; const gaps = detectGaps(tree, file); /** @type {Record} */ @@ -40271,7 +50437,7 @@ function messageControl(options) { /** @type {Mark[]} */ const globals = []; - visit(tree, options.test, visitor); + visit$C(tree, options.test, visitor); file.messages = file.messages.filter((m) => filter(m)); @@ -40439,7 +50605,7 @@ function messageControl(options) { // Toggle all known rules. if (!ruleId) { for (ruleId in scope) { - if (own$6.call(scope, ruleId)) { + if (own$3.call(scope, ruleId)) { toggle(point, state, ruleId); } } @@ -40506,7 +50672,7 @@ function detectGaps(tree, file) { let gap; // Find all gaps. - visit(tree, one); + visit$C(tree, one); // Get the end of the document. // This detects if the last node was the last node. @@ -40740,7 +50906,7 @@ function lintMessageControl() { * @param {Middleware} middleware * @param {Callback} callback */ -function wrap$1(middleware, callback) { +function wrap(middleware, callback) { /** @type {boolean} */ let called; @@ -40824,13 +50990,13 @@ function wrap$1(middleware, callback) { * @returns {void} */ -const primitives = new Set(['string', 'number', 'boolean']); +const primitives$F = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule(id, rule) { +function lintRule$F(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -40843,7 +51009,7 @@ function lintRule(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce(ruleId, raw); + const [severity, options] = coerce$G(ruleId, raw); if (!severity) return @@ -40852,7 +51018,7 @@ function lintRule(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$1(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -40882,7 +51048,7 @@ function lintRule(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce(name, value) { +function coerce$G(name, value) { /** @type {unknown[]} */ let result; @@ -40894,7 +51060,7 @@ function coerce(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives.has(typeof value[0]) + primitives$F.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -40989,7 +51155,7 @@ function coerce(name, value) { * ``` */ -const remarkLintFinalNewline = lintRule( +const remarkLintFinalNewline = lintRule$F( 'remark-lint:final-newline', /** @type {import('unified-lint-rule').Rule} */ (_, file) => { @@ -41002,92 +51168,6 @@ const remarkLintFinalNewline = lintRule( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$2(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -41103,13 +51183,13 @@ function wrap$2(middleware, callback) { * @returns {void} */ -const primitives$1 = new Set(['string', 'number', 'boolean']); +const primitives$E = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$1(id, rule) { +function lintRule$E(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -41122,7 +51202,7 @@ function lintRule$1(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$1(ruleId, raw); + const [severity, options] = coerce$F(ruleId, raw); if (!severity) return @@ -41131,7 +51211,7 @@ function lintRule$1(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$2(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -41161,7 +51241,7 @@ function lintRule$1(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$1(name, value) { +function coerce$F(name, value) { /** @type {unknown[]} */ let result; @@ -41173,7 +51253,7 @@ function coerce$1(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$1.has(typeof value[0]) + primitives$E.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -41216,9 +51296,11 @@ function coerce$1(name, value) { return result } +var pluralize = {exports: {}}; + /* global define */ -var pluralize = createCommonjsModule(function (module, exports) { +(function (module, exports) { (function (root, pluralize) { /* istanbul ignore else */ if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { @@ -41715,7 +51797,9 @@ var pluralize = createCommonjsModule(function (module, exports) { return pluralize; }); -}); +}(pluralize)); + +var plural = pluralize.exports; /** * @typedef {import('unist').Node} Node @@ -41727,7 +51811,7 @@ var pluralize = createCommonjsModule(function (module, exports) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$4 = +const convert$C = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -41747,19 +51831,19 @@ const convert$4 = */ function (test) { if (test === undefined || test === null) { - return ok$2 + return ok$B } if (typeof test === 'string') { - return typeFactory$1(test) + return typeFactory$B(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$1(test) : propsFactory$1(test) + return Array.isArray(test) ? anyFactory$B(test) : propsFactory$A(test) } if (typeof test === 'function') { - return castFactory$1(test) + return castFactory$A(test) } throw new Error('Expected function, string, or object as test') @@ -41769,16 +51853,16 @@ const convert$4 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$1(tests) { +function anyFactory$B(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$4(tests[index]); + checks[index] = convert$C(tests[index]); } - return castFactory$1(any) + return castFactory$A(any) /** * @this {unknown} @@ -41803,8 +51887,8 @@ function anyFactory$1(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$1(check) { - return castFactory$1(all) +function propsFactory$A(check) { + return castFactory$A(all) /** * @param {Node} node @@ -41830,8 +51914,8 @@ function propsFactory$1(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$1(check) { - return castFactory$1(type) +function typeFactory$B(check) { + return castFactory$A(type) /** * @param {Node} node @@ -41847,7 +51931,7 @@ function typeFactory$1(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$1(check) { +function castFactory$A(check) { return assertion /** @@ -41862,7 +51946,7 @@ function castFactory$1(check) { } // Utility to return true. -function ok$2() { +function ok$B() { return true } @@ -41870,7 +51954,7 @@ function ok$2() { * @param {string} d * @returns {string} */ -function color$2(d) { +function color$C(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -41883,15 +51967,15 @@ function color$2(d) { /** * Continue traversing as normal */ -const CONTINUE$1 = true; +const CONTINUE$C = true; /** * Do not traverse this node’s children */ -const SKIP$1 = 'skip'; +const SKIP$C = 'skip'; /** * Stop traversing immediately */ -const EXIT$1 = false; +const EXIT$C = false; /** * Visit children of tree which pass a test @@ -41901,7 +51985,7 @@ const EXIT$1 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$1 = +const visitParents$C = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -41923,7 +52007,7 @@ const visitParents$1 = test = null; } - const is = convert$4(test); + const is = convert$C(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -41951,7 +52035,7 @@ const visitParents$1 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$2(value.type + (name ? '<' + name + '>' : '')) + + color$C(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -41969,15 +52053,15 @@ const visitParents$1 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$1(visitor(node, parents)); + result = toResult$B(visitor(node, parents)); - if (result[0] === EXIT$1) { + if (result[0] === EXIT$C) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$1) { + if (node.children && result[0] !== SKIP$C) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -41988,7 +52072,7 @@ const visitParents$1 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$1) { + if (subresult[0] === EXIT$C) { return subresult } @@ -42007,13 +52091,13 @@ const visitParents$1 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$1(value) { +function toResult$B(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$1, value] + return [CONTINUE$C, value] } return [value] @@ -42034,7 +52118,7 @@ function toResult$1(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$1 = +const visit$B = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -42055,7 +52139,7 @@ const visit$1 = test = null; } - visitParents$1(tree, test, overload, reverse); + visitParents$C(tree, test, overload, reverse); /** * @param {Node} node @@ -42111,11 +52195,11 @@ const visit$1 = * 4:2: Incorrect indentation before bullet: remove 1 space */ -const remarkLintListItemBulletIndent = lintRule$1( +const remarkLintListItemBulletIndent = lintRule$E( 'remark-lint:list-item-bullet-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$1(tree, 'list', (list, _, grandparent) => { + visit$B(tree, 'list', (list, _, grandparent) => { let index = -1; while (++index < list.children.length) { @@ -42137,7 +52221,7 @@ const remarkLintListItemBulletIndent = lintRule$1( 'Incorrect indentation before bullet: remove ' + indent + ' ' + - pluralize('space', indent), + plural('space', indent), item.position.start ); } @@ -42147,92 +52231,6 @@ const remarkLintListItemBulletIndent = lintRule$1( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$3(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -42248,13 +52246,13 @@ function wrap$3(middleware, callback) { * @returns {void} */ -const primitives$2 = new Set(['string', 'number', 'boolean']); +const primitives$D = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$2(id, rule) { +function lintRule$D(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -42267,7 +52265,7 @@ function lintRule$2(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$2(ruleId, raw); + const [severity, options] = coerce$E(ruleId, raw); if (!severity) return @@ -42276,7 +52274,7 @@ function lintRule$2(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$3(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -42306,7 +52304,7 @@ function lintRule$2(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$2(name, value) { +function coerce$E(name, value) { /** @type {unknown[]} */ let result; @@ -42318,7 +52316,7 @@ function coerce$2(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$2.has(typeof value[0]) + primitives$D.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -42371,7 +52369,7 @@ function coerce$2(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$5 = +const convert$B = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -42391,19 +52389,19 @@ const convert$5 = */ function (test) { if (test === undefined || test === null) { - return ok$3 + return ok$A } if (typeof test === 'string') { - return typeFactory$2(test) + return typeFactory$A(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$2(test) : propsFactory$2(test) + return Array.isArray(test) ? anyFactory$A(test) : propsFactory$z(test) } if (typeof test === 'function') { - return castFactory$2(test) + return castFactory$z(test) } throw new Error('Expected function, string, or object as test') @@ -42413,16 +52411,16 @@ const convert$5 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$2(tests) { +function anyFactory$A(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$5(tests[index]); + checks[index] = convert$B(tests[index]); } - return castFactory$2(any) + return castFactory$z(any) /** * @this {unknown} @@ -42447,8 +52445,8 @@ function anyFactory$2(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$2(check) { - return castFactory$2(all) +function propsFactory$z(check) { + return castFactory$z(all) /** * @param {Node} node @@ -42474,8 +52472,8 @@ function propsFactory$2(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$2(check) { - return castFactory$2(type) +function typeFactory$A(check) { + return castFactory$z(type) /** * @param {Node} node @@ -42491,7 +52489,7 @@ function typeFactory$2(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$2(check) { +function castFactory$z(check) { return assertion /** @@ -42506,7 +52504,7 @@ function castFactory$2(check) { } // Utility to return true. -function ok$3() { +function ok$A() { return true } @@ -42514,7 +52512,7 @@ function ok$3() { * @param {string} d * @returns {string} */ -function color$3(d) { +function color$B(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -42527,15 +52525,15 @@ function color$3(d) { /** * Continue traversing as normal */ -const CONTINUE$2 = true; +const CONTINUE$B = true; /** * Do not traverse this node’s children */ -const SKIP$2 = 'skip'; +const SKIP$B = 'skip'; /** * Stop traversing immediately */ -const EXIT$2 = false; +const EXIT$B = false; /** * Visit children of tree which pass a test @@ -42545,7 +52543,7 @@ const EXIT$2 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$2 = +const visitParents$B = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -42567,7 +52565,7 @@ const visitParents$2 = test = null; } - const is = convert$5(test); + const is = convert$B(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -42595,7 +52593,7 @@ const visitParents$2 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$3(value.type + (name ? '<' + name + '>' : '')) + + color$B(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -42613,15 +52611,15 @@ const visitParents$2 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$2(visitor(node, parents)); + result = toResult$A(visitor(node, parents)); - if (result[0] === EXIT$2) { + if (result[0] === EXIT$B) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$2) { + if (node.children && result[0] !== SKIP$B) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -42632,7 +52630,7 @@ const visitParents$2 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$2) { + if (subresult[0] === EXIT$B) { return subresult } @@ -42651,13 +52649,13 @@ const visitParents$2 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$2(value) { +function toResult$A(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$2, value] + return [CONTINUE$B, value] } return [value] @@ -42678,7 +52676,7 @@ function toResult$2(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$2 = +const visit$A = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -42699,7 +52697,7 @@ const visit$2 = test = null; } - visitParents$2(tree, test, overload, reverse); + visitParents$B(tree, test, overload, reverse); /** * @param {Node} node @@ -42730,14 +52728,14 @@ const visit$2 = * @property {PositionLike} [position] */ -var pointStart = point$1('start'); +var pointStart$q = point$r('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$1(type) { +function point$r(type) { return point /** @@ -42907,7 +52905,7 @@ function generated(node) { * 1:1: Incorrect list-item indent style `💩`: use either `'tab-size'`, `'space'`, or `'mixed'` */ -const remarkLintListItemIndent = lintRule$2( +const remarkLintListItemIndent = lintRule$D( 'remark-lint:list-item-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'tab-size') => { @@ -42921,7 +52919,7 @@ const remarkLintListItemIndent = lintRule$2( ); } - visit$2(tree, 'list', (node) => { + visit$A(tree, 'list', (node) => { if (generated(node)) return const spread = node.spread; @@ -42930,10 +52928,10 @@ const remarkLintListItemIndent = lintRule$2( while (++index < node.children.length) { const item = node.children[index]; const head = item.children[0]; - const final = pointStart(head); + const final = pointStart$q(head); const marker = value - .slice(pointStart(item).offset, final.offset) + .slice(pointStart$q(item).offset, final.offset) .replace(/\[[x ]?]\s*$/i, ''); const bulletSize = marker.replace(/\s+$/, '').length; @@ -42953,7 +52951,7 @@ const remarkLintListItemIndent = lintRule$2( ' ' + abs + ' ' + - pluralize('space', abs), + plural('space', abs), final ); } @@ -42962,92 +52960,6 @@ const remarkLintListItemIndent = lintRule$2( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$4(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -43063,13 +52975,13 @@ function wrap$4(middleware, callback) { * @returns {void} */ -const primitives$3 = new Set(['string', 'number', 'boolean']); +const primitives$C = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$3(id, rule) { +function lintRule$C(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -43082,7 +52994,7 @@ function lintRule$3(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$3(ruleId, raw); + const [severity, options] = coerce$D(ruleId, raw); if (!severity) return @@ -43091,7 +53003,7 @@ function lintRule$3(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$4(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -43121,7 +53033,7 @@ function lintRule$3(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$3(name, value) { +function coerce$D(name, value) { /** @type {unknown[]} */ let result; @@ -43133,7 +53045,7 @@ function coerce$3(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$3.has(typeof value[0]) + primitives$C.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -43186,7 +53098,7 @@ function coerce$3(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$6 = +const convert$A = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -43206,19 +53118,19 @@ const convert$6 = */ function (test) { if (test === undefined || test === null) { - return ok$4 + return ok$z } if (typeof test === 'string') { - return typeFactory$3(test) + return typeFactory$z(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$3(test) : propsFactory$3(test) + return Array.isArray(test) ? anyFactory$z(test) : propsFactory$y(test) } if (typeof test === 'function') { - return castFactory$3(test) + return castFactory$y(test) } throw new Error('Expected function, string, or object as test') @@ -43228,16 +53140,16 @@ const convert$6 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$3(tests) { +function anyFactory$z(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$6(tests[index]); + checks[index] = convert$A(tests[index]); } - return castFactory$3(any) + return castFactory$y(any) /** * @this {unknown} @@ -43262,8 +53174,8 @@ function anyFactory$3(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$3(check) { - return castFactory$3(all) +function propsFactory$y(check) { + return castFactory$y(all) /** * @param {Node} node @@ -43289,8 +53201,8 @@ function propsFactory$3(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$3(check) { - return castFactory$3(type) +function typeFactory$z(check) { + return castFactory$y(type) /** * @param {Node} node @@ -43306,7 +53218,7 @@ function typeFactory$3(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$3(check) { +function castFactory$y(check) { return assertion /** @@ -43321,7 +53233,7 @@ function castFactory$3(check) { } // Utility to return true. -function ok$4() { +function ok$z() { return true } @@ -43329,7 +53241,7 @@ function ok$4() { * @param {string} d * @returns {string} */ -function color$4(d) { +function color$A(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -43342,15 +53254,15 @@ function color$4(d) { /** * Continue traversing as normal */ -const CONTINUE$3 = true; +const CONTINUE$A = true; /** * Do not traverse this node’s children */ -const SKIP$3 = 'skip'; +const SKIP$A = 'skip'; /** * Stop traversing immediately */ -const EXIT$3 = false; +const EXIT$A = false; /** * Visit children of tree which pass a test @@ -43360,7 +53272,7 @@ const EXIT$3 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$3 = +const visitParents$A = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -43382,7 +53294,7 @@ const visitParents$3 = test = null; } - const is = convert$6(test); + const is = convert$A(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -43410,7 +53322,7 @@ const visitParents$3 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$4(value.type + (name ? '<' + name + '>' : '')) + + color$A(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -43428,15 +53340,15 @@ const visitParents$3 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$3(visitor(node, parents)); + result = toResult$z(visitor(node, parents)); - if (result[0] === EXIT$3) { + if (result[0] === EXIT$A) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$3) { + if (node.children && result[0] !== SKIP$A) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -43447,7 +53359,7 @@ const visitParents$3 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$3) { + if (subresult[0] === EXIT$A) { return subresult } @@ -43466,13 +53378,13 @@ const visitParents$3 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$3(value) { +function toResult$z(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$3, value] + return [CONTINUE$A, value] } return [value] @@ -43493,7 +53405,7 @@ function toResult$3(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$3 = +const visit$z = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -43514,7 +53426,7 @@ const visit$3 = test = null; } - visitParents$3(tree, test, overload, reverse); + visitParents$A(tree, test, overload, reverse); /** * @param {Node} node @@ -43545,15 +53457,15 @@ const visit$3 = * @property {PositionLike} [position] */ -var pointStart$1 = point$2('start'); -var pointEnd = point$2('end'); +var pointStart$p = point$q('start'); +var pointEnd$e = point$q('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$2(type) { +function point$q(type) { return point /** @@ -43589,9 +53501,9 @@ function point$2(type) { * @param {Options} [options] * @returns {string} */ -function toString$4(node, options) { +function toString(node, options) { var {includeImageAlt = true} = options || {}; - return one$1(node, includeImageAlt) + return one(node, includeImageAlt) } /** @@ -43599,7 +53511,7 @@ function toString$4(node, options) { * @param {boolean} includeImageAlt * @returns {string} */ -function one$1(node, includeImageAlt) { +function one(node, includeImageAlt) { return ( (node && typeof node === 'object' && @@ -43608,8 +53520,8 @@ function one$1(node, includeImageAlt) { // @ts-ignore looks like an image. (includeImageAlt ? node.alt : '') || // @ts-ignore looks like a parent. - ('children' in node && all$1(node.children, includeImageAlt)) || - (Array.isArray(node) && all$1(node, includeImageAlt)))) || + ('children' in node && all(node.children, includeImageAlt)) || + (Array.isArray(node) && all(node, includeImageAlt)))) || '' ) } @@ -43619,13 +53531,13 @@ function one$1(node, includeImageAlt) { * @param {boolean} includeImageAlt * @returns {string} */ -function all$1(values, includeImageAlt) { +function all(values, includeImageAlt) { /** @type {Array.} */ var result = []; var index = -1; while (++index < values.length) { - result[index] = one$1(values[index], includeImageAlt); + result[index] = one(values[index], includeImageAlt); } return result.join('') @@ -43673,17 +53585,17 @@ function all$1(values, includeImageAlt) { // See: . const protocol = /^[a-z][a-z+.-]+:\/?/i; -const remarkLintNoAutoLinkWithoutProtocol = lintRule$3( +const remarkLintNoAutoLinkWithoutProtocol = lintRule$C( 'remark-lint:no-auto-link-without-protocol', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$3(tree, 'link', (node) => { + visit$z(tree, 'link', (node) => { if ( !generated(node) && - pointStart$1(node).column === pointStart$1(node.children[0]).column - 1 && - pointEnd(node).column === - pointEnd(node.children[node.children.length - 1]).column + 1 && - !protocol.test(toString$4(node)) + pointStart$p(node).column === pointStart$p(node.children[0]).column - 1 && + pointEnd$e(node).column === + pointEnd$e(node.children[node.children.length - 1]).column + 1 && + !protocol.test(toString(node)) ) { file.message('All automatic links must start with a protocol', node); } @@ -43691,92 +53603,6 @@ const remarkLintNoAutoLinkWithoutProtocol = lintRule$3( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$5(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -43792,13 +53618,13 @@ function wrap$5(middleware, callback) { * @returns {void} */ -const primitives$4 = new Set(['string', 'number', 'boolean']); +const primitives$B = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$4(id, rule) { +function lintRule$B(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -43811,7 +53637,7 @@ function lintRule$4(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$4(ruleId, raw); + const [severity, options] = coerce$C(ruleId, raw); if (!severity) return @@ -43820,7 +53646,7 @@ function lintRule$4(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$5(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -43850,7 +53676,7 @@ function lintRule$4(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$4(name, value) { +function coerce$C(name, value) { /** @type {unknown[]} */ let result; @@ -43862,7 +53688,7 @@ function coerce$4(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$4.has(typeof value[0]) + primitives$B.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -43919,7 +53745,7 @@ function coerce$4(name, value) { * * @param {string|Uint8Array|VFile} file */ -function location$1(file) { +function location$4(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -43996,7 +53822,7 @@ function location$1(file) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$7 = +const convert$z = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -44016,19 +53842,19 @@ const convert$7 = */ function (test) { if (test === undefined || test === null) { - return ok$5 + return ok$y } if (typeof test === 'string') { - return typeFactory$4(test) + return typeFactory$y(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$4(test) : propsFactory$4(test) + return Array.isArray(test) ? anyFactory$y(test) : propsFactory$x(test) } if (typeof test === 'function') { - return castFactory$4(test) + return castFactory$x(test) } throw new Error('Expected function, string, or object as test') @@ -44038,16 +53864,16 @@ const convert$7 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$4(tests) { +function anyFactory$y(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$7(tests[index]); + checks[index] = convert$z(tests[index]); } - return castFactory$4(any) + return castFactory$x(any) /** * @this {unknown} @@ -44072,8 +53898,8 @@ function anyFactory$4(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$4(check) { - return castFactory$4(all) +function propsFactory$x(check) { + return castFactory$x(all) /** * @param {Node} node @@ -44099,8 +53925,8 @@ function propsFactory$4(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$4(check) { - return castFactory$4(type) +function typeFactory$y(check) { + return castFactory$x(type) /** * @param {Node} node @@ -44116,7 +53942,7 @@ function typeFactory$4(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$4(check) { +function castFactory$x(check) { return assertion /** @@ -44131,7 +53957,7 @@ function castFactory$4(check) { } // Utility to return true. -function ok$5() { +function ok$y() { return true } @@ -44139,7 +53965,7 @@ function ok$5() { * @param {string} d * @returns {string} */ -function color$5(d) { +function color$z(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -44152,15 +53978,15 @@ function color$5(d) { /** * Continue traversing as normal */ -const CONTINUE$4 = true; +const CONTINUE$z = true; /** * Do not traverse this node’s children */ -const SKIP$4 = 'skip'; +const SKIP$z = 'skip'; /** * Stop traversing immediately */ -const EXIT$4 = false; +const EXIT$z = false; /** * Visit children of tree which pass a test @@ -44170,7 +53996,7 @@ const EXIT$4 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$4 = +const visitParents$z = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -44192,7 +54018,7 @@ const visitParents$4 = test = null; } - const is = convert$7(test); + const is = convert$z(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -44220,7 +54046,7 @@ const visitParents$4 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$5(value.type + (name ? '<' + name + '>' : '')) + + color$z(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -44238,15 +54064,15 @@ const visitParents$4 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$4(visitor(node, parents)); + result = toResult$y(visitor(node, parents)); - if (result[0] === EXIT$4) { + if (result[0] === EXIT$z) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$4) { + if (node.children && result[0] !== SKIP$z) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -44257,7 +54083,7 @@ const visitParents$4 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$4) { + if (subresult[0] === EXIT$z) { return subresult } @@ -44276,13 +54102,13 @@ const visitParents$4 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$4(value) { +function toResult$y(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$4, value] + return [CONTINUE$z, value] } return [value] @@ -44303,7 +54129,7 @@ function toResult$4(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$4 = +const visit$y = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -44324,7 +54150,7 @@ const visit$4 = test = null; } - visitParents$4(tree, test, overload, reverse); + visitParents$z(tree, test, overload, reverse); /** * @param {Node} node @@ -44355,15 +54181,15 @@ const visit$4 = * @property {PositionLike} [position] */ -var pointStart$2 = point$3('start'); -var pointEnd$1 = point$3('end'); +var pointStart$o = point$p('start'); +var pointEnd$d = point$p('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$3(type) { +function point$p(type) { return point /** @@ -44442,23 +54268,23 @@ function point$3(type) { * 3:1: Missing marker in block quote */ -const remarkLintNoBlockquoteWithoutMarker = lintRule$4( +const remarkLintNoBlockquoteWithoutMarker = lintRule$B( 'remark-lint:no-blockquote-without-marker', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { const value = String(file); - const loc = location$1(file); + const loc = location$4(file); - visit$4(tree, 'blockquote', (node) => { + visit$y(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$1(child).line; - const column = pointStart$2(child).column; - let line = pointStart$2(child).line; + const end = pointEnd$d(child).line; + const column = pointStart$o(child).column; + let line = pointStart$o(child).line; // Skip past the first line. while (++line <= end) { @@ -44480,92 +54306,6 @@ const remarkLintNoBlockquoteWithoutMarker = lintRule$4( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$6(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -44581,13 +54321,13 @@ function wrap$6(middleware, callback) { * @returns {void} */ -const primitives$5 = new Set(['string', 'number', 'boolean']); +const primitives$A = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$5(id, rule) { +function lintRule$A(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -44600,7 +54340,7 @@ function lintRule$5(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$5(ruleId, raw); + const [severity, options] = coerce$B(ruleId, raw); if (!severity) return @@ -44609,7 +54349,7 @@ function lintRule$5(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$6(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -44639,7 +54379,7 @@ function lintRule$5(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$5(name, value) { +function coerce$B(name, value) { /** @type {unknown[]} */ let result; @@ -44651,7 +54391,7 @@ function coerce$5(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$5.has(typeof value[0]) + primitives$A.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -44704,7 +54444,7 @@ function coerce$5(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$8 = +const convert$y = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -44724,19 +54464,19 @@ const convert$8 = */ function (test) { if (test === undefined || test === null) { - return ok$6 + return ok$x } if (typeof test === 'string') { - return typeFactory$5(test) + return typeFactory$x(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$5(test) : propsFactory$5(test) + return Array.isArray(test) ? anyFactory$x(test) : propsFactory$w(test) } if (typeof test === 'function') { - return castFactory$5(test) + return castFactory$w(test) } throw new Error('Expected function, string, or object as test') @@ -44746,16 +54486,16 @@ const convert$8 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$5(tests) { +function anyFactory$x(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$8(tests[index]); + checks[index] = convert$y(tests[index]); } - return castFactory$5(any) + return castFactory$w(any) /** * @this {unknown} @@ -44780,8 +54520,8 @@ function anyFactory$5(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$5(check) { - return castFactory$5(all) +function propsFactory$w(check) { + return castFactory$w(all) /** * @param {Node} node @@ -44807,8 +54547,8 @@ function propsFactory$5(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$5(check) { - return castFactory$5(type) +function typeFactory$x(check) { + return castFactory$w(type) /** * @param {Node} node @@ -44824,7 +54564,7 @@ function typeFactory$5(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$5(check) { +function castFactory$w(check) { return assertion /** @@ -44839,7 +54579,7 @@ function castFactory$5(check) { } // Utility to return true. -function ok$6() { +function ok$x() { return true } @@ -44847,7 +54587,7 @@ function ok$6() { * @param {string} d * @returns {string} */ -function color$6(d) { +function color$y(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -44860,15 +54600,15 @@ function color$6(d) { /** * Continue traversing as normal */ -const CONTINUE$5 = true; +const CONTINUE$y = true; /** * Do not traverse this node’s children */ -const SKIP$5 = 'skip'; +const SKIP$y = 'skip'; /** * Stop traversing immediately */ -const EXIT$5 = false; +const EXIT$y = false; /** * Visit children of tree which pass a test @@ -44878,7 +54618,7 @@ const EXIT$5 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$5 = +const visitParents$y = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -44900,7 +54640,7 @@ const visitParents$5 = test = null; } - const is = convert$8(test); + const is = convert$y(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -44928,7 +54668,7 @@ const visitParents$5 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$6(value.type + (name ? '<' + name + '>' : '')) + + color$y(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -44946,15 +54686,15 @@ const visitParents$5 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$5(visitor(node, parents)); + result = toResult$x(visitor(node, parents)); - if (result[0] === EXIT$5) { + if (result[0] === EXIT$y) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$5) { + if (node.children && result[0] !== SKIP$y) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -44965,7 +54705,7 @@ const visitParents$5 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$5) { + if (subresult[0] === EXIT$y) { return subresult } @@ -44984,13 +54724,13 @@ const visitParents$5 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$5(value) { +function toResult$x(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$5, value] + return [CONTINUE$y, value] } return [value] @@ -45011,7 +54751,7 @@ function toResult$5(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$5 = +const visit$x = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -45032,7 +54772,7 @@ const visit$5 = test = null; } - visitParents$5(tree, test, overload, reverse); + visitParents$y(tree, test, overload, reverse); /** * @param {Node} node @@ -45063,15 +54803,15 @@ const visit$5 = * @property {PositionLike} [position] */ -var pointStart$3 = point$4('start'); -var pointEnd$2 = point$4('end'); +var pointStart$n = point$o('start'); +var pointEnd$c = point$o('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$4(type) { +function point$o(type) { return point /** @@ -45093,62 +54833,6 @@ function point$4(type) { } } -/** - * @typedef Options - * @property {boolean} [includeImageAlt=true] - */ - -/** - * Get the text content of a node. - * Prefer the node’s plain-text fields, otherwise serialize its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} node - * @param {Options} [options] - * @returns {string} - */ -function toString$5(node, options) { - var {includeImageAlt = true} = options || {}; - return one$2(node, includeImageAlt) -} - -/** - * @param {unknown} node - * @param {boolean} includeImageAlt - * @returns {string} - */ -function one$2(node, includeImageAlt) { - return ( - (node && - typeof node === 'object' && - // @ts-ignore looks like a literal. - (node.value || - // @ts-ignore looks like an image. - (includeImageAlt ? node.alt : '') || - // @ts-ignore looks like a parent. - ('children' in node && all$2(node.children, includeImageAlt)) || - (Array.isArray(node) && all$2(node, includeImageAlt)))) || - '' - ) -} - -/** - * @param {Array.} values - * @param {boolean} includeImageAlt - * @returns {string} - */ -function all$2(values, includeImageAlt) { - /** @type {Array.} */ - var result = []; - var index = -1; - - while (++index < values.length) { - result[index] = one$2(values[index], includeImageAlt); - } - - return result.join('') -} - /** * @author Titus Wormer * @copyright 2015 Titus Wormer @@ -45185,18 +54869,18 @@ function all$2(values, includeImageAlt) { * 1:1-1:19: Don’t use literal URLs without angle brackets */ -const remarkLintNoLiteralUrls = lintRule$5( +const remarkLintNoLiteralUrls = lintRule$A( 'remark-lint:no-literal-urls', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$5(tree, 'link', (node) => { - const value = toString$5(node); + visit$x(tree, 'link', (node) => { + const value = toString(node); if ( !generated(node) && - pointStart$3(node).column === pointStart$3(node.children[0]).column && - pointEnd$2(node).column === - pointEnd$2(node.children[node.children.length - 1]).column && + pointStart$n(node).column === pointStart$n(node.children[0]).column && + pointEnd$c(node).column === + pointEnd$c(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); @@ -45205,92 +54889,6 @@ const remarkLintNoLiteralUrls = lintRule$5( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$7(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -45306,13 +54904,13 @@ function wrap$7(middleware, callback) { * @returns {void} */ -const primitives$6 = new Set(['string', 'number', 'boolean']); +const primitives$z = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$6(id, rule) { +function lintRule$z(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -45325,7 +54923,7 @@ function lintRule$6(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$6(ruleId, raw); + const [severity, options] = coerce$A(ruleId, raw); if (!severity) return @@ -45334,7 +54932,7 @@ function lintRule$6(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$7(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -45364,7 +54962,7 @@ function lintRule$6(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$6(name, value) { +function coerce$A(name, value) { /** @type {unknown[]} */ let result; @@ -45376,7 +54974,7 @@ function coerce$6(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$6.has(typeof value[0]) + primitives$z.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -45429,7 +55027,7 @@ function coerce$6(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$9 = +const convert$x = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -45449,19 +55047,19 @@ const convert$9 = */ function (test) { if (test === undefined || test === null) { - return ok$7 + return ok$w } if (typeof test === 'string') { - return typeFactory$6(test) + return typeFactory$w(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$6(test) : propsFactory$6(test) + return Array.isArray(test) ? anyFactory$w(test) : propsFactory$v(test) } if (typeof test === 'function') { - return castFactory$6(test) + return castFactory$v(test) } throw new Error('Expected function, string, or object as test') @@ -45471,16 +55069,16 @@ const convert$9 = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$6(tests) { +function anyFactory$w(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$9(tests[index]); + checks[index] = convert$x(tests[index]); } - return castFactory$6(any) + return castFactory$v(any) /** * @this {unknown} @@ -45505,8 +55103,8 @@ function anyFactory$6(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$6(check) { - return castFactory$6(all) +function propsFactory$v(check) { + return castFactory$v(all) /** * @param {Node} node @@ -45532,8 +55130,8 @@ function propsFactory$6(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$6(check) { - return castFactory$6(type) +function typeFactory$w(check) { + return castFactory$v(type) /** * @param {Node} node @@ -45549,7 +55147,7 @@ function typeFactory$6(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$6(check) { +function castFactory$v(check) { return assertion /** @@ -45564,7 +55162,7 @@ function castFactory$6(check) { } // Utility to return true. -function ok$7() { +function ok$w() { return true } @@ -45572,7 +55170,7 @@ function ok$7() { * @param {string} d * @returns {string} */ -function color$7(d) { +function color$x(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -45585,15 +55183,15 @@ function color$7(d) { /** * Continue traversing as normal */ -const CONTINUE$6 = true; +const CONTINUE$x = true; /** * Do not traverse this node’s children */ -const SKIP$6 = 'skip'; +const SKIP$x = 'skip'; /** * Stop traversing immediately */ -const EXIT$6 = false; +const EXIT$x = false; /** * Visit children of tree which pass a test @@ -45603,7 +55201,7 @@ const EXIT$6 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$6 = +const visitParents$x = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -45625,7 +55223,7 @@ const visitParents$6 = test = null; } - const is = convert$9(test); + const is = convert$x(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -45653,7 +55251,7 @@ const visitParents$6 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$7(value.type + (name ? '<' + name + '>' : '')) + + color$x(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -45671,15 +55269,15 @@ const visitParents$6 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$6(visitor(node, parents)); + result = toResult$w(visitor(node, parents)); - if (result[0] === EXIT$6) { + if (result[0] === EXIT$x) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$6) { + if (node.children && result[0] !== SKIP$x) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -45690,7 +55288,7 @@ const visitParents$6 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$6) { + if (subresult[0] === EXIT$x) { return subresult } @@ -45709,13 +55307,13 @@ const visitParents$6 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$6(value) { +function toResult$w(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$6, value] + return [CONTINUE$x, value] } return [value] @@ -45736,7 +55334,7 @@ function toResult$6(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$6 = +const visit$w = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -45757,7 +55355,7 @@ const visit$6 = test = null; } - visitParents$6(tree, test, overload, reverse); + visitParents$x(tree, test, overload, reverse); /** * @param {Node} node @@ -45788,14 +55386,14 @@ const visit$6 = * @property {PositionLike} [position] */ -var pointStart$4 = point$5('start'); +var pointStart$m = point$n('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$5(type) { +function point$n(type) { return point /** @@ -45874,7 +55472,7 @@ function point$5(type) { * 1:1: Incorrect ordered list item marker style `💩`: use either `'.'` or `')'` */ -const remarkLintOrderedListMarkerStyle = lintRule$6( +const remarkLintOrderedListMarkerStyle = lintRule$z( 'remark-lint:ordered-list-marker-style', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { @@ -45888,7 +55486,7 @@ const remarkLintOrderedListMarkerStyle = lintRule$6( ); } - visit$6(tree, 'list', (node) => { + visit$w(tree, 'list', (node) => { let index = -1; if (!node.ordered) return @@ -45900,8 +55498,8 @@ const remarkLintOrderedListMarkerStyle = lintRule$6( const marker = /** @type {Marker} */ ( value .slice( - pointStart$4(child).offset, - pointStart$4(child.children[0]).offset + pointStart$m(child).offset, + pointStart$m(child.children[0]).offset ) .replace(/\s|\d/g, '') .replace(/\[[x ]?]\s*$/i, '') @@ -45918,92 +55516,6 @@ const remarkLintOrderedListMarkerStyle = lintRule$6( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$8(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -46019,13 +55531,13 @@ function wrap$8(middleware, callback) { * @returns {void} */ -const primitives$7 = new Set(['string', 'number', 'boolean']); +const primitives$y = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$7(id, rule) { +function lintRule$y(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -46038,7 +55550,7 @@ function lintRule$7(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$7(ruleId, raw); + const [severity, options] = coerce$z(ruleId, raw); if (!severity) return @@ -46047,7 +55559,7 @@ function lintRule$7(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$8(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -46077,7 +55589,7 @@ function lintRule$7(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$7(name, value) { +function coerce$z(name, value) { /** @type {unknown[]} */ let result; @@ -46089,7 +55601,7 @@ function coerce$7(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$7.has(typeof value[0]) + primitives$y.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -46142,7 +55654,7 @@ function coerce$7(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$a = +const convert$w = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -46162,19 +55674,19 @@ const convert$a = */ function (test) { if (test === undefined || test === null) { - return ok$8 + return ok$v } if (typeof test === 'string') { - return typeFactory$7(test) + return typeFactory$v(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$7(test) : propsFactory$7(test) + return Array.isArray(test) ? anyFactory$v(test) : propsFactory$u(test) } if (typeof test === 'function') { - return castFactory$7(test) + return castFactory$u(test) } throw new Error('Expected function, string, or object as test') @@ -46184,16 +55696,16 @@ const convert$a = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$7(tests) { +function anyFactory$v(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$a(tests[index]); + checks[index] = convert$w(tests[index]); } - return castFactory$7(any) + return castFactory$u(any) /** * @this {unknown} @@ -46218,8 +55730,8 @@ function anyFactory$7(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$7(check) { - return castFactory$7(all) +function propsFactory$u(check) { + return castFactory$u(all) /** * @param {Node} node @@ -46245,8 +55757,8 @@ function propsFactory$7(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$7(check) { - return castFactory$7(type) +function typeFactory$v(check) { + return castFactory$u(type) /** * @param {Node} node @@ -46262,7 +55774,7 @@ function typeFactory$7(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$7(check) { +function castFactory$u(check) { return assertion /** @@ -46277,7 +55789,7 @@ function castFactory$7(check) { } // Utility to return true. -function ok$8() { +function ok$v() { return true } @@ -46285,7 +55797,7 @@ function ok$8() { * @param {string} d * @returns {string} */ -function color$8(d) { +function color$w(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -46298,15 +55810,15 @@ function color$8(d) { /** * Continue traversing as normal */ -const CONTINUE$7 = true; +const CONTINUE$w = true; /** * Do not traverse this node’s children */ -const SKIP$7 = 'skip'; +const SKIP$w = 'skip'; /** * Stop traversing immediately */ -const EXIT$7 = false; +const EXIT$w = false; /** * Visit children of tree which pass a test @@ -46316,7 +55828,7 @@ const EXIT$7 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$7 = +const visitParents$w = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -46338,7 +55850,7 @@ const visitParents$7 = test = null; } - const is = convert$a(test); + const is = convert$w(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -46366,7 +55878,7 @@ const visitParents$7 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$8(value.type + (name ? '<' + name + '>' : '')) + + color$w(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -46384,15 +55896,15 @@ const visitParents$7 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$7(visitor(node, parents)); + result = toResult$v(visitor(node, parents)); - if (result[0] === EXIT$7) { + if (result[0] === EXIT$w) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$7) { + if (node.children && result[0] !== SKIP$w) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -46403,7 +55915,7 @@ const visitParents$7 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$7) { + if (subresult[0] === EXIT$w) { return subresult } @@ -46422,13 +55934,13 @@ const visitParents$7 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$7(value) { +function toResult$v(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$7, value] + return [CONTINUE$w, value] } return [value] @@ -46449,7 +55961,7 @@ function toResult$7(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$7 = +const visit$v = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -46470,7 +55982,7 @@ const visit$7 = test = null; } - visitParents$7(tree, test, overload, reverse); + visitParents$w(tree, test, overload, reverse); /** * @param {Node} node @@ -46501,15 +56013,15 @@ const visit$7 = * @property {PositionLike} [position] */ -var pointStart$5 = point$6('start'); -var pointEnd$3 = point$6('end'); +var pointStart$l = point$m('start'); +var pointEnd$b = point$m('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$6(type) { +function point$m(type) { return point /** @@ -46557,16 +56069,16 @@ function point$6(type) { * 1:12-2:1: Use two spaces for hard line breaks */ -const remarkLintHardBreakSpaces = lintRule$7( +const remarkLintHardBreakSpaces = lintRule$y( 'remark-lint:hard-break-spaces', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { const value = String(file); - visit$7(tree, 'break', (node) => { + visit$v(tree, 'break', (node) => { if (!generated(node)) { const slice = value - .slice(pointStart$5(node).offset, pointEnd$3(node).offset) + .slice(pointStart$l(node).offset, pointEnd$b(node).offset) .split('\n', 1)[0] .replace(/\r$/, ''); @@ -46578,92 +56090,6 @@ const remarkLintHardBreakSpaces = lintRule$7( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$9(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -46679,13 +56105,13 @@ function wrap$9(middleware, callback) { * @returns {void} */ -const primitives$8 = new Set(['string', 'number', 'boolean']); +const primitives$x = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$8(id, rule) { +function lintRule$x(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -46698,7 +56124,7 @@ function lintRule$8(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$8(ruleId, raw); + const [severity, options] = coerce$y(ruleId, raw); if (!severity) return @@ -46707,7 +56133,7 @@ function lintRule$8(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$9(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -46737,7 +56163,7 @@ function lintRule$8(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$8(name, value) { +function coerce$y(name, value) { /** @type {unknown[]} */ let result; @@ -46749,7 +56175,7 @@ function coerce$8(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$8.has(typeof value[0]) + primitives$x.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -46806,14 +56232,14 @@ function coerce$8(name, value) { * @property {PositionLike} [position] */ -var pointStart$6 = point$7('start'); +var pointStart$k = point$l('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$7(type) { +function point$l(type) { return point /** @@ -46835,7 +56261,7 @@ function point$7(type) { } } -var own$7 = {}.hasOwnProperty; +var own$2 = {}.hasOwnProperty; /** * @typedef {import('unist').Node} Node @@ -46857,21 +56283,21 @@ function stringifyPosition(value) { } // Node. - if (own$7.call(value, 'position') || own$7.call(value, 'type')) { + if (own$2.call(value, 'position') || own$2.call(value, 'type')) { // @ts-ignore looks like a node. - return position$1(value.position) + return position$2(value.position) } // Position. - if (own$7.call(value, 'start') || own$7.call(value, 'end')) { + if (own$2.call(value, 'start') || own$2.call(value, 'end')) { // @ts-ignore looks like a position. - return position$1(value) + return position$2(value) } // Point. - if (own$7.call(value, 'line') || own$7.call(value, 'column')) { + if (own$2.call(value, 'line') || own$2.call(value, 'column')) { // @ts-ignore looks like a point. - return point$8(value) + return point$k(value) } // ? @@ -46882,23 +56308,23 @@ function stringifyPosition(value) { * @param {Point} point * @returns {string} */ -function point$8(point) { - return index$1(point && point.line) + ':' + index$1(point && point.column) +function point$k(point) { + return index(point && point.line) + ':' + index(point && point.column) } /** * @param {Position} pos * @returns {string} */ -function position$1(pos) { - return point$8(pos && pos.start) + '-' + point$8(pos && pos.end) +function position$2(pos) { + return point$k(pos && pos.start) + '-' + point$k(pos && pos.end) } /** * @param {number} value * @returns {number} */ -function index$1(value) { +function index(value) { return value && typeof value === 'number' ? value : 1 } @@ -46912,7 +56338,7 @@ function index$1(value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$b = +const convert$v = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -46932,19 +56358,19 @@ const convert$b = */ function (test) { if (test === undefined || test === null) { - return ok$9 + return ok$u } if (typeof test === 'string') { - return typeFactory$8(test) + return typeFactory$u(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$8(test) : propsFactory$8(test) + return Array.isArray(test) ? anyFactory$u(test) : propsFactory$t(test) } if (typeof test === 'function') { - return castFactory$8(test) + return castFactory$t(test) } throw new Error('Expected function, string, or object as test') @@ -46954,16 +56380,16 @@ const convert$b = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$8(tests) { +function anyFactory$u(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$b(tests[index]); + checks[index] = convert$v(tests[index]); } - return castFactory$8(any) + return castFactory$t(any) /** * @this {unknown} @@ -46988,8 +56414,8 @@ function anyFactory$8(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$8(check) { - return castFactory$8(all) +function propsFactory$t(check) { + return castFactory$t(all) /** * @param {Node} node @@ -47015,8 +56441,8 @@ function propsFactory$8(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$8(check) { - return castFactory$8(type) +function typeFactory$u(check) { + return castFactory$t(type) /** * @param {Node} node @@ -47032,7 +56458,7 @@ function typeFactory$8(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$8(check) { +function castFactory$t(check) { return assertion /** @@ -47047,7 +56473,7 @@ function castFactory$8(check) { } // Utility to return true. -function ok$9() { +function ok$u() { return true } @@ -47055,7 +56481,7 @@ function ok$9() { * @param {string} d * @returns {string} */ -function color$9(d) { +function color$v(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -47068,15 +56494,15 @@ function color$9(d) { /** * Continue traversing as normal */ -const CONTINUE$8 = true; +const CONTINUE$v = true; /** * Do not traverse this node’s children */ -const SKIP$8 = 'skip'; +const SKIP$v = 'skip'; /** * Stop traversing immediately */ -const EXIT$8 = false; +const EXIT$v = false; /** * Visit children of tree which pass a test @@ -47086,7 +56512,7 @@ const EXIT$8 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$8 = +const visitParents$v = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -47108,7 +56534,7 @@ const visitParents$8 = test = null; } - const is = convert$b(test); + const is = convert$v(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -47136,7 +56562,7 @@ const visitParents$8 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$9(value.type + (name ? '<' + name + '>' : '')) + + color$v(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -47154,15 +56580,15 @@ const visitParents$8 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$8(visitor(node, parents)); + result = toResult$u(visitor(node, parents)); - if (result[0] === EXIT$8) { + if (result[0] === EXIT$v) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$8) { + if (node.children && result[0] !== SKIP$v) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -47173,7 +56599,7 @@ const visitParents$8 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$8) { + if (subresult[0] === EXIT$v) { return subresult } @@ -47192,13 +56618,13 @@ const visitParents$8 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$8(value) { +function toResult$u(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$8, value] + return [CONTINUE$v, value] } return [value] @@ -47219,7 +56645,7 @@ function toResult$8(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$8 = +const visit$u = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -47240,7 +56666,7 @@ const visit$8 = test = null; } - visitParents$8(tree, test, overload, reverse); + visitParents$v(tree, test, overload, reverse); /** * @param {Node} node @@ -47283,14 +56709,14 @@ const visit$8 = * 2:1-2:11: Do not use definitions with the same identifier (1:1) */ -const remarkLintNoDuplicateDefinitions = lintRule$8( +const remarkLintNoDuplicateDefinitions = lintRule$x( 'remark-lint:no-duplicate-definitions', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { /** @type {Record} */ const map = Object.create(null); - visit$8(tree, (node) => { + visit$u(tree, (node) => { if ( (node.type === 'definition' || node.type === 'footnoteDefinition') && !generated(node) @@ -47307,98 +56733,12 @@ const remarkLintNoDuplicateDefinitions = lintRule$8( ); } - map[identifier] = stringifyPosition(pointStart$6(node)); + map[identifier] = stringifyPosition(pointStart$k(node)); } }); } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$a(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -47414,13 +56754,13 @@ function wrap$a(middleware, callback) { * @returns {void} */ -const primitives$9 = new Set(['string', 'number', 'boolean']); +const primitives$w = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$9(id, rule) { +function lintRule$w(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -47433,7 +56773,7 @@ function lintRule$9(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$9(ruleId, raw); + const [severity, options] = coerce$x(ruleId, raw); if (!severity) return @@ -47442,7 +56782,7 @@ function lintRule$9(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$a(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -47472,7 +56812,7 @@ function lintRule$9(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$9(name, value) { +function coerce$x(name, value) { /** @type {unknown[]} */ let result; @@ -47484,7 +56824,7 @@ function coerce$9(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$9.has(typeof value[0]) + primitives$w.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -47537,7 +56877,7 @@ function coerce$9(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$c = +const convert$u = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -47557,19 +56897,19 @@ const convert$c = */ function (test) { if (test === undefined || test === null) { - return ok$a + return ok$t } if (typeof test === 'string') { - return typeFactory$9(test) + return typeFactory$t(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$9(test) : propsFactory$9(test) + return Array.isArray(test) ? anyFactory$t(test) : propsFactory$s(test) } if (typeof test === 'function') { - return castFactory$9(test) + return castFactory$s(test) } throw new Error('Expected function, string, or object as test') @@ -47579,16 +56919,16 @@ const convert$c = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$9(tests) { +function anyFactory$t(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$c(tests[index]); + checks[index] = convert$u(tests[index]); } - return castFactory$9(any) + return castFactory$s(any) /** * @this {unknown} @@ -47613,8 +56953,8 @@ function anyFactory$9(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$9(check) { - return castFactory$9(all) +function propsFactory$s(check) { + return castFactory$s(all) /** * @param {Node} node @@ -47640,8 +56980,8 @@ function propsFactory$9(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$9(check) { - return castFactory$9(type) +function typeFactory$t(check) { + return castFactory$s(type) /** * @param {Node} node @@ -47657,7 +56997,7 @@ function typeFactory$9(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$9(check) { +function castFactory$s(check) { return assertion /** @@ -47672,7 +57012,7 @@ function castFactory$9(check) { } // Utility to return true. -function ok$a() { +function ok$t() { return true } @@ -47680,7 +57020,7 @@ function ok$a() { * @param {string} d * @returns {string} */ -function color$a(d) { +function color$u(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -47693,15 +57033,15 @@ function color$a(d) { /** * Continue traversing as normal */ -const CONTINUE$9 = true; +const CONTINUE$u = true; /** * Do not traverse this node’s children */ -const SKIP$9 = 'skip'; +const SKIP$u = 'skip'; /** * Stop traversing immediately */ -const EXIT$9 = false; +const EXIT$u = false; /** * Visit children of tree which pass a test @@ -47711,7 +57051,7 @@ const EXIT$9 = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$9 = +const visitParents$u = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -47733,7 +57073,7 @@ const visitParents$9 = test = null; } - const is = convert$c(test); + const is = convert$u(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -47761,7 +57101,7 @@ const visitParents$9 = Object.defineProperty(visit, 'name', { value: 'node (' + - color$a(value.type + (name ? '<' + name + '>' : '')) + + color$u(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -47779,15 +57119,15 @@ const visitParents$9 = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$9(visitor(node, parents)); + result = toResult$t(visitor(node, parents)); - if (result[0] === EXIT$9) { + if (result[0] === EXIT$u) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$9) { + if (node.children && result[0] !== SKIP$u) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -47798,7 +57138,7 @@ const visitParents$9 = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$9) { + if (subresult[0] === EXIT$u) { return subresult } @@ -47817,13 +57157,13 @@ const visitParents$9 = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$9(value) { +function toResult$t(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$9, value] + return [CONTINUE$u, value] } return [value] @@ -47844,7 +57184,7 @@ function toResult$9(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$9 = +const visit$t = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -47865,7 +57205,7 @@ const visit$9 = test = null; } - visitParents$9(tree, test, overload, reverse); + visitParents$u(tree, test, overload, reverse); /** * @param {Node} node @@ -47953,15 +57293,15 @@ function consolidate(depth, relative) { * @property {PositionLike} [position] */ -var pointStart$7 = point$9('start'); -var pointEnd$4 = point$9('end'); +var pointStart$j = point$j('start'); +var pointEnd$a = point$j('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$9(type) { +function point$j(type) { return point /** @@ -48035,11 +57375,11 @@ function point$9(type) { * #·· */ -const remarkLintNoHeadingContentIndent = lintRule$9( +const remarkLintNoHeadingContentIndent = lintRule$w( 'remark-lint:no-heading-content-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$9(tree, 'heading', (node) => { + visit$t(tree, 'heading', (node) => { if (generated(node)) { return } @@ -48047,23 +57387,23 @@ const remarkLintNoHeadingContentIndent = lintRule$9( const type = headingStyle(node, 'atx'); if (type === 'atx' || type === 'atx-closed') { - const head = pointStart$7(node.children[0]).column; + const head = pointStart$j(node.children[0]).column; // Ignore empty headings. if (!head) { return } - const diff = head - pointStart$7(node).column - 1 - node.depth; + const diff = head - pointStart$j(node).column - 1 - node.depth; if (diff) { file.message( 'Remove ' + Math.abs(diff) + ' ' + - pluralize('space', Math.abs(diff)) + + plural('space', Math.abs(diff)) + ' before this heading’s content', - pointStart$7(node.children[0]) + pointStart$j(node.children[0]) ); } } @@ -48071,15 +57411,15 @@ const remarkLintNoHeadingContentIndent = lintRule$9( // Closed ATX headings always must have a space between their content and // the final hashes, thus, there is no `add x spaces`. if (type === 'atx-closed') { - const final = pointEnd$4(node.children[node.children.length - 1]); - const diff = pointEnd$4(node).column - final.column - 1 - node.depth; + const final = pointEnd$a(node.children[node.children.length - 1]); + const diff = pointEnd$a(node).column - final.column - 1 - node.depth; if (diff) { file.message( 'Remove ' + diff + ' ' + - pluralize('space', diff) + + plural('space', diff) + ' after this heading’s content', final ); @@ -48089,92 +57429,6 @@ const remarkLintNoHeadingContentIndent = lintRule$9( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$b(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -48190,13 +57444,13 @@ function wrap$b(middleware, callback) { * @returns {void} */ -const primitives$a = new Set(['string', 'number', 'boolean']); +const primitives$v = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$a(id, rule) { +function lintRule$v(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -48209,7 +57463,7 @@ function lintRule$a(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$a(ruleId, raw); + const [severity, options] = coerce$w(ruleId, raw); if (!severity) return @@ -48218,7 +57472,7 @@ function lintRule$a(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$b(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -48248,7 +57502,7 @@ function lintRule$a(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$a(name, value) { +function coerce$w(name, value) { /** @type {unknown[]} */ let result; @@ -48260,7 +57514,7 @@ function coerce$a(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$a.has(typeof value[0]) + primitives$v.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -48313,7 +57567,7 @@ function coerce$a(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$d = +const convert$t = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -48333,19 +57587,19 @@ const convert$d = */ function (test) { if (test === undefined || test === null) { - return ok$b + return ok$s } if (typeof test === 'string') { - return typeFactory$a(test) + return typeFactory$s(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$a(test) : propsFactory$a(test) + return Array.isArray(test) ? anyFactory$s(test) : propsFactory$r(test) } if (typeof test === 'function') { - return castFactory$a(test) + return castFactory$r(test) } throw new Error('Expected function, string, or object as test') @@ -48355,16 +57609,16 @@ const convert$d = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$a(tests) { +function anyFactory$s(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$d(tests[index]); + checks[index] = convert$t(tests[index]); } - return castFactory$a(any) + return castFactory$r(any) /** * @this {unknown} @@ -48389,8 +57643,8 @@ function anyFactory$a(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$a(check) { - return castFactory$a(all) +function propsFactory$r(check) { + return castFactory$r(all) /** * @param {Node} node @@ -48416,8 +57670,8 @@ function propsFactory$a(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$a(check) { - return castFactory$a(type) +function typeFactory$s(check) { + return castFactory$r(type) /** * @param {Node} node @@ -48433,7 +57687,7 @@ function typeFactory$a(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$a(check) { +function castFactory$r(check) { return assertion /** @@ -48448,7 +57702,7 @@ function castFactory$a(check) { } // Utility to return true. -function ok$b() { +function ok$s() { return true } @@ -48456,7 +57710,7 @@ function ok$b() { * @param {string} d * @returns {string} */ -function color$b(d) { +function color$t(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -48469,15 +57723,15 @@ function color$b(d) { /** * Continue traversing as normal */ -const CONTINUE$a = true; +const CONTINUE$t = true; /** * Do not traverse this node’s children */ -const SKIP$a = 'skip'; +const SKIP$t = 'skip'; /** * Stop traversing immediately */ -const EXIT$a = false; +const EXIT$t = false; /** * Visit children of tree which pass a test @@ -48487,7 +57741,7 @@ const EXIT$a = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$a = +const visitParents$t = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -48509,7 +57763,7 @@ const visitParents$a = test = null; } - const is = convert$d(test); + const is = convert$t(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -48537,7 +57791,7 @@ const visitParents$a = Object.defineProperty(visit, 'name', { value: 'node (' + - color$b(value.type + (name ? '<' + name + '>' : '')) + + color$t(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -48555,15 +57809,15 @@ const visitParents$a = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$a(visitor(node, parents)); + result = toResult$s(visitor(node, parents)); - if (result[0] === EXIT$a) { + if (result[0] === EXIT$t) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$a) { + if (node.children && result[0] !== SKIP$t) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -48574,7 +57828,7 @@ const visitParents$a = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$a) { + if (subresult[0] === EXIT$t) { return subresult } @@ -48593,13 +57847,13 @@ const visitParents$a = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$a(value) { +function toResult$s(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$a, value] + return [CONTINUE$t, value] } return [value] @@ -48620,7 +57874,7 @@ function toResult$a(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$a = +const visit$s = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -48641,7 +57895,7 @@ const visit$a = test = null; } - visitParents$a(tree, test, overload, reverse); + visitParents$t(tree, test, overload, reverse); /** * @param {Node} node @@ -48658,62 +57912,6 @@ const visit$a = } ); -/** - * @typedef Options - * @property {boolean} [includeImageAlt=true] - */ - -/** - * Get the text content of a node. - * Prefer the node’s plain-text fields, otherwise serialize its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} node - * @param {Options} [options] - * @returns {string} - */ -function toString$6(node, options) { - var {includeImageAlt = true} = options || {}; - return one$3(node, includeImageAlt) -} - -/** - * @param {unknown} node - * @param {boolean} includeImageAlt - * @returns {string} - */ -function one$3(node, includeImageAlt) { - return ( - (node && - typeof node === 'object' && - // @ts-ignore looks like a literal. - (node.value || - // @ts-ignore looks like an image. - (includeImageAlt ? node.alt : '') || - // @ts-ignore looks like a parent. - ('children' in node && all$3(node.children, includeImageAlt)) || - (Array.isArray(node) && all$3(node, includeImageAlt)))) || - '' - ) -} - -/** - * @param {Array.} values - * @param {boolean} includeImageAlt - * @returns {string} - */ -function all$3(values, includeImageAlt) { - /** @type {Array.} */ - var result = []; - var index = -1; - - while (++index < values.length) { - result[index] = one$3(values[index], includeImageAlt); - } - - return result.join('') -} - /** * @author Titus Wormer * @copyright 2015 Titus Wormer @@ -48741,18 +57939,18 @@ function all$3(values, includeImageAlt) { * 1:7-1:38: Don’t pad `link` with inner spaces */ -const remarkLintNoInlinePadding = lintRule$a( +const remarkLintNoInlinePadding = lintRule$v( 'remark-lint:no-inline-padding', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { // Note: `emphasis`, `strong`, `delete` (GFM) can’t have padding anymore // since CM. - visit$a(tree, (node) => { + visit$s(tree, (node) => { if ( (node.type === 'link' || node.type === 'linkReference') && !generated(node) ) { - const value = toString$6(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); @@ -48762,92 +57960,6 @@ const remarkLintNoInlinePadding = lintRule$a( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$c(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -48863,13 +57975,13 @@ function wrap$c(middleware, callback) { * @returns {void} */ -const primitives$b = new Set(['string', 'number', 'boolean']); +const primitives$u = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$b(id, rule) { +function lintRule$u(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -48882,7 +57994,7 @@ function lintRule$b(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$b(ruleId, raw); + const [severity, options] = coerce$v(ruleId, raw); if (!severity) return @@ -48891,7 +58003,7 @@ function lintRule$b(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$c(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -48921,7 +58033,7 @@ function lintRule$b(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$b(name, value) { +function coerce$v(name, value) { /** @type {unknown[]} */ let result; @@ -48933,7 +58045,7 @@ function coerce$b(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$b.has(typeof value[0]) + primitives$u.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -48986,7 +58098,7 @@ function coerce$b(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$e = +const convert$s = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -49006,19 +58118,19 @@ const convert$e = */ function (test) { if (test === undefined || test === null) { - return ok$c + return ok$r } if (typeof test === 'string') { - return typeFactory$b(test) + return typeFactory$r(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$b(test) : propsFactory$b(test) + return Array.isArray(test) ? anyFactory$r(test) : propsFactory$q(test) } if (typeof test === 'function') { - return castFactory$b(test) + return castFactory$q(test) } throw new Error('Expected function, string, or object as test') @@ -49028,16 +58140,16 @@ const convert$e = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$b(tests) { +function anyFactory$r(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$e(tests[index]); + checks[index] = convert$s(tests[index]); } - return castFactory$b(any) + return castFactory$q(any) /** * @this {unknown} @@ -49062,8 +58174,8 @@ function anyFactory$b(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$b(check) { - return castFactory$b(all) +function propsFactory$q(check) { + return castFactory$q(all) /** * @param {Node} node @@ -49089,8 +58201,8 @@ function propsFactory$b(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$b(check) { - return castFactory$b(type) +function typeFactory$r(check) { + return castFactory$q(type) /** * @param {Node} node @@ -49106,7 +58218,7 @@ function typeFactory$b(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$b(check) { +function castFactory$q(check) { return assertion /** @@ -49121,7 +58233,7 @@ function castFactory$b(check) { } // Utility to return true. -function ok$c() { +function ok$r() { return true } @@ -49129,7 +58241,7 @@ function ok$c() { * @param {string} d * @returns {string} */ -function color$c(d) { +function color$s(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -49142,15 +58254,15 @@ function color$c(d) { /** * Continue traversing as normal */ -const CONTINUE$b = true; +const CONTINUE$s = true; /** * Do not traverse this node’s children */ -const SKIP$b = 'skip'; +const SKIP$s = 'skip'; /** * Stop traversing immediately */ -const EXIT$b = false; +const EXIT$s = false; /** * Visit children of tree which pass a test @@ -49160,7 +58272,7 @@ const EXIT$b = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$b = +const visitParents$s = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -49182,7 +58294,7 @@ const visitParents$b = test = null; } - const is = convert$e(test); + const is = convert$s(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -49210,7 +58322,7 @@ const visitParents$b = Object.defineProperty(visit, 'name', { value: 'node (' + - color$c(value.type + (name ? '<' + name + '>' : '')) + + color$s(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -49228,15 +58340,15 @@ const visitParents$b = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$b(visitor(node, parents)); + result = toResult$r(visitor(node, parents)); - if (result[0] === EXIT$b) { + if (result[0] === EXIT$s) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$b) { + if (node.children && result[0] !== SKIP$s) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -49247,7 +58359,7 @@ const visitParents$b = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$b) { + if (subresult[0] === EXIT$s) { return subresult } @@ -49266,13 +58378,13 @@ const visitParents$b = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$b(value) { +function toResult$r(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$b, value] + return [CONTINUE$s, value] } return [value] @@ -49293,7 +58405,7 @@ function toResult$b(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$b = +const visit$r = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -49314,7 +58426,7 @@ const visit$b = test = null; } - visitParents$b(tree, test, overload, reverse); + visitParents$s(tree, test, overload, reverse); /** * @param {Node} node @@ -49365,11 +58477,11 @@ const visit$b = * 1:1-1:7: Use the trailing [] on reference images */ -const remarkLintNoShortcutReferenceImage = lintRule$b( +const remarkLintNoShortcutReferenceImage = lintRule$u( 'remark-lint:no-shortcut-reference-image', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$b(tree, 'imageReference', (node) => { + visit$r(tree, 'imageReference', (node) => { if (!generated(node) && node.referenceType === 'shortcut') { file.message('Use the trailing [] on reference images', node); } @@ -49377,92 +58489,6 @@ const remarkLintNoShortcutReferenceImage = lintRule$b( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$d(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -49478,13 +58504,13 @@ function wrap$d(middleware, callback) { * @returns {void} */ -const primitives$c = new Set(['string', 'number', 'boolean']); +const primitives$t = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$c(id, rule) { +function lintRule$t(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -49497,7 +58523,7 @@ function lintRule$c(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$c(ruleId, raw); + const [severity, options] = coerce$u(ruleId, raw); if (!severity) return @@ -49506,7 +58532,7 @@ function lintRule$c(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$d(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -49536,7 +58562,7 @@ function lintRule$c(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$c(name, value) { +function coerce$u(name, value) { /** @type {unknown[]} */ let result; @@ -49548,7 +58574,7 @@ function coerce$c(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$c.has(typeof value[0]) + primitives$t.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -49601,7 +58627,7 @@ function coerce$c(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$f = +const convert$r = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -49621,19 +58647,19 @@ const convert$f = */ function (test) { if (test === undefined || test === null) { - return ok$d + return ok$q } if (typeof test === 'string') { - return typeFactory$c(test) + return typeFactory$q(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$c(test) : propsFactory$c(test) + return Array.isArray(test) ? anyFactory$q(test) : propsFactory$p(test) } if (typeof test === 'function') { - return castFactory$c(test) + return castFactory$p(test) } throw new Error('Expected function, string, or object as test') @@ -49643,16 +58669,16 @@ const convert$f = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$c(tests) { +function anyFactory$q(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$f(tests[index]); + checks[index] = convert$r(tests[index]); } - return castFactory$c(any) + return castFactory$p(any) /** * @this {unknown} @@ -49677,8 +58703,8 @@ function anyFactory$c(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$c(check) { - return castFactory$c(all) +function propsFactory$p(check) { + return castFactory$p(all) /** * @param {Node} node @@ -49704,8 +58730,8 @@ function propsFactory$c(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$c(check) { - return castFactory$c(type) +function typeFactory$q(check) { + return castFactory$p(type) /** * @param {Node} node @@ -49721,7 +58747,7 @@ function typeFactory$c(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$c(check) { +function castFactory$p(check) { return assertion /** @@ -49736,7 +58762,7 @@ function castFactory$c(check) { } // Utility to return true. -function ok$d() { +function ok$q() { return true } @@ -49744,7 +58770,7 @@ function ok$d() { * @param {string} d * @returns {string} */ -function color$d(d) { +function color$r(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -49757,15 +58783,15 @@ function color$d(d) { /** * Continue traversing as normal */ -const CONTINUE$c = true; +const CONTINUE$r = true; /** * Do not traverse this node’s children */ -const SKIP$c = 'skip'; +const SKIP$r = 'skip'; /** * Stop traversing immediately */ -const EXIT$c = false; +const EXIT$r = false; /** * Visit children of tree which pass a test @@ -49775,7 +58801,7 @@ const EXIT$c = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$c = +const visitParents$r = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -49797,7 +58823,7 @@ const visitParents$c = test = null; } - const is = convert$f(test); + const is = convert$r(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -49825,7 +58851,7 @@ const visitParents$c = Object.defineProperty(visit, 'name', { value: 'node (' + - color$d(value.type + (name ? '<' + name + '>' : '')) + + color$r(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -49843,15 +58869,15 @@ const visitParents$c = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$c(visitor(node, parents)); + result = toResult$q(visitor(node, parents)); - if (result[0] === EXIT$c) { + if (result[0] === EXIT$r) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$c) { + if (node.children && result[0] !== SKIP$r) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -49862,7 +58888,7 @@ const visitParents$c = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$c) { + if (subresult[0] === EXIT$r) { return subresult } @@ -49881,13 +58907,13 @@ const visitParents$c = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$c(value) { +function toResult$q(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$c, value] + return [CONTINUE$r, value] } return [value] @@ -49908,7 +58934,7 @@ function toResult$c(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$c = +const visit$q = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -49929,7 +58955,7 @@ const visit$c = test = null; } - visitParents$c(tree, test, overload, reverse); + visitParents$r(tree, test, overload, reverse); /** * @param {Node} node @@ -49980,11 +59006,11 @@ const visit$c = * 1:1-1:6: Use the trailing `[]` on reference links */ -const remarkLintNoShortcutReferenceLink = lintRule$c( +const remarkLintNoShortcutReferenceLink = lintRule$t( 'remark-lint:no-shortcut-reference-link', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$c(tree, 'linkReference', (node) => { + visit$q(tree, 'linkReference', (node) => { if (!generated(node) && node.referenceType === 'shortcut') { file.message('Use the trailing `[]` on reference links', node); } @@ -49998,7 +59024,7 @@ const remarkLintNoShortcutReferenceLink = lintRule$c( * @param {string} value * @returns {string} */ -function normalizeIdentifier$1(value) { +function normalizeIdentifier(value) { return ( value // Collapse Markdown whitespace. .replace(/[\t\n\r ]+/g, ' ') // Trim. @@ -50027,7 +59053,7 @@ function normalizeIdentifier$1(value) { * * @param {string|Uint8Array|VFile} file */ -function location$2(file) { +function location$3(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -50094,92 +59120,6 @@ function location$2(file) { } } -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$e(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -50195,13 +59135,13 @@ function wrap$e(middleware, callback) { * @returns {void} */ -const primitives$d = new Set(['string', 'number', 'boolean']); +const primitives$s = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$d(id, rule) { +function lintRule$s(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -50214,7 +59154,7 @@ function lintRule$d(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$d(ruleId, raw); + const [severity, options] = coerce$t(ruleId, raw); if (!severity) return @@ -50223,7 +59163,7 @@ function lintRule$d(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$e(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -50253,7 +59193,7 @@ function lintRule$d(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$d(name, value) { +function coerce$t(name, value) { /** @type {unknown[]} */ let result; @@ -50265,7 +59205,7 @@ function coerce$d(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$d.has(typeof value[0]) + primitives$s.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -50322,15 +59262,15 @@ function coerce$d(name, value) { * @property {PositionLike} [position] */ -var pointStart$8 = point$a('start'); -var pointEnd$5 = point$a('end'); +var pointStart$i = point$i('start'); +var pointEnd$9 = point$i('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$a(type) { +function point$i(type) { return point /** @@ -50362,7 +59302,7 @@ function point$a(type) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$g = +const convert$q = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -50382,19 +59322,19 @@ const convert$g = */ function (test) { if (test === undefined || test === null) { - return ok$e + return ok$p } if (typeof test === 'string') { - return typeFactory$d(test) + return typeFactory$p(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$d(test) : propsFactory$d(test) + return Array.isArray(test) ? anyFactory$p(test) : propsFactory$o(test) } if (typeof test === 'function') { - return castFactory$d(test) + return castFactory$o(test) } throw new Error('Expected function, string, or object as test') @@ -50404,16 +59344,16 @@ const convert$g = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$d(tests) { +function anyFactory$p(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$g(tests[index]); + checks[index] = convert$q(tests[index]); } - return castFactory$d(any) + return castFactory$o(any) /** * @this {unknown} @@ -50438,8 +59378,8 @@ function anyFactory$d(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$d(check) { - return castFactory$d(all) +function propsFactory$o(check) { + return castFactory$o(all) /** * @param {Node} node @@ -50465,8 +59405,8 @@ function propsFactory$d(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$d(check) { - return castFactory$d(type) +function typeFactory$p(check) { + return castFactory$o(type) /** * @param {Node} node @@ -50482,7 +59422,7 @@ function typeFactory$d(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$d(check) { +function castFactory$o(check) { return assertion /** @@ -50497,7 +59437,7 @@ function castFactory$d(check) { } // Utility to return true. -function ok$e() { +function ok$p() { return true } @@ -50505,7 +59445,7 @@ function ok$e() { * @param {string} d * @returns {string} */ -function color$e(d) { +function color$q(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -50518,15 +59458,15 @@ function color$e(d) { /** * Continue traversing as normal */ -const CONTINUE$d = true; +const CONTINUE$q = true; /** * Do not traverse this node’s children */ -const SKIP$d = 'skip'; +const SKIP$q = 'skip'; /** * Stop traversing immediately */ -const EXIT$d = false; +const EXIT$q = false; /** * Visit children of tree which pass a test @@ -50536,7 +59476,7 @@ const EXIT$d = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$d = +const visitParents$q = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -50558,7 +59498,7 @@ const visitParents$d = test = null; } - const is = convert$g(test); + const is = convert$q(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -50586,7 +59526,7 @@ const visitParents$d = Object.defineProperty(visit, 'name', { value: 'node (' + - color$e(value.type + (name ? '<' + name + '>' : '')) + + color$q(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -50604,15 +59544,15 @@ const visitParents$d = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$d(visitor(node, parents)); + result = toResult$p(visitor(node, parents)); - if (result[0] === EXIT$d) { + if (result[0] === EXIT$q) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$d) { + if (node.children && result[0] !== SKIP$q) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -50623,7 +59563,7 @@ const visitParents$d = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$d) { + if (subresult[0] === EXIT$q) { return subresult } @@ -50642,13 +59582,13 @@ const visitParents$d = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$d(value) { +function toResult$p(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$d, value] + return [CONTINUE$q, value] } return [value] @@ -50669,7 +59609,7 @@ function toResult$d(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$d = +const visit$p = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -50690,7 +59630,7 @@ const visit$d = test = null; } - visitParents$d(tree, test, overload, reverse); + visitParents$q(tree, test, overload, reverse); /** * @param {Node} node @@ -50775,29 +59715,29 @@ const visit$d = * 17:23-17:26: Found reference to undefined definition */ -const remarkLintNoUndefinedReferences = lintRule$d( +const remarkLintNoUndefinedReferences = lintRule$s( 'remark-lint:no-undefined-references', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = {}) => { const contents = String(file); - const loc = location$2(file); + const loc = location$3(file); const lineEnding = /(\r?\n|\r)[\t ]*(>[\t ]*)*/g; const allow = new Set( - (option.allow || []).map((d) => normalizeIdentifier$1(d)) + (option.allow || []).map((d) => normalizeIdentifier(d)) ); /** @type {Record} */ const map = Object.create(null); - visit$d(tree, (node) => { + visit$p(tree, (node) => { if ( (node.type === 'definition' || node.type === 'footnoteDefinition') && !generated(node) ) { - map[normalizeIdentifier$1(node.identifier)] = true; + map[normalizeIdentifier(node.identifier)] = true; } }); - visit$d(tree, (node) => { + visit$p(tree, (node) => { // CM specifiers that references only form when defined. // Still, they could be added by plugins, so let’s keep it. /* c8 ignore next 10 */ @@ -50806,8 +59746,8 @@ const remarkLintNoUndefinedReferences = lintRule$d( node.type === 'linkReference' || node.type === 'footnoteReference') && !generated(node) && - !(normalizeIdentifier$1(node.identifier) in map) && - !allow.has(normalizeIdentifier$1(node.identifier)) + !(normalizeIdentifier(node.identifier) in map) && + !allow.has(normalizeIdentifier(node.identifier)) ) { file.message('Found reference to undefined definition', node); } @@ -50824,25 +59764,25 @@ const remarkLintNoUndefinedReferences = lintRule$d( /** @type {Range[]} */ let ranges = []; - visit$d(node, (child) => { + visit$p(node, (child) => { // Ignore the node itself. if (child === node) return // Can’t have links in links, so reset ranges. if (child.type === 'link' || child.type === 'linkReference') { ranges = []; - return SKIP$d + return SKIP$q } // Enter non-text. if (child.type !== 'text') return - const start = pointStart$8(child).offset; - const end = pointEnd$5(child).offset; + const start = pointStart$i(child).offset; + const end = pointEnd$9(child).offset; // Bail if there’s no positional info. if (typeof start !== 'number' || typeof end !== 'number') { - return EXIT$d + return EXIT$q } const source = contents.slice(start, end); @@ -50940,7 +59880,7 @@ const remarkLintNoUndefinedReferences = lintRule$d( handleRange(ranges[index]); } - return SKIP$d + return SKIP$q /** * @param {Range} range @@ -50963,8 +59903,8 @@ const remarkLintNoUndefinedReferences = lintRule$d( if ( !generated({position: pos}) && - !(normalizeIdentifier$1(id) in map) && - !allow.has(normalizeIdentifier$1(id)) + !(normalizeIdentifier(id) in map) && + !allow.has(normalizeIdentifier(id)) ) { file.message('Found reference to undefined definition', pos); } @@ -50973,92 +59913,6 @@ const remarkLintNoUndefinedReferences = lintRule$d( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$f(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -51074,13 +59928,13 @@ function wrap$f(middleware, callback) { * @returns {void} */ -const primitives$e = new Set(['string', 'number', 'boolean']); +const primitives$r = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$e(id, rule) { +function lintRule$r(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -51093,7 +59947,7 @@ function lintRule$e(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$e(ruleId, raw); + const [severity, options] = coerce$s(ruleId, raw); if (!severity) return @@ -51102,7 +59956,7 @@ function lintRule$e(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$f(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -51132,7 +59986,7 @@ function lintRule$e(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$e(name, value) { +function coerce$s(name, value) { /** @type {unknown[]} */ let result; @@ -51144,7 +59998,7 @@ function coerce$e(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$e.has(typeof value[0]) + primitives$r.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -51197,7 +60051,7 @@ function coerce$e(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$h = +const convert$p = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -51217,19 +60071,19 @@ const convert$h = */ function (test) { if (test === undefined || test === null) { - return ok$f + return ok$o } if (typeof test === 'string') { - return typeFactory$e(test) + return typeFactory$o(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$e(test) : propsFactory$e(test) + return Array.isArray(test) ? anyFactory$o(test) : propsFactory$n(test) } if (typeof test === 'function') { - return castFactory$e(test) + return castFactory$n(test) } throw new Error('Expected function, string, or object as test') @@ -51239,16 +60093,16 @@ const convert$h = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$e(tests) { +function anyFactory$o(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$h(tests[index]); + checks[index] = convert$p(tests[index]); } - return castFactory$e(any) + return castFactory$n(any) /** * @this {unknown} @@ -51273,8 +60127,8 @@ function anyFactory$e(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$e(check) { - return castFactory$e(all) +function propsFactory$n(check) { + return castFactory$n(all) /** * @param {Node} node @@ -51300,8 +60154,8 @@ function propsFactory$e(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$e(check) { - return castFactory$e(type) +function typeFactory$o(check) { + return castFactory$n(type) /** * @param {Node} node @@ -51317,7 +60171,7 @@ function typeFactory$e(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$e(check) { +function castFactory$n(check) { return assertion /** @@ -51332,7 +60186,7 @@ function castFactory$e(check) { } // Utility to return true. -function ok$f() { +function ok$o() { return true } @@ -51340,7 +60194,7 @@ function ok$f() { * @param {string} d * @returns {string} */ -function color$f(d) { +function color$p(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -51353,15 +60207,15 @@ function color$f(d) { /** * Continue traversing as normal */ -const CONTINUE$e = true; +const CONTINUE$p = true; /** * Do not traverse this node’s children */ -const SKIP$e = 'skip'; +const SKIP$p = 'skip'; /** * Stop traversing immediately */ -const EXIT$e = false; +const EXIT$p = false; /** * Visit children of tree which pass a test @@ -51371,7 +60225,7 @@ const EXIT$e = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$e = +const visitParents$p = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -51393,7 +60247,7 @@ const visitParents$e = test = null; } - const is = convert$h(test); + const is = convert$p(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -51421,7 +60275,7 @@ const visitParents$e = Object.defineProperty(visit, 'name', { value: 'node (' + - color$f(value.type + (name ? '<' + name + '>' : '')) + + color$p(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -51439,15 +60293,15 @@ const visitParents$e = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$e(visitor(node, parents)); + result = toResult$o(visitor(node, parents)); - if (result[0] === EXIT$e) { + if (result[0] === EXIT$p) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$e) { + if (node.children && result[0] !== SKIP$p) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -51458,7 +60312,7 @@ const visitParents$e = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$e) { + if (subresult[0] === EXIT$p) { return subresult } @@ -51477,13 +60331,13 @@ const visitParents$e = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$e(value) { +function toResult$o(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$e, value] + return [CONTINUE$p, value] } return [value] @@ -51504,7 +60358,7 @@ function toResult$e(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$e = +const visit$o = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -51525,7 +60379,7 @@ const visit$e = test = null; } - visitParents$e(tree, test, overload, reverse); + visitParents$p(tree, test, overload, reverse); /** * @param {Node} node @@ -51568,16 +60422,16 @@ const visit$e = * 1:1-1:27: Found unused definition */ -const own$8 = {}.hasOwnProperty; +const own$1 = {}.hasOwnProperty; -const remarkLintNoUnusedDefinitions = lintRule$e( +const remarkLintNoUnusedDefinitions = lintRule$r( 'remark-lint:no-unused-definitions', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { /** @type {Record} */ const map = Object.create(null); - visit$e(tree, (node) => { + visit$o(tree, (node) => { if ( (node.type === 'definition' || node.type === 'footnoteDefinition') && !generated(node) @@ -51586,7 +60440,7 @@ const remarkLintNoUnusedDefinitions = lintRule$e( } }); - visit$e(tree, (node) => { + visit$o(tree, (node) => { if ( node.type === 'imageReference' || node.type === 'linkReference' || @@ -51604,7 +60458,7 @@ const remarkLintNoUnusedDefinitions = lintRule$e( let identifier; for (identifier in map) { - if (own$8.call(map, identifier)) { + if (own$1.call(map, identifier)) { const entry = map[identifier]; if (!entry.used) { @@ -51621,7 +60475,7 @@ const remarkLintNoUnusedDefinitions = lintRule$e( * mistakes or stuff that fails across vendors. */ -const plugins$1 = [ +const plugins = [ remarkLint, // Unix compatibility. remarkLintFinalNewline, @@ -51644,93 +60498,7 @@ const plugins$1 = [ remarkLintNoUnusedDefinitions ]; -const remarkPresetLintRecommended = {plugins: plugins$1}; - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$g(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} +const remarkPresetLintRecommended = {plugins}; /** * @typedef {import('unist').Node} Node @@ -51747,13 +60515,13 @@ function wrap$g(middleware, callback) { * @returns {void} */ -const primitives$f = new Set(['string', 'number', 'boolean']); +const primitives$q = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$f(id, rule) { +function lintRule$q(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -51766,7 +60534,7 @@ function lintRule$f(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$f(ruleId, raw); + const [severity, options] = coerce$r(ruleId, raw); if (!severity) return @@ -51775,7 +60543,7 @@ function lintRule$f(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$g(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -51805,7 +60573,7 @@ function lintRule$f(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$f(name, value) { +function coerce$r(name, value) { /** @type {unknown[]} */ let result; @@ -51817,7 +60585,7 @@ function coerce$f(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$f.has(typeof value[0]) + primitives$q.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -51870,7 +60638,7 @@ function coerce$f(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$i = +const convert$o = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -51890,19 +60658,19 @@ const convert$i = */ function (test) { if (test === undefined || test === null) { - return ok$g + return ok$n } if (typeof test === 'string') { - return typeFactory$f(test) + return typeFactory$n(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$f(test) : propsFactory$f(test) + return Array.isArray(test) ? anyFactory$n(test) : propsFactory$m(test) } if (typeof test === 'function') { - return castFactory$f(test) + return castFactory$m(test) } throw new Error('Expected function, string, or object as test') @@ -51912,16 +60680,16 @@ const convert$i = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$f(tests) { +function anyFactory$n(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$i(tests[index]); + checks[index] = convert$o(tests[index]); } - return castFactory$f(any) + return castFactory$m(any) /** * @this {unknown} @@ -51946,8 +60714,8 @@ function anyFactory$f(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$f(check) { - return castFactory$f(all) +function propsFactory$m(check) { + return castFactory$m(all) /** * @param {Node} node @@ -51973,8 +60741,8 @@ function propsFactory$f(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$f(check) { - return castFactory$f(type) +function typeFactory$n(check) { + return castFactory$m(type) /** * @param {Node} node @@ -51990,7 +60758,7 @@ function typeFactory$f(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$f(check) { +function castFactory$m(check) { return assertion /** @@ -52005,7 +60773,7 @@ function castFactory$f(check) { } // Utility to return true. -function ok$g() { +function ok$n() { return true } @@ -52013,7 +60781,7 @@ function ok$g() { * @param {string} d * @returns {string} */ -function color$g(d) { +function color$o(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -52026,15 +60794,15 @@ function color$g(d) { /** * Continue traversing as normal */ -const CONTINUE$f = true; +const CONTINUE$o = true; /** * Do not traverse this node’s children */ -const SKIP$f = 'skip'; +const SKIP$o = 'skip'; /** * Stop traversing immediately */ -const EXIT$f = false; +const EXIT$o = false; /** * Visit children of tree which pass a test @@ -52044,7 +60812,7 @@ const EXIT$f = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$f = +const visitParents$o = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -52066,7 +60834,7 @@ const visitParents$f = test = null; } - const is = convert$i(test); + const is = convert$o(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -52094,7 +60862,7 @@ const visitParents$f = Object.defineProperty(visit, 'name', { value: 'node (' + - color$g(value.type + (name ? '<' + name + '>' : '')) + + color$o(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -52112,15 +60880,15 @@ const visitParents$f = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$f(visitor(node, parents)); + result = toResult$n(visitor(node, parents)); - if (result[0] === EXIT$f) { + if (result[0] === EXIT$o) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$f) { + if (node.children && result[0] !== SKIP$o) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -52131,7 +60899,7 @@ const visitParents$f = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$f) { + if (subresult[0] === EXIT$o) { return subresult } @@ -52150,13 +60918,13 @@ const visitParents$f = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$f(value) { +function toResult$n(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$f, value] + return [CONTINUE$o, value] } return [value] @@ -52177,7 +60945,7 @@ function toResult$f(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$f = +const visit$n = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -52198,7 +60966,7 @@ const visit$f = test = null; } - visitParents$f(tree, test, overload, reverse); + visitParents$o(tree, test, overload, reverse); /** * @param {Node} node @@ -52229,14 +60997,14 @@ const visit$f = * @property {PositionLike} [position] */ -var pointStart$9 = point$b('start'); +var pointStart$h = point$h('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$b(type) { +function point$h(type) { return point /** @@ -52308,19 +61076,19 @@ function point$b(type) { * 9:3: Add 1 space between block quote and content */ -const remarkLintBlockquoteIndentation = lintRule$f( +const remarkLintBlockquoteIndentation = lintRule$q( 'remark-lint:blockquote-indentation', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { - visit$f(tree, 'blockquote', (node) => { + visit$n(tree, 'blockquote', (node) => { if (generated(node) || node.children.length === 0) { return } if (option === 'consistent') { - option = check$3(node); + option = check(node); } else { - const diff = option - check$3(node); + const diff = option - check(node); if (diff !== 0) { const abs = Math.abs(diff); @@ -52330,9 +61098,9 @@ const remarkLintBlockquoteIndentation = lintRule$f( ' ' + abs + ' ' + - pluralize('space', abs) + + plural('space', abs) + ' between block quote and content', - pointStart$9(node.children[0]) + pointStart$h(node.children[0]) ); } } @@ -52344,94 +61112,8 @@ const remarkLintBlockquoteIndentation = lintRule$f( * @param {Blockquote} node * @returns {number} */ -function check$3(node) { - return pointStart$9(node.children[0]).column - pointStart$9(node).column -} - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$h(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } +function check(node) { + return pointStart$h(node.children[0]).column - pointStart$h(node).column } /** @@ -52449,13 +61131,13 @@ function wrap$h(middleware, callback) { * @returns {void} */ -const primitives$g = new Set(['string', 'number', 'boolean']); +const primitives$p = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$g(id, rule) { +function lintRule$p(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -52468,7 +61150,7 @@ function lintRule$g(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$g(ruleId, raw); + const [severity, options] = coerce$q(ruleId, raw); if (!severity) return @@ -52477,7 +61159,7 @@ function lintRule$g(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$h(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -52507,7 +61189,7 @@ function lintRule$g(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$g(name, value) { +function coerce$q(name, value) { /** @type {unknown[]} */ let result; @@ -52519,7 +61201,7 @@ function coerce$g(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$g.has(typeof value[0]) + primitives$p.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -52572,7 +61254,7 @@ function coerce$g(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$j = +const convert$n = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -52592,19 +61274,19 @@ const convert$j = */ function (test) { if (test === undefined || test === null) { - return ok$h + return ok$m } if (typeof test === 'string') { - return typeFactory$g(test) + return typeFactory$m(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$g(test) : propsFactory$g(test) + return Array.isArray(test) ? anyFactory$m(test) : propsFactory$l(test) } if (typeof test === 'function') { - return castFactory$g(test) + return castFactory$l(test) } throw new Error('Expected function, string, or object as test') @@ -52614,16 +61296,16 @@ const convert$j = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$g(tests) { +function anyFactory$m(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$j(tests[index]); + checks[index] = convert$n(tests[index]); } - return castFactory$g(any) + return castFactory$l(any) /** * @this {unknown} @@ -52648,8 +61330,8 @@ function anyFactory$g(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$g(check) { - return castFactory$g(all) +function propsFactory$l(check) { + return castFactory$l(all) /** * @param {Node} node @@ -52675,8 +61357,8 @@ function propsFactory$g(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$g(check) { - return castFactory$g(type) +function typeFactory$m(check) { + return castFactory$l(type) /** * @param {Node} node @@ -52692,7 +61374,7 @@ function typeFactory$g(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$g(check) { +function castFactory$l(check) { return assertion /** @@ -52707,7 +61389,7 @@ function castFactory$g(check) { } // Utility to return true. -function ok$h() { +function ok$m() { return true } @@ -52715,7 +61397,7 @@ function ok$h() { * @param {string} d * @returns {string} */ -function color$h(d) { +function color$n(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -52728,15 +61410,15 @@ function color$h(d) { /** * Continue traversing as normal */ -const CONTINUE$g = true; +const CONTINUE$n = true; /** * Do not traverse this node’s children */ -const SKIP$g = 'skip'; +const SKIP$n = 'skip'; /** * Stop traversing immediately */ -const EXIT$g = false; +const EXIT$n = false; /** * Visit children of tree which pass a test @@ -52746,7 +61428,7 @@ const EXIT$g = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$g = +const visitParents$n = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -52768,7 +61450,7 @@ const visitParents$g = test = null; } - const is = convert$j(test); + const is = convert$n(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -52796,7 +61478,7 @@ const visitParents$g = Object.defineProperty(visit, 'name', { value: 'node (' + - color$h(value.type + (name ? '<' + name + '>' : '')) + + color$n(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -52814,15 +61496,15 @@ const visitParents$g = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$g(visitor(node, parents)); + result = toResult$m(visitor(node, parents)); - if (result[0] === EXIT$g) { + if (result[0] === EXIT$n) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$g) { + if (node.children && result[0] !== SKIP$n) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -52833,7 +61515,7 @@ const visitParents$g = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$g) { + if (subresult[0] === EXIT$n) { return subresult } @@ -52852,13 +61534,13 @@ const visitParents$g = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$g(value) { +function toResult$m(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$g, value] + return [CONTINUE$n, value] } return [value] @@ -52879,7 +61561,7 @@ function toResult$g(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$g = +const visit$m = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -52900,7 +61582,7 @@ const visit$g = test = null; } - visitParents$g(tree, test, overload, reverse); + visitParents$n(tree, test, overload, reverse); /** * @param {Node} node @@ -52931,14 +61613,14 @@ const visit$g = * @property {PositionLike} [position] */ -var pointStart$a = point$c('start'); +var pointStart$g = point$g('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$c(type) { +function point$g(type) { return point /** @@ -53039,7 +61721,7 @@ function point$c(type) { * 1:1: Incorrect checked checkbox marker `💩`: use either `'x'`, or `'X'` */ -const remarkLintCheckboxCharacterStyle = lintRule$g( +const remarkLintCheckboxCharacterStyle = lintRule$p( 'remark-lint:checkbox-character-style', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { @@ -53070,9 +61752,9 @@ const remarkLintCheckboxCharacterStyle = lintRule$g( ); } - visit$g(tree, 'listItem', (node) => { + visit$m(tree, 'listItem', (node) => { const head = node.children[0]; - const point = pointStart$a(head); + const point = pointStart$g(head); // Exit early for items without checkbox. // A list item cannot be checked and empty, according to GFM. @@ -53120,92 +61802,6 @@ const remarkLintCheckboxCharacterStyle = lintRule$g( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$i(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -53221,13 +61817,13 @@ function wrap$i(middleware, callback) { * @returns {void} */ -const primitives$h = new Set(['string', 'number', 'boolean']); +const primitives$o = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$h(id, rule) { +function lintRule$o(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -53240,7 +61836,7 @@ function lintRule$h(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$h(ruleId, raw); + const [severity, options] = coerce$p(ruleId, raw); if (!severity) return @@ -53249,7 +61845,7 @@ function lintRule$h(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$i(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -53279,7 +61875,7 @@ function lintRule$h(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$h(name, value) { +function coerce$p(name, value) { /** @type {unknown[]} */ let result; @@ -53291,7 +61887,7 @@ function coerce$h(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$h.has(typeof value[0]) + primitives$o.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -53348,7 +61944,7 @@ function coerce$h(name, value) { * * @param {string|Uint8Array|VFile} file */ -function location$3(file) { +function location$2(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -53425,7 +62021,7 @@ function location$3(file) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$k = +const convert$m = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -53445,19 +62041,19 @@ const convert$k = */ function (test) { if (test === undefined || test === null) { - return ok$i + return ok$l } if (typeof test === 'string') { - return typeFactory$h(test) + return typeFactory$l(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$h(test) : propsFactory$h(test) + return Array.isArray(test) ? anyFactory$l(test) : propsFactory$k(test) } if (typeof test === 'function') { - return castFactory$h(test) + return castFactory$k(test) } throw new Error('Expected function, string, or object as test') @@ -53467,16 +62063,16 @@ const convert$k = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$h(tests) { +function anyFactory$l(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$k(tests[index]); + checks[index] = convert$m(tests[index]); } - return castFactory$h(any) + return castFactory$k(any) /** * @this {unknown} @@ -53501,8 +62097,8 @@ function anyFactory$h(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$h(check) { - return castFactory$h(all) +function propsFactory$k(check) { + return castFactory$k(all) /** * @param {Node} node @@ -53528,8 +62124,8 @@ function propsFactory$h(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$h(check) { - return castFactory$h(type) +function typeFactory$l(check) { + return castFactory$k(type) /** * @param {Node} node @@ -53545,7 +62141,7 @@ function typeFactory$h(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$h(check) { +function castFactory$k(check) { return assertion /** @@ -53560,7 +62156,7 @@ function castFactory$h(check) { } // Utility to return true. -function ok$i() { +function ok$l() { return true } @@ -53568,7 +62164,7 @@ function ok$i() { * @param {string} d * @returns {string} */ -function color$i(d) { +function color$m(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -53581,15 +62177,15 @@ function color$i(d) { /** * Continue traversing as normal */ -const CONTINUE$h = true; +const CONTINUE$m = true; /** * Do not traverse this node’s children */ -const SKIP$h = 'skip'; +const SKIP$m = 'skip'; /** * Stop traversing immediately */ -const EXIT$h = false; +const EXIT$m = false; /** * Visit children of tree which pass a test @@ -53599,7 +62195,7 @@ const EXIT$h = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$h = +const visitParents$m = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -53621,7 +62217,7 @@ const visitParents$h = test = null; } - const is = convert$k(test); + const is = convert$m(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -53649,7 +62245,7 @@ const visitParents$h = Object.defineProperty(visit, 'name', { value: 'node (' + - color$i(value.type + (name ? '<' + name + '>' : '')) + + color$m(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -53667,15 +62263,15 @@ const visitParents$h = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$h(visitor(node, parents)); + result = toResult$l(visitor(node, parents)); - if (result[0] === EXIT$h) { + if (result[0] === EXIT$m) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$h) { + if (node.children && result[0] !== SKIP$m) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -53686,7 +62282,7 @@ const visitParents$h = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$h) { + if (subresult[0] === EXIT$m) { return subresult } @@ -53705,13 +62301,13 @@ const visitParents$h = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$h(value) { +function toResult$l(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$h, value] + return [CONTINUE$m, value] } return [value] @@ -53732,7 +62328,7 @@ function toResult$h(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$h = +const visit$l = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -53753,7 +62349,7 @@ const visit$h = test = null; } - visitParents$h(tree, test, overload, reverse); + visitParents$m(tree, test, overload, reverse); /** * @param {Node} node @@ -53784,14 +62380,14 @@ const visit$h = * @property {PositionLike} [position] */ -var pointStart$b = point$d('start'); +var pointStart$f = point$f('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$d(type) { +function point$f(type) { return point /** @@ -53845,16 +62441,16 @@ function point$d(type) { * 4:7-4:10: Checkboxes should be followed by a single character */ -const remarkLintCheckboxContentIndent = lintRule$h( +const remarkLintCheckboxContentIndent = lintRule$o( 'remark-lint:checkbox-content-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { const value = String(file); - const loc = location$3(file); + const loc = location$2(file); - visit$h(tree, 'listItem', (node) => { + visit$l(tree, 'listItem', (node) => { const head = node.children[0]; - const point = pointStart$b(head); + const point = pointStart$f(head); // Exit early for items without checkbox. // A list item cannot be checked and empty, according to GFM. @@ -53891,92 +62487,6 @@ const remarkLintCheckboxContentIndent = lintRule$h( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$j(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -53992,13 +62502,13 @@ function wrap$j(middleware, callback) { * @returns {void} */ -const primitives$i = new Set(['string', 'number', 'boolean']); +const primitives$n = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$i(id, rule) { +function lintRule$n(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -54011,7 +62521,7 @@ function lintRule$i(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$i(ruleId, raw); + const [severity, options] = coerce$o(ruleId, raw); if (!severity) return @@ -54020,7 +62530,7 @@ function lintRule$i(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$j(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -54050,7 +62560,7 @@ function lintRule$i(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$i(name, value) { +function coerce$o(name, value) { /** @type {unknown[]} */ let result; @@ -54062,7 +62572,7 @@ function coerce$i(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$i.has(typeof value[0]) + primitives$n.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -54135,19 +62645,19 @@ const convert$l = */ function (test) { if (test === undefined || test === null) { - return ok$j + return ok$k } if (typeof test === 'string') { - return typeFactory$i(test) + return typeFactory$k(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$i(test) : propsFactory$i(test) + return Array.isArray(test) ? anyFactory$k(test) : propsFactory$j(test) } if (typeof test === 'function') { - return castFactory$i(test) + return castFactory$j(test) } throw new Error('Expected function, string, or object as test') @@ -54157,7 +62667,7 @@ const convert$l = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$i(tests) { +function anyFactory$k(tests) { /** @type {Array.} */ const checks = []; let index = -1; @@ -54166,7 +62676,7 @@ function anyFactory$i(tests) { checks[index] = convert$l(tests[index]); } - return castFactory$i(any) + return castFactory$j(any) /** * @this {unknown} @@ -54191,8 +62701,8 @@ function anyFactory$i(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$i(check) { - return castFactory$i(all) +function propsFactory$j(check) { + return castFactory$j(all) /** * @param {Node} node @@ -54218,8 +62728,8 @@ function propsFactory$i(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$i(check) { - return castFactory$i(type) +function typeFactory$k(check) { + return castFactory$j(type) /** * @param {Node} node @@ -54235,7 +62745,7 @@ function typeFactory$i(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$i(check) { +function castFactory$j(check) { return assertion /** @@ -54250,7 +62760,7 @@ function castFactory$i(check) { } // Utility to return true. -function ok$j() { +function ok$k() { return true } @@ -54258,7 +62768,7 @@ function ok$j() { * @param {string} d * @returns {string} */ -function color$j(d) { +function color$l(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -54271,15 +62781,15 @@ function color$j(d) { /** * Continue traversing as normal */ -const CONTINUE$i = true; +const CONTINUE$l = true; /** * Do not traverse this node’s children */ -const SKIP$i = 'skip'; +const SKIP$l = 'skip'; /** * Stop traversing immediately */ -const EXIT$i = false; +const EXIT$l = false; /** * Visit children of tree which pass a test @@ -54289,7 +62799,7 @@ const EXIT$i = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$i = +const visitParents$l = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -54339,7 +62849,7 @@ const visitParents$i = Object.defineProperty(visit, 'name', { value: 'node (' + - color$j(value.type + (name ? '<' + name + '>' : '')) + + color$l(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -54357,15 +62867,15 @@ const visitParents$i = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$i(visitor(node, parents)); + result = toResult$k(visitor(node, parents)); - if (result[0] === EXIT$i) { + if (result[0] === EXIT$l) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$i) { + if (node.children && result[0] !== SKIP$l) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -54376,7 +62886,7 @@ const visitParents$i = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$i) { + if (subresult[0] === EXIT$l) { return subresult } @@ -54395,13 +62905,13 @@ const visitParents$i = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$i(value) { +function toResult$k(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$i, value] + return [CONTINUE$l, value] } return [value] @@ -54422,7 +62932,7 @@ function toResult$i(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$i = +const visit$k = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -54443,7 +62953,7 @@ const visit$i = test = null; } - visitParents$i(tree, test, overload, reverse); + visitParents$l(tree, test, overload, reverse); /** * @param {Node} node @@ -54474,8 +62984,8 @@ const visit$i = * @property {PositionLike} [position] */ -var pointStart$c = point$e('start'); -var pointEnd$6 = point$e('end'); +var pointStart$e = point$e('start'); +var pointEnd$8 = point$e('end'); /** * Get the positional info of `node`. @@ -54607,7 +63117,7 @@ function point$e(type) { * 1:1: Incorrect code block style `💩`: use either `'consistent'`, `'fenced'`, or `'indented'` */ -const remarkLintCodeBlockStyle = lintRule$i( +const remarkLintCodeBlockStyle = lintRule$n( 'remark-lint:code-block-style', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { @@ -54625,13 +63135,13 @@ const remarkLintCodeBlockStyle = lintRule$i( ); } - visit$i(tree, 'code', (node) => { + visit$k(tree, 'code', (node) => { if (generated(node)) { return } - const initial = pointStart$c(node).offset; - const final = pointEnd$6(node).offset; + const initial = pointStart$e(node).offset; + const final = pointEnd$8(node).offset; const current = node.lang || /^\s*([~`])\1{2,}/.test(value.slice(initial, final)) @@ -54647,92 +63157,6 @@ const remarkLintCodeBlockStyle = lintRule$i( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$k(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -54748,13 +63172,13 @@ function wrap$k(middleware, callback) { * @returns {void} */ -const primitives$j = new Set(['string', 'number', 'boolean']); +const primitives$m = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$j(id, rule) { +function lintRule$m(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -54767,7 +63191,7 @@ function lintRule$j(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$j(ruleId, raw); + const [severity, options] = coerce$n(ruleId, raw); if (!severity) return @@ -54776,7 +63200,7 @@ function lintRule$j(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$k(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -54806,7 +63230,7 @@ function lintRule$j(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$j(name, value) { +function coerce$n(name, value) { /** @type {unknown[]} */ let result; @@ -54818,7 +63242,7 @@ function coerce$j(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$j.has(typeof value[0]) + primitives$m.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -54871,7 +63295,7 @@ function coerce$j(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$m = +const convert$k = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -54891,7 +63315,7 @@ const convert$m = */ function (test) { if (test === undefined || test === null) { - return ok$k + return ok$j } if (typeof test === 'string') { @@ -54899,11 +63323,11 @@ const convert$m = } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$j(test) : propsFactory$j(test) + return Array.isArray(test) ? anyFactory$j(test) : propsFactory$i(test) } if (typeof test === 'function') { - return castFactory$j(test) + return castFactory$i(test) } throw new Error('Expected function, string, or object as test') @@ -54919,10 +63343,10 @@ function anyFactory$j(tests) { let index = -1; while (++index < tests.length) { - checks[index] = convert$m(tests[index]); + checks[index] = convert$k(tests[index]); } - return castFactory$j(any) + return castFactory$i(any) /** * @this {unknown} @@ -54947,8 +63371,8 @@ function anyFactory$j(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$j(check) { - return castFactory$j(all) +function propsFactory$i(check) { + return castFactory$i(all) /** * @param {Node} node @@ -54975,7 +63399,7 @@ function propsFactory$j(check) { * @returns {AssertAnything} */ function typeFactory$j(check) { - return castFactory$j(type) + return castFactory$i(type) /** * @param {Node} node @@ -54991,7 +63415,7 @@ function typeFactory$j(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$j(check) { +function castFactory$i(check) { return assertion /** @@ -55006,7 +63430,7 @@ function castFactory$j(check) { } // Utility to return true. -function ok$k() { +function ok$j() { return true } @@ -55027,15 +63451,15 @@ function color$k(d) { /** * Continue traversing as normal */ -const CONTINUE$j = true; +const CONTINUE$k = true; /** * Do not traverse this node’s children */ -const SKIP$j = 'skip'; +const SKIP$k = 'skip'; /** * Stop traversing immediately */ -const EXIT$j = false; +const EXIT$k = false; /** * Visit children of tree which pass a test @@ -55045,7 +63469,7 @@ const EXIT$j = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$j = +const visitParents$k = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -55067,7 +63491,7 @@ const visitParents$j = test = null; } - const is = convert$m(test); + const is = convert$k(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -55115,13 +63539,13 @@ const visitParents$j = if (!test || is(node, index, parents[parents.length - 1] || null)) { result = toResult$j(visitor(node, parents)); - if (result[0] === EXIT$j) { + if (result[0] === EXIT$k) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$j) { + if (node.children && result[0] !== SKIP$k) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -55132,7 +63556,7 @@ const visitParents$j = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$j) { + if (subresult[0] === EXIT$k) { return subresult } @@ -55157,7 +63581,7 @@ function toResult$j(value) { } if (typeof value === 'number') { - return [CONTINUE$j, value] + return [CONTINUE$k, value] } return [value] @@ -55199,7 +63623,7 @@ const visit$j = test = null; } - visitParents$j(tree, test, overload, reverse); + visitParents$k(tree, test, overload, reverse); /** * @param {Node} node @@ -55230,15 +63654,15 @@ const visit$j = * @property {PositionLike} [position] */ -var pointStart$d = point$f('start'); -var pointEnd$7 = point$f('end'); +var pointStart$d = point$d('start'); +var pointEnd$7 = point$d('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$f(type) { +function point$d(type) { return point /** @@ -55286,7 +63710,7 @@ function point$f(type) { const label = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/; -const remarkLintDefinitionSpacing = lintRule$j( +const remarkLintDefinitionSpacing = lintRule$m( 'remark-lint:definition-spacing', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { @@ -55312,92 +63736,6 @@ const remarkLintDefinitionSpacing = lintRule$j( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$l(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -55413,13 +63751,13 @@ function wrap$l(middleware, callback) { * @returns {void} */ -const primitives$k = new Set(['string', 'number', 'boolean']); +const primitives$l = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$k(id, rule) { +function lintRule$l(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -55432,7 +63770,7 @@ function lintRule$k(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$k(ruleId, raw); + const [severity, options] = coerce$m(ruleId, raw); if (!severity) return @@ -55441,7 +63779,7 @@ function lintRule$k(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$l(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -55471,7 +63809,7 @@ function lintRule$k(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$k(name, value) { +function coerce$m(name, value) { /** @type {unknown[]} */ let result; @@ -55483,7 +63821,7 @@ function coerce$k(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$k.has(typeof value[0]) + primitives$l.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -55536,7 +63874,7 @@ function coerce$k(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$n = +const convert$j = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -55556,19 +63894,19 @@ const convert$n = */ function (test) { if (test === undefined || test === null) { - return ok$l + return ok$i } if (typeof test === 'string') { - return typeFactory$k(test) + return typeFactory$i(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$k(test) : propsFactory$k(test) + return Array.isArray(test) ? anyFactory$i(test) : propsFactory$h(test) } if (typeof test === 'function') { - return castFactory$k(test) + return castFactory$h(test) } throw new Error('Expected function, string, or object as test') @@ -55578,16 +63916,16 @@ const convert$n = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$k(tests) { +function anyFactory$i(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$n(tests[index]); + checks[index] = convert$j(tests[index]); } - return castFactory$k(any) + return castFactory$h(any) /** * @this {unknown} @@ -55612,8 +63950,8 @@ function anyFactory$k(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$k(check) { - return castFactory$k(all) +function propsFactory$h(check) { + return castFactory$h(all) /** * @param {Node} node @@ -55639,8 +63977,8 @@ function propsFactory$k(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$k(check) { - return castFactory$k(type) +function typeFactory$i(check) { + return castFactory$h(type) /** * @param {Node} node @@ -55656,7 +63994,7 @@ function typeFactory$k(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$k(check) { +function castFactory$h(check) { return assertion /** @@ -55671,7 +64009,7 @@ function castFactory$k(check) { } // Utility to return true. -function ok$l() { +function ok$i() { return true } @@ -55679,7 +64017,7 @@ function ok$l() { * @param {string} d * @returns {string} */ -function color$l(d) { +function color$j(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -55692,15 +64030,15 @@ function color$l(d) { /** * Continue traversing as normal */ -const CONTINUE$k = true; +const CONTINUE$j = true; /** * Do not traverse this node’s children */ -const SKIP$k = 'skip'; +const SKIP$j = 'skip'; /** * Stop traversing immediately */ -const EXIT$k = false; +const EXIT$j = false; /** * Visit children of tree which pass a test @@ -55710,7 +64048,7 @@ const EXIT$k = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$k = +const visitParents$j = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -55732,7 +64070,7 @@ const visitParents$k = test = null; } - const is = convert$n(test); + const is = convert$j(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -55760,7 +64098,7 @@ const visitParents$k = Object.defineProperty(visit, 'name', { value: 'node (' + - color$l(value.type + (name ? '<' + name + '>' : '')) + + color$j(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -55778,15 +64116,15 @@ const visitParents$k = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$k(visitor(node, parents)); + result = toResult$i(visitor(node, parents)); - if (result[0] === EXIT$k) { + if (result[0] === EXIT$j) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$k) { + if (node.children && result[0] !== SKIP$j) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -55797,7 +64135,7 @@ const visitParents$k = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$k) { + if (subresult[0] === EXIT$j) { return subresult } @@ -55816,13 +64154,13 @@ const visitParents$k = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$k(value) { +function toResult$i(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$k, value] + return [CONTINUE$j, value] } return [value] @@ -55843,7 +64181,7 @@ function toResult$k(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$k = +const visit$i = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -55864,7 +64202,7 @@ const visit$k = test = null; } - visitParents$k(tree, test, overload, reverse); + visitParents$j(tree, test, overload, reverse); /** * @param {Node} node @@ -55895,15 +64233,15 @@ const visit$k = * @property {PositionLike} [position] */ -var pointStart$e = point$g('start'); -var pointEnd$8 = point$g('end'); +var pointStart$c = point$c('start'); +var pointEnd$6 = point$c('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$g(type) { +function point$c(type) { return point /** @@ -56009,7 +64347,7 @@ function point$g(type) { const fence = /^ {0,3}([~`])\1{2,}/; -const remarkLintFencedCodeFlag = lintRule$k( +const remarkLintFencedCodeFlag = lintRule$l( 'remark-lint:fenced-code-flag', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option) => { @@ -56030,7 +64368,7 @@ const remarkLintFencedCodeFlag = lintRule$k( } } - visit$k(tree, 'code', (node) => { + visit$i(tree, 'code', (node) => { if (!generated(node)) { if (node.lang) { if (allowed.length > 0 && !allowed.includes(node.lang)) { @@ -56038,8 +64376,8 @@ const remarkLintFencedCodeFlag = lintRule$k( } } else { const slice = value.slice( - pointStart$e(node).offset, - pointEnd$8(node).offset + pointStart$c(node).offset, + pointEnd$6(node).offset ); if (!allowEmpty && fence.test(slice)) { @@ -56051,92 +64389,6 @@ const remarkLintFencedCodeFlag = lintRule$k( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$m(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -56152,13 +64404,13 @@ function wrap$m(middleware, callback) { * @returns {void} */ -const primitives$l = new Set(['string', 'number', 'boolean']); +const primitives$k = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$l(id, rule) { +function lintRule$k(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -56180,7 +64432,7 @@ function lintRule$l(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$m(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -56222,7 +64474,7 @@ function coerce$l(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$l.has(typeof value[0]) + primitives$k.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -56275,7 +64527,7 @@ function coerce$l(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$o = +const convert$i = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -56295,19 +64547,19 @@ const convert$o = */ function (test) { if (test === undefined || test === null) { - return ok$m + return ok$h } if (typeof test === 'string') { - return typeFactory$l(test) + return typeFactory$h(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$l(test) : propsFactory$l(test) + return Array.isArray(test) ? anyFactory$h(test) : propsFactory$g(test) } if (typeof test === 'function') { - return castFactory$l(test) + return castFactory$g(test) } throw new Error('Expected function, string, or object as test') @@ -56317,16 +64569,16 @@ const convert$o = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$l(tests) { +function anyFactory$h(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$o(tests[index]); + checks[index] = convert$i(tests[index]); } - return castFactory$l(any) + return castFactory$g(any) /** * @this {unknown} @@ -56351,8 +64603,8 @@ function anyFactory$l(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$l(check) { - return castFactory$l(all) +function propsFactory$g(check) { + return castFactory$g(all) /** * @param {Node} node @@ -56378,8 +64630,8 @@ function propsFactory$l(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$l(check) { - return castFactory$l(type) +function typeFactory$h(check) { + return castFactory$g(type) /** * @param {Node} node @@ -56395,7 +64647,7 @@ function typeFactory$l(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$l(check) { +function castFactory$g(check) { return assertion /** @@ -56410,7 +64662,7 @@ function castFactory$l(check) { } // Utility to return true. -function ok$m() { +function ok$h() { return true } @@ -56418,7 +64670,7 @@ function ok$m() { * @param {string} d * @returns {string} */ -function color$m(d) { +function color$i(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -56431,15 +64683,15 @@ function color$m(d) { /** * Continue traversing as normal */ -const CONTINUE$l = true; +const CONTINUE$i = true; /** * Do not traverse this node’s children */ -const SKIP$l = 'skip'; +const SKIP$i = 'skip'; /** * Stop traversing immediately */ -const EXIT$l = false; +const EXIT$i = false; /** * Visit children of tree which pass a test @@ -56449,7 +64701,7 @@ const EXIT$l = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$l = +const visitParents$i = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -56471,7 +64723,7 @@ const visitParents$l = test = null; } - const is = convert$o(test); + const is = convert$i(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -56499,7 +64751,7 @@ const visitParents$l = Object.defineProperty(visit, 'name', { value: 'node (' + - color$m(value.type + (name ? '<' + name + '>' : '')) + + color$i(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -56517,15 +64769,15 @@ const visitParents$l = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$l(visitor(node, parents)); + result = toResult$h(visitor(node, parents)); - if (result[0] === EXIT$l) { + if (result[0] === EXIT$i) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$l) { + if (node.children && result[0] !== SKIP$i) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -56536,7 +64788,7 @@ const visitParents$l = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$l) { + if (subresult[0] === EXIT$i) { return subresult } @@ -56555,13 +64807,13 @@ const visitParents$l = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$l(value) { +function toResult$h(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$l, value] + return [CONTINUE$i, value] } return [value] @@ -56582,7 +64834,7 @@ function toResult$l(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$l = +const visit$h = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -56603,7 +64855,7 @@ const visit$l = test = null; } - visitParents$l(tree, test, overload, reverse); + visitParents$i(tree, test, overload, reverse); /** * @param {Node} node @@ -56634,14 +64886,14 @@ const visit$l = * @property {PositionLike} [position] */ -var pointStart$f = point$h('start'); +var pointStart$b = point$b('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$h(type) { +function point$b(type) { return point /** @@ -56754,7 +65006,7 @@ function point$h(type) { * 1:1: Incorrect fenced code marker `💩`: use either `'consistent'`, `` '`' ``, or `'~'` */ -const remarkLintFencedCodeMarker = lintRule$l( +const remarkLintFencedCodeMarker = lintRule$k( 'remark-lint:fenced-code-marker', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { @@ -56768,8 +65020,8 @@ const remarkLintFencedCodeMarker = lintRule$l( ); } - visit$l(tree, 'code', (node) => { - const start = pointStart$f(node).offset; + visit$h(tree, 'code', (node) => { + const start = pointStart$b(node).offset; if (typeof start === 'number') { const marker = contents @@ -56795,92 +65047,6 @@ const remarkLintFencedCodeMarker = lintRule$l( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$n(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -56896,13 +65062,13 @@ function wrap$n(middleware, callback) { * @returns {void} */ -const primitives$m = new Set(['string', 'number', 'boolean']); +const primitives$j = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$m(id, rule) { +function lintRule$j(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -56915,7 +65081,7 @@ function lintRule$m(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$m(ruleId, raw); + const [severity, options] = coerce$k(ruleId, raw); if (!severity) return @@ -56924,7 +65090,7 @@ function lintRule$m(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$n(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -56954,7 +65120,7 @@ function lintRule$m(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$m(name, value) { +function coerce$k(name, value) { /** @type {unknown[]} */ let result; @@ -56966,7 +65132,7 @@ function coerce$m(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$m.has(typeof value[0]) + primitives$j.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -57037,7 +65203,7 @@ function coerce$m(name, value) { * {"name": "readme.mkd", "setting": "mkd"} */ -const remarkLintFileExtension = lintRule$m( +const remarkLintFileExtension = lintRule$j( 'remark-lint:file-extension', /** @type {import('unified-lint-rule').Rule} */ (_, file, option = 'md') => { @@ -57049,92 +65215,6 @@ const remarkLintFileExtension = lintRule$m( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$o(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -57150,13 +65230,13 @@ function wrap$o(middleware, callback) { * @returns {void} */ -const primitives$n = new Set(['string', 'number', 'boolean']); +const primitives$i = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$n(id, rule) { +function lintRule$i(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -57169,7 +65249,7 @@ function lintRule$n(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$n(ruleId, raw); + const [severity, options] = coerce$j(ruleId, raw); if (!severity) return @@ -57178,7 +65258,7 @@ function lintRule$n(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$o(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -57208,7 +65288,7 @@ function lintRule$n(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$n(name, value) { +function coerce$j(name, value) { /** @type {unknown[]} */ let result; @@ -57220,7 +65300,7 @@ function coerce$n(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$n.has(typeof value[0]) + primitives$i.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -57273,7 +65353,7 @@ function coerce$n(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$p = +const convert$h = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -57293,19 +65373,19 @@ const convert$p = */ function (test) { if (test === undefined || test === null) { - return ok$n + return ok$g } if (typeof test === 'string') { - return typeFactory$m(test) + return typeFactory$g(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$m(test) : propsFactory$m(test) + return Array.isArray(test) ? anyFactory$g(test) : propsFactory$f(test) } if (typeof test === 'function') { - return castFactory$m(test) + return castFactory$f(test) } throw new Error('Expected function, string, or object as test') @@ -57315,16 +65395,16 @@ const convert$p = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$m(tests) { +function anyFactory$g(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$p(tests[index]); + checks[index] = convert$h(tests[index]); } - return castFactory$m(any) + return castFactory$f(any) /** * @this {unknown} @@ -57349,8 +65429,8 @@ function anyFactory$m(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$m(check) { - return castFactory$m(all) +function propsFactory$f(check) { + return castFactory$f(all) /** * @param {Node} node @@ -57376,8 +65456,8 @@ function propsFactory$m(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$m(check) { - return castFactory$m(type) +function typeFactory$g(check) { + return castFactory$f(type) /** * @param {Node} node @@ -57393,7 +65473,7 @@ function typeFactory$m(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$m(check) { +function castFactory$f(check) { return assertion /** @@ -57408,7 +65488,7 @@ function castFactory$m(check) { } // Utility to return true. -function ok$n() { +function ok$g() { return true } @@ -57416,7 +65496,7 @@ function ok$n() { * @param {string} d * @returns {string} */ -function color$n(d) { +function color$h(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -57429,15 +65509,15 @@ function color$n(d) { /** * Continue traversing as normal */ -const CONTINUE$m = true; +const CONTINUE$h = true; /** * Do not traverse this node’s children */ -const SKIP$m = 'skip'; +const SKIP$h = 'skip'; /** * Stop traversing immediately */ -const EXIT$m = false; +const EXIT$h = false; /** * Visit children of tree which pass a test @@ -57447,7 +65527,7 @@ const EXIT$m = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$m = +const visitParents$h = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -57469,7 +65549,7 @@ const visitParents$m = test = null; } - const is = convert$p(test); + const is = convert$h(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -57497,7 +65577,7 @@ const visitParents$m = Object.defineProperty(visit, 'name', { value: 'node (' + - color$n(value.type + (name ? '<' + name + '>' : '')) + + color$h(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -57515,15 +65595,15 @@ const visitParents$m = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$m(visitor(node, parents)); + result = toResult$g(visitor(node, parents)); - if (result[0] === EXIT$m) { + if (result[0] === EXIT$h) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$m) { + if (node.children && result[0] !== SKIP$h) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -57534,7 +65614,7 @@ const visitParents$m = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$m) { + if (subresult[0] === EXIT$h) { return subresult } @@ -57553,13 +65633,13 @@ const visitParents$m = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$m(value) { +function toResult$g(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$m, value] + return [CONTINUE$h, value] } return [value] @@ -57580,7 +65660,7 @@ function toResult$m(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$m = +const visit$g = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -57601,7 +65681,7 @@ const visit$m = test = null; } - visitParents$m(tree, test, overload, reverse); + visitParents$h(tree, test, overload, reverse); /** * @param {Node} node @@ -57632,14 +65712,14 @@ const visit$m = * @property {PositionLike} [position] */ -var pointStart$g = point$i('start'); +var pointStart$a = point$a('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$i(type) { +function point$a(type) { return point /** @@ -57703,13 +65783,13 @@ function point$i(type) { * [example-2]: http://example.com/two/ */ -const remarkLintFinalDefinition = lintRule$n( +const remarkLintFinalDefinition = lintRule$i( 'remark-lint:final-definition', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { let last = 0; - visit$m( + visit$g( tree, (node) => { // Ignore generated and HTML comment nodes. @@ -57721,7 +65801,7 @@ const remarkLintFinalDefinition = lintRule$n( return } - const line = pointStart$g(node).line; + const line = pointStart$a(node).line; if (node.type === 'definition') { if (last && last > line) { @@ -57741,92 +65821,6 @@ const remarkLintFinalDefinition = lintRule$n( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$p(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -57842,13 +65836,13 @@ function wrap$p(middleware, callback) { * @returns {void} */ -const primitives$o = new Set(['string', 'number', 'boolean']); +const primitives$h = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$o(id, rule) { +function lintRule$h(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -57861,7 +65855,7 @@ function lintRule$o(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$o(ruleId, raw); + const [severity, options] = coerce$i(ruleId, raw); if (!severity) return @@ -57870,7 +65864,7 @@ function lintRule$o(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$p(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -57900,7 +65894,7 @@ function lintRule$o(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$o(name, value) { +function coerce$i(name, value) { /** @type {unknown[]} */ let result; @@ -57912,7 +65906,7 @@ function coerce$o(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$o.has(typeof value[0]) + primitives$h.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -57965,7 +65959,7 @@ function coerce$o(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$q = +const convert$g = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -57985,19 +65979,19 @@ const convert$q = */ function (test) { if (test === undefined || test === null) { - return ok$o + return ok$f } if (typeof test === 'string') { - return typeFactory$n(test) + return typeFactory$f(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$n(test) : propsFactory$n(test) + return Array.isArray(test) ? anyFactory$f(test) : propsFactory$e(test) } if (typeof test === 'function') { - return castFactory$n(test) + return castFactory$e(test) } throw new Error('Expected function, string, or object as test') @@ -58007,16 +66001,16 @@ const convert$q = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$n(tests) { +function anyFactory$f(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$q(tests[index]); + checks[index] = convert$g(tests[index]); } - return castFactory$n(any) + return castFactory$e(any) /** * @this {unknown} @@ -58041,8 +66035,8 @@ function anyFactory$n(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$n(check) { - return castFactory$n(all) +function propsFactory$e(check) { + return castFactory$e(all) /** * @param {Node} node @@ -58068,8 +66062,8 @@ function propsFactory$n(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$n(check) { - return castFactory$n(type) +function typeFactory$f(check) { + return castFactory$e(type) /** * @param {Node} node @@ -58085,7 +66079,7 @@ function typeFactory$n(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$n(check) { +function castFactory$e(check) { return assertion /** @@ -58100,7 +66094,7 @@ function castFactory$n(check) { } // Utility to return true. -function ok$o() { +function ok$f() { return true } @@ -58108,7 +66102,7 @@ function ok$o() { * @param {string} d * @returns {string} */ -function color$o(d) { +function color$g(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -58121,15 +66115,15 @@ function color$o(d) { /** * Continue traversing as normal */ -const CONTINUE$n = true; +const CONTINUE$g = true; /** * Do not traverse this node’s children */ -const SKIP$n = 'skip'; +const SKIP$g = 'skip'; /** * Stop traversing immediately */ -const EXIT$n = false; +const EXIT$g = false; /** * Visit children of tree which pass a test @@ -58139,7 +66133,7 @@ const EXIT$n = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$n = +const visitParents$g = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -58161,7 +66155,7 @@ const visitParents$n = test = null; } - const is = convert$q(test); + const is = convert$g(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -58189,7 +66183,7 @@ const visitParents$n = Object.defineProperty(visit, 'name', { value: 'node (' + - color$o(value.type + (name ? '<' + name + '>' : '')) + + color$g(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -58207,15 +66201,15 @@ const visitParents$n = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$n(visitor(node, parents)); + result = toResult$f(visitor(node, parents)); - if (result[0] === EXIT$n) { + if (result[0] === EXIT$g) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$n) { + if (node.children && result[0] !== SKIP$g) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -58226,7 +66220,7 @@ const visitParents$n = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$n) { + if (subresult[0] === EXIT$g) { return subresult } @@ -58245,13 +66239,13 @@ const visitParents$n = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$n(value) { +function toResult$f(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$n, value] + return [CONTINUE$g, value] } return [value] @@ -58272,7 +66266,7 @@ function toResult$n(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$n = +const visit$f = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -58293,7 +66287,7 @@ const visit$n = test = null; } - visitParents$n(tree, test, overload, reverse); + visitParents$g(tree, test, overload, reverse); /** * @param {Node} node @@ -58402,13 +66396,13 @@ const visit$n = * 1:1-1:14: First heading level should be `2` */ -const re$1 = /} */ (tree, file, option = 1) => { - visit$n(tree, (node) => { + visit$f(tree, (node) => { if (!generated(node)) { /** @type {Depth|undefined} */ let rank; @@ -58424,7 +66418,7 @@ const remarkLintFirstHeadingLevel = lintRule$o( file.message('First heading level should be `' + option + '`', node); } - return EXIT$n + return EXIT$g } } }); @@ -58436,97 +66430,11 @@ const remarkLintFirstHeadingLevel = lintRule$o( * @returns {Depth|undefined} */ function infer(node) { - const results = node.value.match(re$1); + const results = node.value.match(re$3); // @ts-expect-error: can be castes fine. return results ? Number(results[1]) : undefined } -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$q(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -58542,13 +66450,13 @@ function wrap$q(middleware, callback) { * @returns {void} */ -const primitives$p = new Set(['string', 'number', 'boolean']); +const primitives$g = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$p(id, rule) { +function lintRule$g(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -58561,7 +66469,7 @@ function lintRule$p(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$p(ruleId, raw); + const [severity, options] = coerce$h(ruleId, raw); if (!severity) return @@ -58570,7 +66478,7 @@ function lintRule$p(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$q(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -58600,7 +66508,7 @@ function lintRule$p(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$p(name, value) { +function coerce$h(name, value) { /** @type {unknown[]} */ let result; @@ -58612,7 +66520,7 @@ function coerce$p(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$p.has(typeof value[0]) + primitives$g.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -58665,7 +66573,7 @@ function coerce$p(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$r = +const convert$f = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -58685,19 +66593,19 @@ const convert$r = */ function (test) { if (test === undefined || test === null) { - return ok$p + return ok$e } if (typeof test === 'string') { - return typeFactory$o(test) + return typeFactory$e(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$o(test) : propsFactory$o(test) + return Array.isArray(test) ? anyFactory$e(test) : propsFactory$d(test) } if (typeof test === 'function') { - return castFactory$o(test) + return castFactory$d(test) } throw new Error('Expected function, string, or object as test') @@ -58707,16 +66615,16 @@ const convert$r = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$o(tests) { +function anyFactory$e(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$r(tests[index]); + checks[index] = convert$f(tests[index]); } - return castFactory$o(any) + return castFactory$d(any) /** * @this {unknown} @@ -58741,8 +66649,8 @@ function anyFactory$o(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$o(check) { - return castFactory$o(all) +function propsFactory$d(check) { + return castFactory$d(all) /** * @param {Node} node @@ -58768,8 +66676,8 @@ function propsFactory$o(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$o(check) { - return castFactory$o(type) +function typeFactory$e(check) { + return castFactory$d(type) /** * @param {Node} node @@ -58785,7 +66693,7 @@ function typeFactory$o(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$o(check) { +function castFactory$d(check) { return assertion /** @@ -58800,7 +66708,7 @@ function castFactory$o(check) { } // Utility to return true. -function ok$p() { +function ok$e() { return true } @@ -58808,7 +66716,7 @@ function ok$p() { * @param {string} d * @returns {string} */ -function color$p(d) { +function color$f(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -58821,15 +66729,15 @@ function color$p(d) { /** * Continue traversing as normal */ -const CONTINUE$o = true; +const CONTINUE$f = true; /** * Do not traverse this node’s children */ -const SKIP$o = 'skip'; +const SKIP$f = 'skip'; /** * Stop traversing immediately */ -const EXIT$o = false; +const EXIT$f = false; /** * Visit children of tree which pass a test @@ -58839,7 +66747,7 @@ const EXIT$o = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$o = +const visitParents$f = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -58861,7 +66769,7 @@ const visitParents$o = test = null; } - const is = convert$r(test); + const is = convert$f(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -58889,7 +66797,7 @@ const visitParents$o = Object.defineProperty(visit, 'name', { value: 'node (' + - color$p(value.type + (name ? '<' + name + '>' : '')) + + color$f(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -58907,15 +66815,15 @@ const visitParents$o = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$o(visitor(node, parents)); + result = toResult$e(visitor(node, parents)); - if (result[0] === EXIT$o) { + if (result[0] === EXIT$f) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$o) { + if (node.children && result[0] !== SKIP$f) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -58926,7 +66834,7 @@ const visitParents$o = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$o) { + if (subresult[0] === EXIT$f) { return subresult } @@ -58945,13 +66853,13 @@ const visitParents$o = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$o(value) { +function toResult$e(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$o, value] + return [CONTINUE$f, value] } return [value] @@ -58972,7 +66880,7 @@ function toResult$o(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$o = +const visit$e = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -58993,7 +66901,7 @@ const visit$o = test = null; } - visitParents$o(tree, test, overload, reverse); + visitParents$f(tree, test, overload, reverse); /** * @param {Node} node @@ -59088,7 +66996,7 @@ const visit$o = * 1:1: Incorrect heading style type `💩`: use either `'consistent'`, `'atx'`, `'atx-closed'`, or `'setext'` */ -const remarkLintHeadingStyle = lintRule$p( +const remarkLintHeadingStyle = lintRule$g( 'remark-lint:heading-style', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { @@ -59105,7 +67013,7 @@ const remarkLintHeadingStyle = lintRule$p( ); } - visit$o(tree, 'heading', (node) => { + visit$e(tree, 'heading', (node) => { if (!generated(node)) { if (option === 'consistent') { // Funky nodes perhaps cannot be detected. @@ -59119,92 +67027,6 @@ const remarkLintHeadingStyle = lintRule$p( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$r(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -59220,13 +67042,13 @@ function wrap$r(middleware, callback) { * @returns {void} */ -const primitives$q = new Set(['string', 'number', 'boolean']); +const primitives$f = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$q(id, rule) { +function lintRule$f(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -59239,7 +67061,7 @@ function lintRule$q(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$q(ruleId, raw); + const [severity, options] = coerce$g(ruleId, raw); if (!severity) return @@ -59248,7 +67070,7 @@ function lintRule$q(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$r(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -59278,7 +67100,7 @@ function lintRule$q(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$q(name, value) { +function coerce$g(name, value) { /** @type {unknown[]} */ let result; @@ -59290,7 +67112,7 @@ function coerce$q(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$q.has(typeof value[0]) + primitives$f.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -59343,7 +67165,7 @@ function coerce$q(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$s = +const convert$e = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -59363,19 +67185,19 @@ const convert$s = */ function (test) { if (test === undefined || test === null) { - return ok$q + return ok$d } if (typeof test === 'string') { - return typeFactory$p(test) + return typeFactory$d(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$p(test) : propsFactory$p(test) + return Array.isArray(test) ? anyFactory$d(test) : propsFactory$c(test) } if (typeof test === 'function') { - return castFactory$p(test) + return castFactory$c(test) } throw new Error('Expected function, string, or object as test') @@ -59385,16 +67207,16 @@ const convert$s = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$p(tests) { +function anyFactory$d(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$s(tests[index]); + checks[index] = convert$e(tests[index]); } - return castFactory$p(any) + return castFactory$c(any) /** * @this {unknown} @@ -59419,8 +67241,8 @@ function anyFactory$p(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$p(check) { - return castFactory$p(all) +function propsFactory$c(check) { + return castFactory$c(all) /** * @param {Node} node @@ -59446,8 +67268,8 @@ function propsFactory$p(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$p(check) { - return castFactory$p(type) +function typeFactory$d(check) { + return castFactory$c(type) /** * @param {Node} node @@ -59463,7 +67285,7 @@ function typeFactory$p(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$p(check) { +function castFactory$c(check) { return assertion /** @@ -59478,7 +67300,7 @@ function castFactory$p(check) { } // Utility to return true. -function ok$q() { +function ok$d() { return true } @@ -59486,7 +67308,7 @@ function ok$q() { * @param {string} d * @returns {string} */ -function color$q(d) { +function color$e(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -59499,15 +67321,15 @@ function color$q(d) { /** * Continue traversing as normal */ -const CONTINUE$p = true; +const CONTINUE$e = true; /** * Do not traverse this node’s children */ -const SKIP$p = 'skip'; +const SKIP$e = 'skip'; /** * Stop traversing immediately */ -const EXIT$p = false; +const EXIT$e = false; /** * Visit children of tree which pass a test @@ -59517,7 +67339,7 @@ const EXIT$p = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$p = +const visitParents$e = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -59539,7 +67361,7 @@ const visitParents$p = test = null; } - const is = convert$s(test); + const is = convert$e(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -59567,7 +67389,7 @@ const visitParents$p = Object.defineProperty(visit, 'name', { value: 'node (' + - color$q(value.type + (name ? '<' + name + '>' : '')) + + color$e(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -59585,15 +67407,15 @@ const visitParents$p = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$p(visitor(node, parents)); + result = toResult$d(visitor(node, parents)); - if (result[0] === EXIT$p) { + if (result[0] === EXIT$e) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$p) { + if (node.children && result[0] !== SKIP$e) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -59604,7 +67426,7 @@ const visitParents$p = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$p) { + if (subresult[0] === EXIT$e) { return subresult } @@ -59623,13 +67445,13 @@ const visitParents$p = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$p(value) { +function toResult$d(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$p, value] + return [CONTINUE$e, value] } return [value] @@ -59650,7 +67472,7 @@ function toResult$p(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$p = +const visit$d = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -59671,7 +67493,7 @@ const visit$p = test = null; } - visitParents$p(tree, test, overload, reverse); + visitParents$e(tree, test, overload, reverse); /** * @param {Node} node @@ -59702,15 +67524,15 @@ const visit$p = * @property {PositionLike} [position] */ -var pointStart$h = point$j('start'); -var pointEnd$9 = point$j('end'); +var pointStart$9 = point$9('start'); +var pointEnd$5 = point$9('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$j(type) { +function point$9(type) { return point /** @@ -59830,14 +67652,14 @@ function point$j(type) { * 4:12: Line must be at most 10 characters */ -const remarkLintMaximumLineLength = lintRule$q( +const remarkLintMaximumLineLength = lintRule$f( 'remark-lint:maximum-line-length', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 80) => { const value = String(file); const lines = value.split(/\r?\n/); - visit$p(tree, (node) => { + visit$d(tree, (node) => { if ( (node.type === 'heading' || node.type === 'table' || @@ -59851,7 +67673,7 @@ const remarkLintMaximumLineLength = lintRule$q( node.type === 'toml') && !generated(node) ) { - allowList(pointStart$h(node).line - 1, pointEnd$9(node).line); + allowList(pointStart$9(node).line - 1, pointEnd$5(node).line); } }); @@ -59859,7 +67681,7 @@ const remarkLintMaximumLineLength = lintRule$q( // the wrap. // However, when they do, and there’s whitespace after it, they are not // allowed. - visit$p(tree, (node, pos, parent_) => { + visit$d(tree, (node, pos, parent_) => { const parent = /** @type {Parent} */ (parent_); if ( @@ -59870,8 +67692,8 @@ const remarkLintMaximumLineLength = lintRule$q( parent && typeof pos === 'number' ) { - const initial = pointStart$h(node); - const final = pointEnd$9(node); + const initial = pointStart$9(node); + const final = pointEnd$5(node); // Not allowing when starting after the border, or ending before it. if (initial.column > option || final.column < option) { @@ -59883,7 +67705,7 @@ const remarkLintMaximumLineLength = lintRule$q( // Not allowing when there’s whitespace after the link. if ( next && - pointStart$h(next).line === initial.line && + pointStart$9(next).line === initial.line && (!('value' in next) || /^(.+?[ \t].+?)/.test(next.value)) ) { return @@ -59910,102 +67732,16 @@ const remarkLintMaximumLineLength = lintRule$q( /** * Allowlist from `initial` to `final`, zero-based. * - * @param {number} initial - * @param {number} final - */ - function allowList(initial, final) { - while (initial < final) { - lines[initial++] = ''; - } - } - } -); - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$s(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); + * @param {number} initial + * @param {number} final + */ + function allowList(initial, final) { + while (initial < final) { + lines[initial++] = ''; + } } } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} +); /** * @typedef {import('unist').Node} Node @@ -60022,13 +67758,13 @@ function wrap$s(middleware, callback) { * @returns {void} */ -const primitives$r = new Set(['string', 'number', 'boolean']); +const primitives$e = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$r(id, rule) { +function lintRule$e(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -60041,7 +67777,7 @@ function lintRule$r(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$r(ruleId, raw); + const [severity, options] = coerce$f(ruleId, raw); if (!severity) return @@ -60050,7 +67786,7 @@ function lintRule$r(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$s(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -60080,7 +67816,7 @@ function lintRule$r(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$r(name, value) { +function coerce$f(name, value) { /** @type {unknown[]} */ let result; @@ -60092,7 +67828,7 @@ function coerce$r(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$r.has(typeof value[0]) + primitives$e.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -60145,7 +67881,7 @@ function coerce$r(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$t = +const convert$d = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -60165,19 +67901,19 @@ const convert$t = */ function (test) { if (test === undefined || test === null) { - return ok$r + return ok$c } if (typeof test === 'string') { - return typeFactory$q(test) + return typeFactory$c(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$q(test) : propsFactory$q(test) + return Array.isArray(test) ? anyFactory$c(test) : propsFactory$b(test) } if (typeof test === 'function') { - return castFactory$q(test) + return castFactory$b(test) } throw new Error('Expected function, string, or object as test') @@ -60187,16 +67923,16 @@ const convert$t = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$q(tests) { +function anyFactory$c(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$t(tests[index]); + checks[index] = convert$d(tests[index]); } - return castFactory$q(any) + return castFactory$b(any) /** * @this {unknown} @@ -60221,8 +67957,8 @@ function anyFactory$q(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$q(check) { - return castFactory$q(all) +function propsFactory$b(check) { + return castFactory$b(all) /** * @param {Node} node @@ -60248,8 +67984,8 @@ function propsFactory$q(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$q(check) { - return castFactory$q(type) +function typeFactory$c(check) { + return castFactory$b(type) /** * @param {Node} node @@ -60265,7 +68001,7 @@ function typeFactory$q(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$q(check) { +function castFactory$b(check) { return assertion /** @@ -60280,7 +68016,7 @@ function castFactory$q(check) { } // Utility to return true. -function ok$r() { +function ok$c() { return true } @@ -60288,7 +68024,7 @@ function ok$r() { * @param {string} d * @returns {string} */ -function color$r(d) { +function color$d(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -60301,15 +68037,15 @@ function color$r(d) { /** * Continue traversing as normal */ -const CONTINUE$q = true; +const CONTINUE$d = true; /** * Do not traverse this node’s children */ -const SKIP$q = 'skip'; +const SKIP$d = 'skip'; /** * Stop traversing immediately */ -const EXIT$q = false; +const EXIT$d = false; /** * Visit children of tree which pass a test @@ -60319,7 +68055,7 @@ const EXIT$q = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$q = +const visitParents$d = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -60341,7 +68077,7 @@ const visitParents$q = test = null; } - const is = convert$t(test); + const is = convert$d(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -60369,7 +68105,7 @@ const visitParents$q = Object.defineProperty(visit, 'name', { value: 'node (' + - color$r(value.type + (name ? '<' + name + '>' : '')) + + color$d(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -60387,15 +68123,15 @@ const visitParents$q = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$q(visitor(node, parents)); + result = toResult$c(visitor(node, parents)); - if (result[0] === EXIT$q) { + if (result[0] === EXIT$d) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$q) { + if (node.children && result[0] !== SKIP$d) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -60406,7 +68142,7 @@ const visitParents$q = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$q) { + if (subresult[0] === EXIT$d) { return subresult } @@ -60425,13 +68161,13 @@ const visitParents$q = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$q(value) { +function toResult$c(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$q, value] + return [CONTINUE$d, value] } return [value] @@ -60452,7 +68188,7 @@ function toResult$q(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$q = +const visit$c = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -60473,7 +68209,7 @@ const visit$q = test = null; } - visitParents$q(tree, test, overload, reverse); + visitParents$d(tree, test, overload, reverse); /** * @param {Node} node @@ -60504,15 +68240,15 @@ const visit$q = * @property {PositionLike} [position] */ -var pointStart$i = point$k('start'); -var pointEnd$a = point$k('end'); +var pointStart$8 = point$8('start'); +var pointEnd$4 = point$8('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$k(type) { +function point$8(type) { return point /** @@ -60580,17 +68316,17 @@ function point$k(type) { * 4:5: Remove 2 lines after node */ -const remarkLintNoConsecutiveBlankLines = lintRule$r( +const remarkLintNoConsecutiveBlankLines = lintRule$e( 'remark-lint:no-consecutive-blank-lines', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$q(tree, (node) => { + visit$c(tree, (node) => { if (!generated(node) && 'children' in node) { const head = node.children[0]; if (head && !generated(head)) { // Compare parent and first child. - compare(pointStart$i(node), pointStart$i(head), 0); + compare(pointStart$8(node), pointStart$8(head), 0); // Compare between each child. let index = -1; @@ -60600,7 +68336,7 @@ const remarkLintNoConsecutiveBlankLines = lintRule$r( const child = node.children[index]; if (previous && !generated(previous) && !generated(child)) { - compare(pointEnd$a(previous), pointStart$i(child), 2); + compare(pointEnd$4(previous), pointStart$8(child), 2); } } @@ -60608,7 +68344,7 @@ const remarkLintNoConsecutiveBlankLines = lintRule$r( // Compare parent and last child. if (tail !== head && !generated(tail)) { - compare(pointEnd$a(node), pointEnd$a(tail), 1); + compare(pointEnd$4(node), pointEnd$4(tail), 1); } } } @@ -60631,7 +68367,7 @@ const remarkLintNoConsecutiveBlankLines = lintRule$r( 'Remove ' + lines + ' ' + - pluralize('line', Math.abs(lines)) + + plural('line', Math.abs(lines)) + ' ' + (diff > 0 ? 'before' : 'after') + ' node', @@ -60642,92 +68378,6 @@ const remarkLintNoConsecutiveBlankLines = lintRule$r( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$t(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -60743,13 +68393,13 @@ function wrap$t(middleware, callback) { * @returns {void} */ -const primitives$s = new Set(['string', 'number', 'boolean']); +const primitives$d = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$s(id, rule) { +function lintRule$d(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -60762,7 +68412,7 @@ function lintRule$s(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$s(ruleId, raw); + const [severity, options] = coerce$e(ruleId, raw); if (!severity) return @@ -60771,7 +68421,7 @@ function lintRule$s(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$t(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -60801,7 +68451,7 @@ function lintRule$s(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$s(name, value) { +function coerce$e(name, value) { /** @type {unknown[]} */ let result; @@ -60813,7 +68463,7 @@ function coerce$s(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$s.has(typeof value[0]) + primitives$d.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -60888,7 +68538,7 @@ function coerce$s(name, value) { * 1:1: Do not start file names with `an` */ -const remarkLintNoFileNameArticles = lintRule$s( +const remarkLintNoFileNameArticles = lintRule$d( 'remark-lint:no-file-name-articles', /** @type {import('unified-lint-rule').Rule} */ (_, file) => { @@ -60900,333 +68550,6 @@ const remarkLintNoFileNameArticles = lintRule$s( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$u(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ - -const primitives$t = new Set(['string', 'number', 'boolean']); - -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule$t(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - - Object.defineProperty(plugin, 'name', {value: id}); - - return plugin - - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$t(ruleId, raw); - - if (!severity) return - - const fatal = severity === 2; - - return (tree, file, next) => { - let index = file.messages.length - 1; - - wrap$u(rule, (error) => { - const messages = file.messages; - - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } - - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } - - next(); - })(tree, file, options); - } - } -} - -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$t(name, value) { - /** @type {unknown[]} */ - let result; - - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$t.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } - - let level = result[0]; - - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } - - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } - - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. - return result -} - -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-file-name-consecutive-dashes - * @fileoverview - * Warn when file names contain consecutive dashes. - * - * @example - * {"name": "plug-ins.md"} - * - * @example - * {"name": "plug--ins.md", "label": "output", "positionless": true} - * - * 1:1: Do not use consecutive dashes in a file name - */ - -const remarkLintNoFileNameConsecutiveDashes = lintRule$t( - 'remark-lint:no-file-name-consecutive-dashes', - /** @type {import('unified-lint-rule').Rule} */ - (_, file) => { - if (file.stem && /-{2,}/.test(file.stem)) { - file.message('Do not use consecutive dashes in a file name'); - } - } -); - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$v(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -61242,13 +68565,13 @@ function wrap$v(middleware, callback) { * @returns {void} */ -const primitives$u = new Set(['string', 'number', 'boolean']); +const primitives$c = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$u(id, rule) { +function lintRule$c(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -61261,7 +68584,7 @@ function lintRule$u(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$u(ruleId, raw); + const [severity, options] = coerce$d(ruleId, raw); if (!severity) return @@ -61270,7 +68593,7 @@ function lintRule$u(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$v(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -61300,7 +68623,7 @@ function lintRule$u(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$u(name, value) { +function coerce$d(name, value) { /** @type {unknown[]} */ let result; @@ -61312,7 +68635,7 @@ function coerce$u(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$u.has(typeof value[0]) + primitives$c.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -61359,120 +68682,189 @@ function coerce$u(name, value) { * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT - * @module no-file-name-outer-dashes + * @module no-file-name-consecutive-dashes * @fileoverview - * Warn when file names contain initial or final dashes (hyphen-minus, `-`). - * - * @example - * {"name": "readme.md"} + * Warn when file names contain consecutive dashes. * * @example - * {"name": "-readme.md", "label": "output", "positionless": true} - * - * 1:1: Do not use initial or final dashes in a file name + * {"name": "plug-ins.md"} * * @example - * {"name": "readme-.md", "label": "output", "positionless": true} + * {"name": "plug--ins.md", "label": "output", "positionless": true} * - * 1:1: Do not use initial or final dashes in a file name + * 1:1: Do not use consecutive dashes in a file name */ -const remarkLintNofileNameOuterDashes = lintRule$u( - 'remark-lint:no-file-name-outer-dashes', +const remarkLintNoFileNameConsecutiveDashes = lintRule$c( + 'remark-lint:no-file-name-consecutive-dashes', /** @type {import('unified-lint-rule').Rule} */ (_, file) => { - if (file.stem && /^-|-$/.test(file.stem)) { - file.message('Do not use initial or final dashes in a file name'); + if (file.stem && /-{2,}/.test(file.stem)) { + file.message('Do not use consecutive dashes in a file name'); } } ); /** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFile} VFile * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline + * @typedef {0|1|2} Severity + * @typedef {'warn'|'on'|'off'|'error'} Label + * @typedef {[Severity, ...unknown[]]} SeverityTuple + * + * @callback Rule + * @param {Node} tree + * @param {VFile} file + * @param {unknown} options + * @returns {void} */ +const primitives$b = new Set(['string', 'number', 'boolean']); + /** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback + * @param {string} id + * @param {Rule} rule */ -function wrap$w(middleware, callback) { - /** @type {boolean} */ - let called; +function lintRule$b(id, rule) { + const parts = id.split(':'); + // Possibly useful if externalised later. + /* c8 ignore next */ + const source = parts[1] ? parts[0] : undefined; + const ruleId = parts[1]; - return wrapped + Object.defineProperty(plugin, 'name', {value: id}); - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; + return plugin - if (fnExpectsCallback) { - parameters.push(done); - } + /** @type {import('unified').Plugin<[unknown]|void[]>} */ + function plugin(raw) { + const [severity, options] = coerce$c(ruleId, raw); - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; + if (!severity) return - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } + const fatal = severity === 2; - return done(exception) - } + return (tree, file, next) => { + let index = file.messages.length - 1; - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } + wrap(rule, (error) => { + const messages = file.messages; + + // Add the error, if not already properly added. + // Only happens for incorrect plugins. + /* c8 ignore next 6 */ + // @ts-expect-error: errors could be `messages`. + if (error && !messages.includes(error)) { + try { + file.fail(error); + } catch {} + } + + while (++index < messages.length) { + Object.assign(messages[index], {ruleId, source, fatal}); + } + + next(); + })(tree, file, options); } } +} - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); +/** + * Coerce a value to a severity--options tuple. + * + * @param {string} name + * @param {unknown} value + * @returns {SeverityTuple} + */ +function coerce$c(name, value) { + /** @type {unknown[]} */ + let result; + + if (typeof value === 'boolean') { + result = [value]; + } else if (value === null || value === undefined) { + result = [1]; + } else if ( + Array.isArray(value) && + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + primitives$b.has(typeof value[0]) + ) { + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + result = [...value]; + } else { + result = [1, value]; + } + + let level = result[0]; + + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; } } - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); + if (typeof level !== 'number' || level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) } + + result[0] = level; + + // @ts-expect-error: it’s now a valid tuple. + return result } +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module no-file-name-outer-dashes + * @fileoverview + * Warn when file names contain initial or final dashes (hyphen-minus, `-`). + * + * @example + * {"name": "readme.md"} + * + * @example + * {"name": "-readme.md", "label": "output", "positionless": true} + * + * 1:1: Do not use initial or final dashes in a file name + * + * @example + * {"name": "readme-.md", "label": "output", "positionless": true} + * + * 1:1: Do not use initial or final dashes in a file name + */ + +const remarkLintNofileNameOuterDashes = lintRule$b( + 'remark-lint:no-file-name-outer-dashes', + /** @type {import('unified-lint-rule').Rule} */ + (_, file) => { + if (file.stem && /^-|-$/.test(file.stem)) { + file.message('Do not use initial or final dashes in a file name'); + } + } +); + /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -61488,13 +68880,13 @@ function wrap$w(middleware, callback) { * @returns {void} */ -const primitives$v = new Set(['string', 'number', 'boolean']); +const primitives$a = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$v(id, rule) { +function lintRule$a(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -61507,7 +68899,7 @@ function lintRule$v(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$v(ruleId, raw); + const [severity, options] = coerce$b(ruleId, raw); if (!severity) return @@ -61516,7 +68908,7 @@ function lintRule$v(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$w(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -61546,7 +68938,7 @@ function lintRule$v(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$v(name, value) { +function coerce$b(name, value) { /** @type {unknown[]} */ let result; @@ -61558,7 +68950,7 @@ function coerce$v(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$v.has(typeof value[0]) + primitives$a.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -61611,7 +69003,7 @@ function coerce$v(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$u = +const convert$c = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -61631,19 +69023,19 @@ const convert$u = */ function (test) { if (test === undefined || test === null) { - return ok$s + return ok$b } if (typeof test === 'string') { - return typeFactory$r(test) + return typeFactory$b(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$r(test) : propsFactory$r(test) + return Array.isArray(test) ? anyFactory$b(test) : propsFactory$a(test) } if (typeof test === 'function') { - return castFactory$r(test) + return castFactory$a(test) } throw new Error('Expected function, string, or object as test') @@ -61653,16 +69045,16 @@ const convert$u = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$r(tests) { +function anyFactory$b(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$u(tests[index]); + checks[index] = convert$c(tests[index]); } - return castFactory$r(any) + return castFactory$a(any) /** * @this {unknown} @@ -61687,8 +69079,8 @@ function anyFactory$r(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$r(check) { - return castFactory$r(all) +function propsFactory$a(check) { + return castFactory$a(all) /** * @param {Node} node @@ -61714,8 +69106,8 @@ function propsFactory$r(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$r(check) { - return castFactory$r(type) +function typeFactory$b(check) { + return castFactory$a(type) /** * @param {Node} node @@ -61731,7 +69123,7 @@ function typeFactory$r(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$r(check) { +function castFactory$a(check) { return assertion /** @@ -61746,7 +69138,7 @@ function castFactory$r(check) { } // Utility to return true. -function ok$s() { +function ok$b() { return true } @@ -61754,7 +69146,7 @@ function ok$s() { * @param {string} d * @returns {string} */ -function color$s(d) { +function color$c(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -61767,15 +69159,15 @@ function color$s(d) { /** * Continue traversing as normal */ -const CONTINUE$r = true; +const CONTINUE$c = true; /** * Do not traverse this node’s children */ -const SKIP$r = 'skip'; +const SKIP$c = 'skip'; /** * Stop traversing immediately */ -const EXIT$r = false; +const EXIT$c = false; /** * Visit children of tree which pass a test @@ -61785,7 +69177,7 @@ const EXIT$r = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$r = +const visitParents$c = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -61807,7 +69199,7 @@ const visitParents$r = test = null; } - const is = convert$u(test); + const is = convert$c(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -61835,7 +69227,7 @@ const visitParents$r = Object.defineProperty(visit, 'name', { value: 'node (' + - color$s(value.type + (name ? '<' + name + '>' : '')) + + color$c(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -61853,15 +69245,15 @@ const visitParents$r = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$r(visitor(node, parents)); + result = toResult$b(visitor(node, parents)); - if (result[0] === EXIT$r) { + if (result[0] === EXIT$c) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$r) { + if (node.children && result[0] !== SKIP$c) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -61872,7 +69264,7 @@ const visitParents$r = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$r) { + if (subresult[0] === EXIT$c) { return subresult } @@ -61891,13 +69283,13 @@ const visitParents$r = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$r(value) { +function toResult$b(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$r, value] + return [CONTINUE$c, value] } return [value] @@ -61918,7 +69310,7 @@ function toResult$r(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$r = +const visit$b = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -61939,7 +69331,7 @@ const visit$r = test = null; } - visitParents$r(tree, test, overload, reverse); + visitParents$c(tree, test, overload, reverse); /** * @param {Node} node @@ -61970,14 +69362,14 @@ const visit$r = * @property {PositionLike} [position] */ -var pointStart$j = point$l('start'); +var pointStart$7 = point$7('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$l(type) { +function point$7(type) { return point /** @@ -62050,119 +69442,33 @@ function point$l(type) { * 8:4: Remove 3 spaces before this heading */ -const remarkLintNoHeadingIndent = lintRule$v( +const remarkLintNoHeadingIndent = lintRule$a( 'remark-lint:no-heading-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$r(tree, 'heading', (node, _, parent) => { + visit$b(tree, 'heading', (node, _, parent) => { // Note: it’s rather complex to detect what the expected indent is in block // quotes and lists, so let’s only do directly in root for now. if (generated(node) || (parent && parent.type !== 'root')) { return } - const diff = pointStart$j(node).column - 1; + const diff = pointStart$7(node).column - 1; if (diff) { file.message( 'Remove ' + diff + ' ' + - pluralize('space', diff) + + plural('space', diff) + ' before this heading', - pointStart$j(node) + pointStart$7(node) ); } }); } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$x(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -62178,13 +69484,13 @@ function wrap$x(middleware, callback) { * @returns {void} */ -const primitives$w = new Set(['string', 'number', 'boolean']); +const primitives$9 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$w(id, rule) { +function lintRule$9(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -62197,7 +69503,7 @@ function lintRule$w(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$w(ruleId, raw); + const [severity, options] = coerce$a(ruleId, raw); if (!severity) return @@ -62206,7 +69512,7 @@ function lintRule$w(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$x(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -62236,7 +69542,7 @@ function lintRule$w(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$w(name, value) { +function coerce$a(name, value) { /** @type {unknown[]} */ let result; @@ -62248,7 +69554,7 @@ function coerce$w(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$w.has(typeof value[0]) + primitives$9.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -62301,7 +69607,7 @@ function coerce$w(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$v = +const convert$b = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -62321,19 +69627,19 @@ const convert$v = */ function (test) { if (test === undefined || test === null) { - return ok$t + return ok$a } if (typeof test === 'string') { - return typeFactory$s(test) + return typeFactory$a(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$s(test) : propsFactory$s(test) + return Array.isArray(test) ? anyFactory$a(test) : propsFactory$9(test) } if (typeof test === 'function') { - return castFactory$s(test) + return castFactory$9(test) } throw new Error('Expected function, string, or object as test') @@ -62343,16 +69649,16 @@ const convert$v = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$s(tests) { +function anyFactory$a(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$v(tests[index]); + checks[index] = convert$b(tests[index]); } - return castFactory$s(any) + return castFactory$9(any) /** * @this {unknown} @@ -62377,8 +69683,8 @@ function anyFactory$s(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$s(check) { - return castFactory$s(all) +function propsFactory$9(check) { + return castFactory$9(all) /** * @param {Node} node @@ -62404,8 +69710,8 @@ function propsFactory$s(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$s(check) { - return castFactory$s(type) +function typeFactory$a(check) { + return castFactory$9(type) /** * @param {Node} node @@ -62421,7 +69727,7 @@ function typeFactory$s(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$s(check) { +function castFactory$9(check) { return assertion /** @@ -62436,7 +69742,7 @@ function castFactory$s(check) { } // Utility to return true. -function ok$t() { +function ok$a() { return true } @@ -62444,7 +69750,7 @@ function ok$t() { * @param {string} d * @returns {string} */ -function color$t(d) { +function color$b(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -62457,15 +69763,15 @@ function color$t(d) { /** * Continue traversing as normal */ -const CONTINUE$s = true; +const CONTINUE$b = true; /** * Do not traverse this node’s children */ -const SKIP$s = 'skip'; +const SKIP$b = 'skip'; /** * Stop traversing immediately */ -const EXIT$s = false; +const EXIT$b = false; /** * Visit children of tree which pass a test @@ -62475,7 +69781,7 @@ const EXIT$s = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$s = +const visitParents$b = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -62497,7 +69803,7 @@ const visitParents$s = test = null; } - const is = convert$v(test); + const is = convert$b(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -62525,7 +69831,7 @@ const visitParents$s = Object.defineProperty(visit, 'name', { value: 'node (' + - color$t(value.type + (name ? '<' + name + '>' : '')) + + color$b(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -62543,15 +69849,15 @@ const visitParents$s = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$s(visitor(node, parents)); + result = toResult$a(visitor(node, parents)); - if (result[0] === EXIT$s) { + if (result[0] === EXIT$b) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$s) { + if (node.children && result[0] !== SKIP$b) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -62562,7 +69868,7 @@ const visitParents$s = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$s) { + if (subresult[0] === EXIT$b) { return subresult } @@ -62581,13 +69887,13 @@ const visitParents$s = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$s(value) { +function toResult$a(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$s, value] + return [CONTINUE$b, value] } return [value] @@ -62608,7 +69914,7 @@ function toResult$s(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$s = +const visit$a = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -62629,7 +69935,7 @@ const visit$s = test = null; } - visitParents$s(tree, test, overload, reverse); + visitParents$b(tree, test, overload, reverse); /** * @param {Node} node @@ -62660,14 +69966,14 @@ const visit$s = * @property {PositionLike} [position] */ -var pointStart$k = point$m('start'); +var pointStart$6 = point$6('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$m(type) { +function point$6(type) { return point /** @@ -62689,73 +69995,6 @@ function point$m(type) { } } -var own$9 = {}.hasOwnProperty; - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - */ - -/** - * Stringify one point, a position (start and end points), or a node’s - * positional information. - * - * @param {Node|Position|Point} [value] - * @returns {string} - */ -function stringifyPosition$1(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' - } - - // Node. - if (own$9.call(value, 'position') || own$9.call(value, 'type')) { - // @ts-ignore looks like a node. - return position$2(value.position) - } - - // Position. - if (own$9.call(value, 'start') || own$9.call(value, 'end')) { - // @ts-ignore looks like a position. - return position$2(value) - } - - // Point. - if (own$9.call(value, 'line') || own$9.call(value, 'column')) { - // @ts-ignore looks like a point. - return point$n(value) - } - - // ? - return '' -} - -/** - * @param {Point} point - * @returns {string} - */ -function point$n(point) { - return index$2(point && point.line) + ':' + index$2(point && point.column) -} - -/** - * @param {Position} pos - * @returns {string} - */ -function position$2(pos) { - return point$n(pos && pos.start) + '-' + point$n(pos && pos.end) -} - -/** - * @param {number} value - * @returns {number} - */ -function index$2(value) { - return value && typeof value === 'number' ? value : 1 -} - /** * @author Titus Wormer * @copyright 2015 Titus Wormer @@ -62786,14 +70025,14 @@ function index$2(value) { * 3:1-3:6: Don’t use multiple top level headings (1:1) */ -const remarkLintNoMultipleToplevelHeadings = lintRule$w( +const remarkLintNoMultipleToplevelHeadings = lintRule$9( 'remark-lint:no-multiple-toplevel-headings', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 1) => { /** @type {string|undefined} */ let duplicate; - visit$s(tree, 'heading', (node) => { + visit$a(tree, 'heading', (node) => { if (!generated(node) && node.depth === option) { if (duplicate) { file.message( @@ -62801,99 +70040,13 @@ const remarkLintNoMultipleToplevelHeadings = lintRule$w( node ); } else { - duplicate = stringifyPosition$1(pointStart$k(node)); + duplicate = stringifyPosition(pointStart$6(node)); } } }); } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$y(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -62909,13 +70062,13 @@ function wrap$y(middleware, callback) { * @returns {void} */ -const primitives$x = new Set(['string', 'number', 'boolean']); +const primitives$8 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$x(id, rule) { +function lintRule$8(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -62928,7 +70081,7 @@ function lintRule$x(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$x(ruleId, raw); + const [severity, options] = coerce$9(ruleId, raw); if (!severity) return @@ -62937,7 +70090,7 @@ function lintRule$x(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$y(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -62967,7 +70120,7 @@ function lintRule$x(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$x(name, value) { +function coerce$9(name, value) { /** @type {unknown[]} */ let result; @@ -62979,7 +70132,7 @@ function coerce$x(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$x.has(typeof value[0]) + primitives$8.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -63032,7 +70185,7 @@ function coerce$x(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$w = +const convert$a = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -63052,19 +70205,19 @@ const convert$w = */ function (test) { if (test === undefined || test === null) { - return ok$u + return ok$9 } if (typeof test === 'string') { - return typeFactory$t(test) + return typeFactory$9(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$t(test) : propsFactory$t(test) + return Array.isArray(test) ? anyFactory$9(test) : propsFactory$8(test) } if (typeof test === 'function') { - return castFactory$t(test) + return castFactory$8(test) } throw new Error('Expected function, string, or object as test') @@ -63074,16 +70227,16 @@ const convert$w = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$t(tests) { +function anyFactory$9(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$w(tests[index]); + checks[index] = convert$a(tests[index]); } - return castFactory$t(any) + return castFactory$8(any) /** * @this {unknown} @@ -63108,8 +70261,8 @@ function anyFactory$t(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$t(check) { - return castFactory$t(all) +function propsFactory$8(check) { + return castFactory$8(all) /** * @param {Node} node @@ -63135,8 +70288,8 @@ function propsFactory$t(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$t(check) { - return castFactory$t(type) +function typeFactory$9(check) { + return castFactory$8(type) /** * @param {Node} node @@ -63152,7 +70305,7 @@ function typeFactory$t(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$t(check) { +function castFactory$8(check) { return assertion /** @@ -63167,7 +70320,7 @@ function castFactory$t(check) { } // Utility to return true. -function ok$u() { +function ok$9() { return true } @@ -63175,7 +70328,7 @@ function ok$u() { * @param {string} d * @returns {string} */ -function color$u(d) { +function color$a(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -63188,15 +70341,15 @@ function color$u(d) { /** * Continue traversing as normal */ -const CONTINUE$t = true; +const CONTINUE$a = true; /** * Do not traverse this node’s children */ -const SKIP$t = 'skip'; +const SKIP$a = 'skip'; /** * Stop traversing immediately */ -const EXIT$t = false; +const EXIT$a = false; /** * Visit children of tree which pass a test @@ -63206,7 +70359,7 @@ const EXIT$t = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$t = +const visitParents$a = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -63228,7 +70381,7 @@ const visitParents$t = test = null; } - const is = convert$w(test); + const is = convert$a(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -63256,7 +70409,7 @@ const visitParents$t = Object.defineProperty(visit, 'name', { value: 'node (' + - color$u(value.type + (name ? '<' + name + '>' : '')) + + color$a(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -63274,15 +70427,15 @@ const visitParents$t = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$t(visitor(node, parents)); + result = toResult$9(visitor(node, parents)); - if (result[0] === EXIT$t) { + if (result[0] === EXIT$a) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$t) { + if (node.children && result[0] !== SKIP$a) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -63293,7 +70446,7 @@ const visitParents$t = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$t) { + if (subresult[0] === EXIT$a) { return subresult } @@ -63312,13 +70465,13 @@ const visitParents$t = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$t(value) { +function toResult$9(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$t, value] + return [CONTINUE$a, value] } return [value] @@ -63339,7 +70492,7 @@ function toResult$t(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$t = +const visit$9 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -63360,7 +70513,7 @@ const visit$t = test = null; } - visitParents$t(tree, test, overload, reverse); + visitParents$a(tree, test, overload, reverse); /** * @param {Node} node @@ -63451,11 +70604,11 @@ const flags = new Set([ 'zsh' ]); -const remarkLintNoShellDollars = lintRule$x( +const remarkLintNoShellDollars = lintRule$8( 'remark-lint:no-shell-dollars', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - visit$t(tree, 'code', (node) => { + visit$9(tree, 'code', (node) => { // Check both known shell code and unknown code. if (!generated(node) && node.lang && flags.has(node.lang)) { const lines = node.value @@ -63481,92 +70634,6 @@ const remarkLintNoShellDollars = lintRule$x( } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$z(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -63582,13 +70649,13 @@ function wrap$z(middleware, callback) { * @returns {void} */ -const primitives$y = new Set(['string', 'number', 'boolean']); +const primitives$7 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$y(id, rule) { +function lintRule$7(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -63601,7 +70668,7 @@ function lintRule$y(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$y(ruleId, raw); + const [severity, options] = coerce$8(ruleId, raw); if (!severity) return @@ -63610,7 +70677,7 @@ function lintRule$y(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$z(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -63640,7 +70707,7 @@ function lintRule$y(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$y(name, value) { +function coerce$8(name, value) { /** @type {unknown[]} */ let result; @@ -63652,7 +70719,7 @@ function coerce$y(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$y.has(typeof value[0]) + primitives$7.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -63705,7 +70772,7 @@ function coerce$y(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$x = +const convert$9 = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -63725,19 +70792,19 @@ const convert$x = */ function (test) { if (test === undefined || test === null) { - return ok$v + return ok$8 } if (typeof test === 'string') { - return typeFactory$u(test) + return typeFactory$8(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$u(test) : propsFactory$u(test) + return Array.isArray(test) ? anyFactory$8(test) : propsFactory$7(test) } if (typeof test === 'function') { - return castFactory$u(test) + return castFactory$7(test) } throw new Error('Expected function, string, or object as test') @@ -63747,16 +70814,16 @@ const convert$x = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$u(tests) { +function anyFactory$8(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$x(tests[index]); + checks[index] = convert$9(tests[index]); } - return castFactory$u(any) + return castFactory$7(any) /** * @this {unknown} @@ -63781,8 +70848,8 @@ function anyFactory$u(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$u(check) { - return castFactory$u(all) +function propsFactory$7(check) { + return castFactory$7(all) /** * @param {Node} node @@ -63808,8 +70875,8 @@ function propsFactory$u(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$u(check) { - return castFactory$u(type) +function typeFactory$8(check) { + return castFactory$7(type) /** * @param {Node} node @@ -63825,7 +70892,7 @@ function typeFactory$u(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$u(check) { +function castFactory$7(check) { return assertion /** @@ -63840,7 +70907,7 @@ function castFactory$u(check) { } // Utility to return true. -function ok$v() { +function ok$8() { return true } @@ -63848,7 +70915,7 @@ function ok$v() { * @param {string} d * @returns {string} */ -function color$v(d) { +function color$9(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -63861,15 +70928,15 @@ function color$v(d) { /** * Continue traversing as normal */ -const CONTINUE$u = true; +const CONTINUE$9 = true; /** * Do not traverse this node’s children */ -const SKIP$u = 'skip'; +const SKIP$9 = 'skip'; /** * Stop traversing immediately */ -const EXIT$u = false; +const EXIT$9 = false; /** * Visit children of tree which pass a test @@ -63879,7 +70946,7 @@ const EXIT$u = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$u = +const visitParents$9 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -63901,7 +70968,7 @@ const visitParents$u = test = null; } - const is = convert$x(test); + const is = convert$9(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -63929,7 +70996,7 @@ const visitParents$u = Object.defineProperty(visit, 'name', { value: 'node (' + - color$v(value.type + (name ? '<' + name + '>' : '')) + + color$9(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -63947,15 +71014,15 @@ const visitParents$u = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$u(visitor(node, parents)); + result = toResult$8(visitor(node, parents)); - if (result[0] === EXIT$u) { + if (result[0] === EXIT$9) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$u) { + if (node.children && result[0] !== SKIP$9) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -63966,7 +71033,7 @@ const visitParents$u = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$u) { + if (subresult[0] === EXIT$9) { return subresult } @@ -63985,13 +71052,13 @@ const visitParents$u = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$u(value) { +function toResult$8(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$u, value] + return [CONTINUE$9, value] } return [value] @@ -64012,7 +71079,7 @@ function toResult$u(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$u = +const visit$8 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -64033,7 +71100,7 @@ const visit$u = test = null; } - visitParents$u(tree, test, overload, reverse); + visitParents$9(tree, test, overload, reverse); /** * @param {Node} node @@ -64064,15 +71131,15 @@ const visit$u = * @property {PositionLike} [position] */ -var pointStart$l = point$o('start'); -var pointEnd$b = point$o('end'); +var pointStart$5 = point$5('start'); +var pointEnd$3 = point$5('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$o(type) { +function point$5(type) { return point /** @@ -64108,7 +71175,7 @@ function point$o(type) { * * @param {string|Uint8Array|VFile} file */ -function location$4(file) { +function location$1(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -64241,24 +71308,24 @@ function location$4(file) { * 3:6: Do not indent table rows */ -const remarkLintNoTableIndentation = lintRule$y( +const remarkLintNoTableIndentation = lintRule$7( 'remark-lint:no-table-indentation', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { const value = String(file); - const loc = location$4(value); + const loc = location$1(value); - visit$u(tree, 'table', (node, _, parent) => { - const end = pointEnd$b(node).line; - let line = pointStart$l(node).line; + visit$8(tree, 'table', (node, _, parent) => { + const end = pointEnd$3(node).line; + let line = pointStart$5(node).line; let column = 0; if (parent && parent.type === 'root') { column = 1; } else if (parent && parent.type === 'blockquote') { - column = pointStart$l(parent).column + 2; + column = pointStart$5(parent).column + 2; } else if (parent && parent.type === 'listItem') { - column = pointStart$l(parent.children[0]).column; + column = pointStart$5(parent.children[0]).column; // Skip past the first line if we’re the first child of a list item. /* c8 ignore next 3 */ @@ -64295,97 +71362,11 @@ const remarkLintNoTableIndentation = lintRule$y( line++; } - return SKIP$u + return SKIP$9 }); } ); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$A(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -64401,13 +71382,13 @@ function wrap$A(middleware, callback) { * @returns {void} */ -const primitives$z = new Set(['string', 'number', 'boolean']); +const primitives$6 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$z(id, rule) { +function lintRule$6(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -64420,7 +71401,7 @@ function lintRule$z(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$z(ruleId, raw); + const [severity, options] = coerce$7(ruleId, raw); if (!severity) return @@ -64429,7 +71410,7 @@ function lintRule$z(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$A(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -64459,7 +71440,7 @@ function lintRule$z(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$z(name, value) { +function coerce$7(name, value) { /** @type {unknown[]} */ let result; @@ -64471,7 +71452,7 @@ function coerce$z(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$z.has(typeof value[0]) + primitives$6.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -64528,7 +71509,7 @@ function coerce$z(name, value) { * * @param {string|Uint8Array|VFile} file */ -function location$5(file) { +function location(file) { var value = String(file); /** @type {Array.} */ var indices = []; @@ -64650,12 +71631,12 @@ function location$5(file) { * 13:41: Use spaces instead of tabs */ -const remarkLintNoTabs = lintRule$z( +const remarkLintNoTabs = lintRule$6( 'remark-lint:no-tabs', /** @type {import('unified-lint-rule').Rule} */ (_, file) => { const value = String(file); - const toPoint = location$5(file).toPoint; + const toPoint = location(file).toPoint; let index = value.indexOf('\t'); while (index !== -1) { @@ -64674,7 +71655,7 @@ const remarkLintNoTabs = lintRule$z( * @api public */ -var sliced = function (args, slice, sliceEnd) { +var sliced$1 = function (args, slice, sliceEnd) { var ret = []; var len = args.length; @@ -64701,13 +71682,13 @@ var sliced = function (args, slice, sliceEnd) { * slice() reference. */ -var slice$4 = Array.prototype.slice; +var slice = Array.prototype.slice; /** * Expose `co`. */ -var co_1 = co; +var co_1 = co$1; /** * Wrap the given generator `fn` and @@ -64718,7 +71699,7 @@ var co_1 = co; * @api public */ -function co(fn) { +function co$1(fn) { var isGenFun = isGeneratorFunction(fn); return function (done) { @@ -64732,7 +71713,7 @@ function co(fn) { // we only need to parse the arguments // if gen is a generator function. if (isGenFun) { - var args = slice$4.call(arguments), len = args.length; + var args = slice.call(arguments), len = args.length; var hasCallback = len && 'function' == typeof args[len - 1]; done = hasCallback ? args.pop() : error; gen = fn.apply(this, args); @@ -64755,7 +71736,7 @@ function co(fn) { var ret; // multiple args - if (arguments.length > 2) res = slice$4.call(arguments, 1); + if (arguments.length > 2) res = slice.call(arguments, 1); // error if (err) { @@ -64819,11 +71800,11 @@ function co(fn) { function toThunk(obj, ctx) { if (isGeneratorFunction(obj)) { - return co(obj.call(ctx)); + return co$1(obj.call(ctx)); } if (isGenerator(obj)) { - return co(obj); + return co$1(obj); } if (isPromise(obj)) { @@ -64834,7 +71815,7 @@ function toThunk(obj, ctx) { return obj; } - if (isObject$3(obj) || Array.isArray(obj)) { + if (isObject$1(obj) || Array.isArray(obj)) { return objectToThunk.call(ctx, obj); } @@ -64968,7 +71949,7 @@ function isGeneratorFunction(obj) { * @api private */ -function isObject$3(val) { +function isObject$1(val) { return val && Object == val.constructor; } @@ -64995,14 +71976,15 @@ function error(err) { * Module Dependencies */ -var noop$2 = function(){}; - +var sliced = sliced$1; +var noop = function(){}; +var co = co_1; /** * Export `wrapped` */ -var wrapped_1 = wrapped; +var wrapped_1 = wrapped$1; /** * Wrap a function to support @@ -65013,14 +71995,14 @@ var wrapped_1 = wrapped; * @api public */ -function wrapped(fn) { +function wrapped$1(fn) { function wrap() { var args = sliced(arguments); var last = args[args.length - 1]; var ctx = this; // done - var done = typeof last == 'function' ? args.pop() : noop$2; + var done = typeof last == 'function' ? args.pop() : noop; // nothing if (!fn) { @@ -65029,7 +72011,7 @@ function wrapped(fn) { // generator if (generator(fn)) { - return co_1(fn).apply(ctx, args.concat(done)); + return co(fn).apply(ctx, args.concat(done)); } // async @@ -65043,7 +72025,7 @@ function wrapped(fn) { } // sync - return sync$5(fn, done).apply(ctx, args); + return sync(fn, done).apply(ctx, args); } return wrap; @@ -65058,7 +72040,7 @@ function wrapped(fn) { * @api private */ -function sync$5(fn, done) { +function sync(fn, done) { return function () { var ret; @@ -65103,13 +72085,15 @@ function promise(value) { return value && 'function' == typeof value.then; } +var wrapped = wrapped_1; + var unifiedLintRule = factory$2; function factory$2(id, rule) { var parts = id.split(':'); var source = parts[0]; var ruleId = parts[1]; - var fn = wrapped_1(rule); + var fn = wrapped(rule); /* istanbul ignore if - possibly useful if externalised later. */ if (!ruleId) { @@ -65122,7 +72106,7 @@ function factory$2(id, rule) { return attacher function attacher(raw) { - var config = coerce$A(ruleId, raw); + var config = coerce$6(ruleId, raw); var severity = config[0]; var options = config[1]; var fatal = severity === 2; @@ -65162,7 +72146,7 @@ function factory$2(id, rule) { } // Coerce a value to a severity--options tuple. -function coerce$A(name, value) { +function coerce$6(name, value) { var def = 1; var result; var level; @@ -65216,7 +72200,9 @@ function coerce$A(name, value) { return result } -var remarkLintNoTrailingSpaces = unifiedLintRule('remark-lint:no-trailing-spaces', noTrailingSpaces); +var rule$1 = unifiedLintRule; + +var remarkLintNoTrailingSpaces = rule$1('remark-lint:no-trailing-spaces', noTrailingSpaces); /** * Lines that are just space characters are not present in @@ -65239,92 +72225,6 @@ function noTrailingSpaces(ast, file) { } } -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$B(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - - if (fnExpectsCallback) { - parameters.push(done); - } - - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; - - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } - - return done(exception) - } - - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } -} - /** * @typedef {import('unist').Node} Node * @typedef {import('vfile').VFile} VFile @@ -65340,13 +72240,13 @@ function wrap$B(middleware, callback) { * @returns {void} */ -const primitives$A = new Set(['string', 'number', 'boolean']); +const primitives$5 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$A(id, rule) { +function lintRule$5(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -65359,7 +72259,7 @@ function lintRule$A(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$B(ruleId, raw); + const [severity, options] = coerce$5(ruleId, raw); if (!severity) return @@ -65368,7 +72268,7 @@ function lintRule$A(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$B(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -65398,7 +72298,7 @@ function lintRule$A(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$B(name, value) { +function coerce$5(name, value) { /** @type {unknown[]} */ let result; @@ -65410,7 +72310,7 @@ function coerce$B(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$A.has(typeof value[0]) + primitives$5.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -65463,12 +72363,12 @@ function* getLinksRecursively(node) { } function validateLinks(tree, vfile) { - const currentFileURL = url.pathToFileURL(path__default['default'].join(vfile.cwd, vfile.path)); + const currentFileURL = url.pathToFileURL(require$$0__default$2['default'].join(vfile.cwd, vfile.path)); let previousDefinitionLabel; for (const node of getLinksRecursively(tree)) { if (node.url[0] !== "#") { const targetURL = new URL(node.url, currentFileURL); - if (targetURL.protocol === "file:" && !fs__default['default'].existsSync(targetURL)) { + if (targetURL.protocol === "file:" && !require$$0__default$3['default'].existsSync(targetURL)) { vfile.message("Broken link", node); } else if (targetURL.pathname === currentFileURL.pathname) { const expected = node.url.includes("#") @@ -65492,31 +72392,31 @@ function validateLinks(tree, vfile) { } } -const remarkLintNodejsLinks = lintRule$A( +const remarkLintNodejsLinks = lintRule$5( "remark-lint:nodejs-links", validateLinks ); -/*! js-yaml 4.0.0 https://github.com/nodeca/js-yaml @license MIT */ -function isNothing$1(subject) { +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +function isNothing(subject) { return (typeof subject === 'undefined') || (subject === null); } -function isObject$4(subject) { +function isObject(subject) { return (typeof subject === 'object') && (subject !== null); } -function toArray$1(sequence) { +function toArray(sequence) { if (Array.isArray(sequence)) return sequence; - else if (isNothing$1(sequence)) return []; + else if (isNothing(sequence)) return []; return [ sequence ]; } -function extend$3(target, source) { +function extend(target, source) { var index, length, key, sourceKeys; if (source) { @@ -65532,7 +72432,7 @@ function extend$3(target, source) { } -function repeat$2(string, count) { +function repeat(string, count) { var result = '', cycle; for (cycle = 0; cycle < count; cycle += 1) { @@ -65543,25 +72443,25 @@ function repeat$2(string, count) { } -function isNegativeZero$1(number) { +function isNegativeZero(number) { return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); } -var isNothing_1$1 = isNothing$1; -var isObject_1$1 = isObject$4; -var toArray_1$1 = toArray$1; -var repeat_1$1 = repeat$2; -var isNegativeZero_1$1 = isNegativeZero$1; -var extend_1$1 = extend$3; +var isNothing_1 = isNothing; +var isObject_1 = isObject; +var toArray_1 = toArray; +var repeat_1 = repeat; +var isNegativeZero_1 = isNegativeZero; +var extend_1 = extend; -var common$3 = { - isNothing: isNothing_1$1, - isObject: isObject_1$1, - toArray: toArray_1$1, - repeat: repeat_1$1, - isNegativeZero: isNegativeZero_1$1, - extend: extend_1$1 +var common = { + isNothing: isNothing_1, + isObject: isObject_1, + toArray: toArray_1, + repeat: repeat_1, + isNegativeZero: isNegativeZero_1, + extend: extend_1 }; // YAML error class. http://stackoverflow.com/questions/8458984 @@ -65586,7 +72486,7 @@ function formatError(exception, compact) { } -function YAMLException$2(reason, mark) { +function YAMLException$1(reason, mark) { // Super constructor Error.call(this); @@ -65607,16 +72507,16 @@ function YAMLException$2(reason, mark) { // Inherit from Error -YAMLException$2.prototype = Object.create(Error.prototype); -YAMLException$2.prototype.constructor = YAMLException$2; +YAMLException$1.prototype = Object.create(Error.prototype); +YAMLException$1.prototype.constructor = YAMLException$1; -YAMLException$2.prototype.toString = function toString(compact) { +YAMLException$1.prototype.toString = function toString(compact) { return this.name + ': ' + formatError(this, compact); }; -var exception$1 = YAMLException$2; +var exception = YAMLException$1; // get snippet for a single line, respecting maxLength function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { @@ -65642,7 +72542,7 @@ function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { function padStart(string, max) { - return common$3.repeat(' ', max - string.length) + string; + return common.repeat(' ', max - string.length) + string; } @@ -65686,14 +72586,14 @@ function makeSnippet(mark, options) { mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength ); - result = common$3.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + ' | ' + line.str + '\n' + result; } line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); - result += common$3.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + ' | ' + line.str + '\n'; - result += common$3.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; for (i = 1; i <= options.linesAfter; i++) { if (foundLineNo + i >= lineEnds.length) break; @@ -65704,7 +72604,7 @@ function makeSnippet(mark, options) { mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength ); - result += common$3.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + ' | ' + line.str + '\n'; } @@ -65714,7 +72614,7 @@ function makeSnippet(mark, options) { var snippet = makeSnippet; -var TYPE_CONSTRUCTOR_OPTIONS$1 = [ +var TYPE_CONSTRUCTOR_OPTIONS = [ 'kind', 'multi', 'resolve', @@ -65727,13 +72627,13 @@ var TYPE_CONSTRUCTOR_OPTIONS$1 = [ 'styleAliases' ]; -var YAML_NODE_KINDS$1 = [ +var YAML_NODE_KINDS = [ 'scalar', 'sequence', 'mapping' ]; -function compileStyleAliases$1(map) { +function compileStyleAliases(map) { var result = {}; if (map !== null) { @@ -65747,16 +72647,17 @@ function compileStyleAliases$1(map) { return result; } -function Type$2(tag, options) { +function Type$1(tag, options) { options = options || {}; Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS$1.indexOf(name) === -1) { - throw new exception$1('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); } }); // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later this.tag = tag; this.kind = options['kind'] || null; this.resolve = options['resolve'] || function () { return true; }; @@ -65767,14 +72668,14 @@ function Type$2(tag, options) { this.representName = options['representName'] || null; this.defaultStyle = options['defaultStyle'] || null; this.multi = options['multi'] || false; - this.styleAliases = compileStyleAliases$1(options['styleAliases'] || null); + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); - if (YAML_NODE_KINDS$1.indexOf(this.kind) === -1) { - throw new exception$1('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); } } -var type$1 = Type$2; +var type = Type$1; /*eslint-disable max-len*/ @@ -65782,29 +72683,29 @@ var type$1 = Type$2; -function compileList$1(schema, name, result) { - var exclude = []; +function compileList(schema, name) { + var result = []; schema[name].forEach(function (currentType) { + var newIndex = result.length; + result.forEach(function (previousType, previousIndex) { if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) { - exclude.push(previousIndex); + newIndex = previousIndex; } }); - result.push(currentType); + result[newIndex] = currentType; }); - return result.filter(function (type, index) { - return exclude.indexOf(index) === -1; - }); + return result; } -function compileMap$1(/* lists... */) { +function compileMap(/* lists... */) { var result = { scalar: {}, sequence: {}, @@ -65834,16 +72735,16 @@ function compileMap$1(/* lists... */) { } -function Schema$2(definition) { +function Schema$1(definition) { return this.extend(definition); } -Schema$2.prototype.extend = function extend(definition) { +Schema$1.prototype.extend = function extend(definition) { var implicit = []; var explicit = []; - if (definition instanceof type$1) { + if (definition instanceof type) { // Schema.extend(type) explicit.push(definition); @@ -65857,69 +72758,69 @@ Schema$2.prototype.extend = function extend(definition) { if (definition.explicit) explicit = explicit.concat(definition.explicit); } else { - throw new exception$1('Schema.extend argument should be a Type, [ Type ], ' + + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + 'or a schema definition ({ implicit: [...], explicit: [...] })'); } - implicit.forEach(function (type$1$1) { - if (!(type$1$1 instanceof type$1)) { - throw new exception$1('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); } - if (type$1$1.loadKind && type$1$1.loadKind !== 'scalar') { - throw new exception$1('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); } - if (type$1$1.multi) { - throw new exception$1('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); } }); - explicit.forEach(function (type$1$1) { - if (!(type$1$1 instanceof type$1)) { - throw new exception$1('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); } }); - var result = Object.create(Schema$2.prototype); + var result = Object.create(Schema$1.prototype); result.implicit = (this.implicit || []).concat(implicit); result.explicit = (this.explicit || []).concat(explicit); - result.compiledImplicit = compileList$1(result, 'implicit', []); - result.compiledExplicit = compileList$1(result, 'explicit', []); - result.compiledTypeMap = compileMap$1(result.compiledImplicit, result.compiledExplicit); + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); return result; }; -var schema$2 = Schema$2; +var schema = Schema$1; -var str$1 = new type$1('tag:yaml.org,2002:str', { +var str = new type('tag:yaml.org,2002:str', { kind: 'scalar', construct: function (data) { return data !== null ? data : ''; } }); -var seq$1 = new type$1('tag:yaml.org,2002:seq', { +var seq = new type('tag:yaml.org,2002:seq', { kind: 'sequence', construct: function (data) { return data !== null ? data : []; } }); -var map$5 = new type$1('tag:yaml.org,2002:map', { +var map = new type('tag:yaml.org,2002:map', { kind: 'mapping', construct: function (data) { return data !== null ? data : {}; } }); -var failsafe$1 = new schema$2({ +var failsafe = new schema({ explicit: [ - str$1, - seq$1, - map$5 + str, + seq, + map ] }); -function resolveYamlNull$1(data) { +function resolveYamlNull(data) { if (data === null) return true; var max = data.length; @@ -65928,19 +72829,19 @@ function resolveYamlNull$1(data) { (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); } -function constructYamlNull$1() { +function constructYamlNull() { return null; } -function isNull$1(object) { +function isNull(object) { return object === null; } -var _null$1 = new type$1('tag:yaml.org,2002:null', { +var _null = new type('tag:yaml.org,2002:null', { kind: 'scalar', - resolve: resolveYamlNull$1, - construct: constructYamlNull$1, - predicate: isNull$1, + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, represent: { canonical: function () { return '~'; }, lowercase: function () { return 'null'; }, @@ -65951,7 +72852,7 @@ var _null$1 = new type$1('tag:yaml.org,2002:null', { defaultStyle: 'lowercase' }); -function resolveYamlBoolean$1(data) { +function resolveYamlBoolean(data) { if (data === null) return false; var max = data.length; @@ -65960,21 +72861,21 @@ function resolveYamlBoolean$1(data) { (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); } -function constructYamlBoolean$1(data) { +function constructYamlBoolean(data) { return data === 'true' || data === 'True' || data === 'TRUE'; } -function isBoolean$1(object) { +function isBoolean(object) { return Object.prototype.toString.call(object) === '[object Boolean]'; } -var bool$1 = new type$1('tag:yaml.org,2002:bool', { +var bool = new type('tag:yaml.org,2002:bool', { kind: 'scalar', - resolve: resolveYamlBoolean$1, - construct: constructYamlBoolean$1, - predicate: isBoolean$1, + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, represent: { lowercase: function (object) { return object ? 'true' : 'false'; }, uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, @@ -65983,21 +72884,21 @@ var bool$1 = new type$1('tag:yaml.org,2002:bool', { defaultStyle: 'lowercase' }); -function isHexCode$1(c) { +function isHexCode(c) { return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || ((0x61/* a */ <= c) && (c <= 0x66/* f */)); } -function isOctCode$1(c) { +function isOctCode(c) { return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); } -function isDecCode$1(c) { +function isDecCode(c) { return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); } -function resolveYamlInteger$1(data) { +function resolveYamlInteger(data) { if (data === null) return false; var max = data.length, @@ -66042,7 +72943,7 @@ function resolveYamlInteger$1(data) { for (; index < max; index++) { ch = data[index]; if (ch === '_') continue; - if (!isHexCode$1(data.charCodeAt(index))) return false; + if (!isHexCode(data.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== '_'; @@ -66056,7 +72957,7 @@ function resolveYamlInteger$1(data) { for (; index < max; index++) { ch = data[index]; if (ch === '_') continue; - if (!isOctCode$1(data.charCodeAt(index))) return false; + if (!isOctCode(data.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== '_'; @@ -66071,7 +72972,7 @@ function resolveYamlInteger$1(data) { for (; index < max; index++) { ch = data[index]; if (ch === '_') continue; - if (!isDecCode$1(data.charCodeAt(index))) { + if (!isDecCode(data.charCodeAt(index))) { return false; } hasDigits = true; @@ -66083,7 +72984,7 @@ function resolveYamlInteger$1(data) { return true; } -function constructYamlInteger$1(data) { +function constructYamlInteger(data) { var value = data, sign = 1, ch; if (value.indexOf('_') !== -1) { @@ -66109,16 +73010,16 @@ function constructYamlInteger$1(data) { return sign * parseInt(value, 10); } -function isInteger$1(object) { +function isInteger(object) { return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common$3.isNegativeZero(object)); + (object % 1 === 0 && !common.isNegativeZero(object)); } -var int$2 = new type$1('tag:yaml.org,2002:int', { +var int = new type('tag:yaml.org,2002:int', { kind: 'scalar', - resolve: resolveYamlInteger$1, - construct: constructYamlInteger$1, - predicate: isInteger$1, + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, represent: { binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, @@ -66135,7 +73036,7 @@ var int$2 = new type$1('tag:yaml.org,2002:int', { } }); -var YAML_FLOAT_PATTERN$1 = new RegExp( +var YAML_FLOAT_PATTERN = new RegExp( // 2.5e4, 2.5 and integers '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + // .2e4, .2 @@ -66146,10 +73047,10 @@ var YAML_FLOAT_PATTERN$1 = new RegExp( // .nan '|\\.(?:nan|NaN|NAN))$'); -function resolveYamlFloat$1(data) { +function resolveYamlFloat(data) { if (data === null) return false; - if (!YAML_FLOAT_PATTERN$1.test(data) || + if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_` // Probably should update regexp & check speed data[data.length - 1] === '_') { @@ -66159,7 +73060,7 @@ function resolveYamlFloat$1(data) { return true; } -function constructYamlFloat$1(data) { +function constructYamlFloat(data) { var value, sign; value = data.replace(/_/g, '').toLowerCase(); @@ -66179,9 +73080,9 @@ function constructYamlFloat$1(data) { } -var SCIENTIFIC_WITHOUT_DOT$1 = /^[-+]?[0-9]+e/; +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; -function representYamlFloat$1(object, style) { +function representYamlFloat(object, style) { var res; if (isNaN(object)) { @@ -66202,7 +73103,7 @@ function representYamlFloat$1(object, style) { case 'uppercase': return '-.INF'; case 'camelcase': return '-.Inf'; } - } else if (common$3.isNegativeZero(object)) { + } else if (common.isNegativeZero(object)) { return '-0.0'; } @@ -66211,40 +73112,40 @@ function representYamlFloat$1(object, style) { // JS stringifier can build scientific format without dots: 5e-100, // while YAML requres dot: 5.e-100. Fix it with simple hack - return SCIENTIFIC_WITHOUT_DOT$1.test(res) ? res.replace('e', '.e') : res; + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; } -function isFloat$1(object) { +function isFloat(object) { return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common$3.isNegativeZero(object)); + (object % 1 !== 0 || common.isNegativeZero(object)); } -var float$1 = new type$1('tag:yaml.org,2002:float', { +var float = new type('tag:yaml.org,2002:float', { kind: 'scalar', - resolve: resolveYamlFloat$1, - construct: constructYamlFloat$1, - predicate: isFloat$1, - represent: representYamlFloat$1, + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, defaultStyle: 'lowercase' }); -var json$1 = failsafe$1.extend({ +var json = failsafe.extend({ implicit: [ - _null$1, - bool$1, - int$2, - float$1 + _null, + bool, + int, + float ] }); -var core$3 = json$1; +var core = json; -var YAML_DATE_REGEXP$1 = new RegExp( +var YAML_DATE_REGEXP = new RegExp( '^([0-9][0-9][0-9][0-9])' + // [1] year '-([0-9][0-9])' + // [2] month '-([0-9][0-9])$'); // [3] day -var YAML_TIMESTAMP_REGEXP$1 = new RegExp( +var YAML_TIMESTAMP_REGEXP = new RegExp( '^([0-9][0-9][0-9][0-9])' + // [1] year '-([0-9][0-9]?)' + // [2] month '-([0-9][0-9]?)' + // [3] day @@ -66256,19 +73157,19 @@ var YAML_TIMESTAMP_REGEXP$1 = new RegExp( '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour '(?::([0-9][0-9]))?))?$'); // [11] tz_minute -function resolveYamlTimestamp$1(data) { +function resolveYamlTimestamp(data) { if (data === null) return false; - if (YAML_DATE_REGEXP$1.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP$1.exec(data) !== null) return true; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; return false; } -function constructYamlTimestamp$1(data) { +function constructYamlTimestamp(data) { var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date; - match = YAML_DATE_REGEXP$1.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP$1.exec(data); + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); if (match === null) throw new Error('Date resolve error'); @@ -66312,25 +73213,25 @@ function constructYamlTimestamp$1(data) { return date; } -function representYamlTimestamp$1(object /*, style*/) { +function representYamlTimestamp(object /*, style*/) { return object.toISOString(); } -var timestamp$1 = new type$1('tag:yaml.org,2002:timestamp', { +var timestamp = new type('tag:yaml.org,2002:timestamp', { kind: 'scalar', - resolve: resolveYamlTimestamp$1, - construct: constructYamlTimestamp$1, + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, instanceOf: Date, - represent: representYamlTimestamp$1 + represent: representYamlTimestamp }); -function resolveYamlMerge$1(data) { +function resolveYamlMerge(data) { return data === '<<' || data === null; } -var merge$1 = new type$1('tag:yaml.org,2002:merge', { +var merge = new type('tag:yaml.org,2002:merge', { kind: 'scalar', - resolve: resolveYamlMerge$1 + resolve: resolveYamlMerge }); /*eslint-disable no-bitwise*/ @@ -66340,13 +73241,13 @@ var merge$1 = new type$1('tag:yaml.org,2002:merge', { // [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; -function resolveYamlBinary$1(data) { +function resolveYamlBinary(data) { if (data === null) return false; - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP$1; + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; // Convert one by one. for (idx = 0; idx < max; idx++) { @@ -66365,11 +73266,11 @@ function resolveYamlBinary$1(data) { return (bitlen % 8) === 0; } -function constructYamlBinary$1(data) { +function constructYamlBinary(data) { var idx, tailbits, input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan max = input.length, - map = BASE64_MAP$1, + map = BASE64_MAP, bits = 0, result = []; @@ -66403,10 +73304,10 @@ function constructYamlBinary$1(data) { return new Uint8Array(result); } -function representYamlBinary$1(object /*, style*/) { +function representYamlBinary(object /*, style*/) { var result = '', bits = 0, idx, tail, max = object.length, - map = BASE64_MAP$1; + map = BASE64_MAP; // Convert every three bytes to 4 ASCII characters. @@ -66445,22 +73346,22 @@ function representYamlBinary$1(object /*, style*/) { return result; } -function isBinary$1(obj) { +function isBinary(obj) { return Object.prototype.toString.call(obj) === '[object Uint8Array]'; } -var binary$1 = new type$1('tag:yaml.org,2002:binary', { +var binary = new type('tag:yaml.org,2002:binary', { kind: 'scalar', - resolve: resolveYamlBinary$1, - construct: constructYamlBinary$1, - predicate: isBinary$1, - represent: representYamlBinary$1 + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary }); -var _hasOwnProperty$4 = Object.prototype.hasOwnProperty; -var _toString$3 = Object.prototype.toString; +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = Object.prototype.toString; -function resolveYamlOmap$1(data) { +function resolveYamlOmap(data) { if (data === null) return true; var objectKeys = [], index, length, pair, pairKey, pairHasKey, @@ -66470,10 +73371,10 @@ function resolveYamlOmap$1(data) { pair = object[index]; pairHasKey = false; - if (_toString$3.call(pair) !== '[object Object]') return false; + if (_toString$2.call(pair) !== '[object Object]') return false; for (pairKey in pair) { - if (_hasOwnProperty$4.call(pair, pairKey)) { + if (_hasOwnProperty$3.call(pair, pairKey)) { if (!pairHasKey) pairHasKey = true; else return false; } @@ -66488,19 +73389,19 @@ function resolveYamlOmap$1(data) { return true; } -function constructYamlOmap$1(data) { +function constructYamlOmap(data) { return data !== null ? data : []; } -var omap$1 = new type$1('tag:yaml.org,2002:omap', { +var omap = new type('tag:yaml.org,2002:omap', { kind: 'sequence', - resolve: resolveYamlOmap$1, - construct: constructYamlOmap$1 + resolve: resolveYamlOmap, + construct: constructYamlOmap }); -var _toString$1$1 = Object.prototype.toString; +var _toString$1 = Object.prototype.toString; -function resolveYamlPairs$1(data) { +function resolveYamlPairs(data) { if (data === null) return true; var index, length, pair, keys, result, @@ -66511,7 +73412,7 @@ function resolveYamlPairs$1(data) { for (index = 0, length = object.length; index < length; index += 1) { pair = object[index]; - if (_toString$1$1.call(pair) !== '[object Object]') return false; + if (_toString$1.call(pair) !== '[object Object]') return false; keys = Object.keys(pair); @@ -66523,7 +73424,7 @@ function resolveYamlPairs$1(data) { return true; } -function constructYamlPairs$1(data) { +function constructYamlPairs(data) { if (data === null) return []; var index, length, pair, keys, result, @@ -66542,21 +73443,21 @@ function constructYamlPairs$1(data) { return result; } -var pairs$1 = new type$1('tag:yaml.org,2002:pairs', { +var pairs = new type('tag:yaml.org,2002:pairs', { kind: 'sequence', - resolve: resolveYamlPairs$1, - construct: constructYamlPairs$1 + resolve: resolveYamlPairs, + construct: constructYamlPairs }); -var _hasOwnProperty$1$1 = Object.prototype.hasOwnProperty; +var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; -function resolveYamlSet$1(data) { +function resolveYamlSet(data) { if (data === null) return true; var key, object = data; for (key in object) { - if (_hasOwnProperty$1$1.call(object, key)) { + if (_hasOwnProperty$2.call(object, key)) { if (object[key] !== null) return false; } } @@ -66564,26 +73465,26 @@ function resolveYamlSet$1(data) { return true; } -function constructYamlSet$1(data) { +function constructYamlSet(data) { return data !== null ? data : {}; } -var set$1 = new type$1('tag:yaml.org,2002:set', { +var set = new type('tag:yaml.org,2002:set', { kind: 'mapping', - resolve: resolveYamlSet$1, - construct: constructYamlSet$1 + resolve: resolveYamlSet, + construct: constructYamlSet }); -var _default$8 = core$3.extend({ +var _default = core.extend({ implicit: [ - timestamp$1, - merge$1 + timestamp, + merge ], explicit: [ - binary$1, - omap$1, - pairs$1, - set$1 + binary, + omap, + pairs, + set ] }); @@ -66595,45 +73496,45 @@ var _default$8 = core$3.extend({ -var _hasOwnProperty$2$1 = Object.prototype.hasOwnProperty; +var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; -var CONTEXT_FLOW_IN$1 = 1; -var CONTEXT_FLOW_OUT$1 = 2; -var CONTEXT_BLOCK_IN$1 = 3; -var CONTEXT_BLOCK_OUT$1 = 4; +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; -var CHOMPING_CLIP$1 = 1; -var CHOMPING_STRIP$1 = 2; -var CHOMPING_KEEP$1 = 3; +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; -var PATTERN_NON_PRINTABLE$1 = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS$1 = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS$1 = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE$1 = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI$1 = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; -function _class$1(obj) { return Object.prototype.toString.call(obj); } +function _class(obj) { return Object.prototype.toString.call(obj); } -function is_EOL$1(c) { +function is_EOL(c) { return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); } -function is_WHITE_SPACE$1(c) { +function is_WHITE_SPACE(c) { return (c === 0x09/* Tab */) || (c === 0x20/* Space */); } -function is_WS_OR_EOL$1(c) { +function is_WS_OR_EOL(c) { return (c === 0x09/* Tab */) || (c === 0x20/* Space */) || (c === 0x0A/* LF */) || (c === 0x0D/* CR */); } -function is_FLOW_INDICATOR$1(c) { +function is_FLOW_INDICATOR(c) { return c === 0x2C/* , */ || c === 0x5B/* [ */ || c === 0x5D/* ] */ || @@ -66641,7 +73542,7 @@ function is_FLOW_INDICATOR$1(c) { c === 0x7D/* } */; } -function fromHexCode$1(c) { +function fromHexCode(c) { var lc; if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { @@ -66658,14 +73559,14 @@ function fromHexCode$1(c) { return -1; } -function escapedHexLen$1(c) { +function escapedHexLen(c) { if (c === 0x78/* x */) { return 2; } if (c === 0x75/* u */) { return 4; } if (c === 0x55/* U */) { return 8; } return 0; } -function fromDecimalCode$1(c) { +function fromDecimalCode(c) { if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { return c - 0x30; } @@ -66673,7 +73574,7 @@ function fromDecimalCode$1(c) { return -1; } -function simpleEscapeSequence$1(c) { +function simpleEscapeSequence(c) { /* eslint-disable indent */ return (c === 0x30/* 0 */) ? '\x00' : (c === 0x61/* a */) ? '\x07' : @@ -66695,7 +73596,7 @@ function simpleEscapeSequence$1(c) { (c === 0x50/* P */) ? '\u2029' : ''; } -function charFromCodepoint$1(c) { +function charFromCodepoint(c) { if (c <= 0xFFFF) { return String.fromCharCode(c); } @@ -66707,19 +73608,19 @@ function charFromCodepoint$1(c) { ); } -var simpleEscapeCheck$1 = new Array(256); // integer, for fast access -var simpleEscapeMap$1 = new Array(256); -for (var i$1 = 0; i$1 < 256; i$1++) { - simpleEscapeCheck$1[i$1] = simpleEscapeSequence$1(i$1) ? 1 : 0; - simpleEscapeMap$1[i$1] = simpleEscapeSequence$1(i$1); +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); } -function State$2(input, options) { +function State$1(input, options) { this.input = input; this.filename = options['filename'] || null; - this.schema = options['schema'] || _default$8; + this.schema = options['schema'] || _default; this.onWarning = options['onWarning'] || null; // (Hidden) Remove? makes the loader to expect YAML 1.1 documents // if such documents have no explicit %YAML directive @@ -66756,7 +73657,7 @@ function State$2(input, options) { } -function generateError$1(state, message) { +function generateError(state, message) { var mark = { name: state.filename, buffer: state.input.slice(0, -1), // omit trailing \0 @@ -66767,52 +73668,52 @@ function generateError$1(state, message) { mark.snippet = snippet(mark); - return new exception$1(message, mark); + return new exception(message, mark); } -function throwError$2(state, message) { - throw generateError$1(state, message); +function throwError(state, message) { + throw generateError(state, message); } -function throwWarning$1(state, message) { +function throwWarning(state, message) { if (state.onWarning) { - state.onWarning.call(null, generateError$1(state, message)); + state.onWarning.call(null, generateError(state, message)); } } -var directiveHandlers$1 = { +var directiveHandlers = { YAML: function handleYamlDirective(state, name, args) { var match, major, minor; if (state.version !== null) { - throwError$2(state, 'duplication of %YAML directive'); + throwError(state, 'duplication of %YAML directive'); } if (args.length !== 1) { - throwError$2(state, 'YAML directive accepts exactly one argument'); + throwError(state, 'YAML directive accepts exactly one argument'); } match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); if (match === null) { - throwError$2(state, 'ill-formed argument of the YAML directive'); + throwError(state, 'ill-formed argument of the YAML directive'); } major = parseInt(match[1], 10); minor = parseInt(match[2], 10); if (major !== 1) { - throwError$2(state, 'unacceptable YAML version of the document'); + throwError(state, 'unacceptable YAML version of the document'); } state.version = args[0]; state.checkLineBreaks = (minor < 2); if (minor !== 1 && minor !== 2) { - throwWarning$1(state, 'unsupported YAML version of the document'); + throwWarning(state, 'unsupported YAML version of the document'); } }, @@ -66821,28 +73722,28 @@ var directiveHandlers$1 = { var handle, prefix; if (args.length !== 2) { - throwError$2(state, 'TAG directive accepts exactly two arguments'); + throwError(state, 'TAG directive accepts exactly two arguments'); } handle = args[0]; prefix = args[1]; - if (!PATTERN_TAG_HANDLE$1.test(handle)) { - throwError$2(state, 'ill-formed tag handle (first argument) of the TAG directive'); + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); } - if (_hasOwnProperty$2$1.call(state.tagMap, handle)) { - throwError$2(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); } - if (!PATTERN_TAG_URI$1.test(prefix)) { - throwError$2(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); } try { prefix = decodeURIComponent(prefix); } catch (err) { - throwError$2(state, 'tag prefix is malformed: ' + prefix); + throwError(state, 'tag prefix is malformed: ' + prefix); } state.tagMap[handle] = prefix; @@ -66850,7 +73751,7 @@ var directiveHandlers$1 = { }; -function captureSegment$1(state, start, end, checkJson) { +function captureSegment(state, start, end, checkJson) { var _position, _length, _character, _result; if (start < end) { @@ -66861,22 +73762,22 @@ function captureSegment$1(state, start, end, checkJson) { _character = _result.charCodeAt(_position); if (!(_character === 0x09 || (0x20 <= _character && _character <= 0x10FFFF))) { - throwError$2(state, 'expected valid JSON character'); + throwError(state, 'expected valid JSON character'); } } - } else if (PATTERN_NON_PRINTABLE$1.test(_result)) { - throwError$2(state, 'the stream contains non-printable characters'); + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); } state.result += _result; } } -function mergeMappings$1(state, destination, source, overridableKeys) { +function mergeMappings(state, destination, source, overridableKeys) { var sourceKeys, key, index, quantity; - if (!common$3.isObject(source)) { - throwError$2(state, 'cannot merge mappings; the provided source object is unacceptable'); + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); } sourceKeys = Object.keys(source); @@ -66884,14 +73785,14 @@ function mergeMappings$1(state, destination, source, overridableKeys) { for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { key = sourceKeys[index]; - if (!_hasOwnProperty$2$1.call(destination, key)) { + if (!_hasOwnProperty$1.call(destination, key)) { destination[key] = source[key]; overridableKeys[key] = true; } } } -function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) { var index, quantity; @@ -66904,10 +73805,10 @@ function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, va for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { if (Array.isArray(keyNode[index])) { - throwError$2(state, 'nested arrays are not supported inside keys'); + throwError(state, 'nested arrays are not supported inside keys'); } - if (typeof keyNode === 'object' && _class$1(keyNode[index]) === '[object Object]') { + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { keyNode[index] = '[object Object]'; } } @@ -66916,7 +73817,7 @@ function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, va // Avoid code execution in load() via toString property // (still use its own toString for arrays, timestamps, // and whatever user schema extensions happen to have @@toStringTag) - if (typeof keyNode === 'object' && _class$1(keyNode) === '[object Object]') { + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { keyNode = '[object Object]'; } @@ -66930,19 +73831,19 @@ function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, va if (keyTag === 'tag:yaml.org,2002:merge') { if (Array.isArray(valueNode)) { for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings$1(state, _result, valueNode[index], overridableKeys); + mergeMappings(state, _result, valueNode[index], overridableKeys); } } else { - mergeMappings$1(state, _result, valueNode, overridableKeys); + mergeMappings(state, _result, valueNode, overridableKeys); } } else { if (!state.json && - !_hasOwnProperty$2$1.call(overridableKeys, keyNode) && - _hasOwnProperty$2$1.call(_result, keyNode)) { + !_hasOwnProperty$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { state.line = startLine || state.line; state.lineStart = startLineStart || state.lineStart; state.position = startPos || state.position; - throwError$2(state, 'duplicated mapping key'); + throwError(state, 'duplicated mapping key'); } // used for this specific key only because Object.defineProperty is slow @@ -66962,7 +73863,7 @@ function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, va return _result; } -function readLineBreak$1(state) { +function readLineBreak(state) { var ch; ch = state.input.charCodeAt(state.position); @@ -66975,7 +73876,7 @@ function readLineBreak$1(state) { state.position++; } } else { - throwError$2(state, 'a line break is expected'); + throwError(state, 'a line break is expected'); } state.line += 1; @@ -66983,12 +73884,12 @@ function readLineBreak$1(state) { state.firstTabInLine = -1; } -function skipSeparationSpace$1(state, allowComments, checkIndent) { +function skipSeparationSpace(state, allowComments, checkIndent) { var lineBreaks = 0, ch = state.input.charCodeAt(state.position); while (ch !== 0) { - while (is_WHITE_SPACE$1(ch)) { + while (is_WHITE_SPACE(ch)) { if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { state.firstTabInLine = state.position; } @@ -67001,8 +73902,8 @@ function skipSeparationSpace$1(state, allowComments, checkIndent) { } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); } - if (is_EOL$1(ch)) { - readLineBreak$1(state); + if (is_EOL(ch)) { + readLineBreak(state); ch = state.input.charCodeAt(state.position); lineBreaks++; @@ -67018,13 +73919,13 @@ function skipSeparationSpace$1(state, allowComments, checkIndent) { } if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning$1(state, 'deficient indentation'); + throwWarning(state, 'deficient indentation'); } return lineBreaks; } -function testDocumentSeparator$1(state) { +function testDocumentSeparator(state) { var _position = state.position, ch; @@ -67040,7 +73941,7 @@ function testDocumentSeparator$1(state) { ch = state.input.charCodeAt(_position); - if (ch === 0 || is_WS_OR_EOL$1(ch)) { + if (ch === 0 || is_WS_OR_EOL(ch)) { return true; } } @@ -67048,16 +73949,16 @@ function testDocumentSeparator$1(state) { return false; } -function writeFoldedLines$1(state, count) { +function writeFoldedLines(state, count) { if (count === 1) { state.result += ' '; } else if (count > 1) { - state.result += common$3.repeat('\n', count - 1); + state.result += common.repeat('\n', count - 1); } } -function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { +function readPlainScalar(state, nodeIndent, withinFlowCollection) { var preceding, following, captureStart, @@ -67072,8 +73973,8 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { ch = state.input.charCodeAt(state.position); - if (is_WS_OR_EOL$1(ch) || - is_FLOW_INDICATOR$1(ch) || + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || ch === 0x23/* # */ || ch === 0x26/* & */ || ch === 0x2A/* * */ || @@ -67091,8 +73992,8 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL$1(following) || - withinFlowCollection && is_FLOW_INDICATOR$1(following)) { + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { return false; } } @@ -67106,27 +74007,27 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { if (ch === 0x3A/* : */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL$1(following) || - withinFlowCollection && is_FLOW_INDICATOR$1(following)) { + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { break; } } else if (ch === 0x23/* # */) { preceding = state.input.charCodeAt(state.position - 1); - if (is_WS_OR_EOL$1(preceding)) { + if (is_WS_OR_EOL(preceding)) { break; } - } else if ((state.position === state.lineStart && testDocumentSeparator$1(state)) || - withinFlowCollection && is_FLOW_INDICATOR$1(ch)) { + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { break; - } else if (is_EOL$1(ch)) { + } else if (is_EOL(ch)) { _line = state.line; _lineStart = state.lineStart; _lineIndent = state.lineIndent; - skipSeparationSpace$1(state, false, -1); + skipSeparationSpace(state, false, -1); if (state.lineIndent >= nodeIndent) { hasPendingContent = true; @@ -67142,20 +74043,20 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { } if (hasPendingContent) { - captureSegment$1(state, captureStart, captureEnd, false); - writeFoldedLines$1(state, state.line - _line); + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); captureStart = captureEnd = state.position; hasPendingContent = false; } - if (!is_WHITE_SPACE$1(ch)) { + if (!is_WHITE_SPACE(ch)) { captureEnd = state.position + 1; } ch = state.input.charCodeAt(++state.position); } - captureSegment$1(state, captureStart, captureEnd, false); + captureSegment(state, captureStart, captureEnd, false); if (state.result) { return true; @@ -67166,7 +74067,7 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { return false; } -function readSingleQuotedScalar$1(state, nodeIndent) { +function readSingleQuotedScalar(state, nodeIndent) { var ch, captureStart, captureEnd; @@ -67183,7 +74084,7 @@ function readSingleQuotedScalar$1(state, nodeIndent) { while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x27/* ' */) { - captureSegment$1(state, captureStart, state.position, true); + captureSegment(state, captureStart, state.position, true); ch = state.input.charCodeAt(++state.position); if (ch === 0x27/* ' */) { @@ -67194,13 +74095,13 @@ function readSingleQuotedScalar$1(state, nodeIndent) { return true; } - } else if (is_EOL$1(ch)) { - captureSegment$1(state, captureStart, captureEnd, true); - writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { - throwError$2(state, 'unexpected end of the document within a single quoted scalar'); + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); } else { state.position++; @@ -67208,10 +74109,10 @@ function readSingleQuotedScalar$1(state, nodeIndent) { } } - throwError$2(state, 'unexpected end of the stream within a single quoted scalar'); + throwError(state, 'unexpected end of the stream within a single quoted scalar'); } -function readDoubleQuotedScalar$1(state, nodeIndent) { +function readDoubleQuotedScalar(state, nodeIndent) { var captureStart, captureEnd, hexLength, @@ -67232,54 +74133,54 @@ function readDoubleQuotedScalar$1(state, nodeIndent) { while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x22/* " */) { - captureSegment$1(state, captureStart, state.position, true); + captureSegment(state, captureStart, state.position, true); state.position++; return true; } else if (ch === 0x5C/* \ */) { - captureSegment$1(state, captureStart, state.position, true); + captureSegment(state, captureStart, state.position, true); ch = state.input.charCodeAt(++state.position); - if (is_EOL$1(ch)) { - skipSeparationSpace$1(state, false, nodeIndent); + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck$1[ch]) { - state.result += simpleEscapeMap$1[ch]; + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; state.position++; - } else if ((tmp = escapedHexLen$1(ch)) > 0) { + } else if ((tmp = escapedHexLen(ch)) > 0) { hexLength = tmp; hexResult = 0; for (; hexLength > 0; hexLength--) { ch = state.input.charCodeAt(++state.position); - if ((tmp = fromHexCode$1(ch)) >= 0) { + if ((tmp = fromHexCode(ch)) >= 0) { hexResult = (hexResult << 4) + tmp; } else { - throwError$2(state, 'expected hexadecimal character'); + throwError(state, 'expected hexadecimal character'); } } - state.result += charFromCodepoint$1(hexResult); + state.result += charFromCodepoint(hexResult); state.position++; } else { - throwError$2(state, 'unknown escape sequence'); + throwError(state, 'unknown escape sequence'); } captureStart = captureEnd = state.position; - } else if (is_EOL$1(ch)) { - captureSegment$1(state, captureStart, captureEnd, true); - writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { - throwError$2(state, 'unexpected end of the document within a double quoted scalar'); + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); } else { state.position++; @@ -67287,10 +74188,10 @@ function readDoubleQuotedScalar$1(state, nodeIndent) { } } - throwError$2(state, 'unexpected end of the stream within a double quoted scalar'); + throwError(state, 'unexpected end of the stream within a double quoted scalar'); } -function readFlowCollection$1(state, nodeIndent) { +function readFlowCollection(state, nodeIndent) { var readNext = true, _line, _lineStart, @@ -67330,7 +74231,7 @@ function readFlowCollection$1(state, nodeIndent) { ch = state.input.charCodeAt(++state.position); while (ch !== 0) { - skipSeparationSpace$1(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); @@ -67342,10 +74243,10 @@ function readFlowCollection$1(state, nodeIndent) { state.result = _result; return true; } else if (!readNext) { - throwError$2(state, 'missed comma between flow collection entries'); + throwError(state, 'missed comma between flow collection entries'); } else if (ch === 0x2C/* , */) { // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 - throwError$2(state, "expected the node content, but found ','"); + throwError(state, "expected the node content, but found ','"); } keyTag = keyNode = valueNode = null; @@ -67354,40 +74255,40 @@ function readFlowCollection$1(state, nodeIndent) { if (ch === 0x3F/* ? */) { following = state.input.charCodeAt(state.position + 1); - if (is_WS_OR_EOL$1(following)) { + if (is_WS_OR_EOL(following)) { isPair = isExplicitPair = true; state.position++; - skipSeparationSpace$1(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent); } } _line = state.line; // Save the current line. _lineStart = state.lineStart; _pos = state.position; - composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); keyTag = state.tag; keyNode = state.result; - skipSeparationSpace$1(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { isPair = true; ch = state.input.charCodeAt(++state.position); - skipSeparationSpace$1(state, true, nodeIndent); - composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); valueNode = state.result; } if (isMapping) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); } else if (isPair) { - _result.push(storeMappingPair$1(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); } else { _result.push(keyNode); } - skipSeparationSpace$1(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent); ch = state.input.charCodeAt(state.position); @@ -67399,13 +74300,13 @@ function readFlowCollection$1(state, nodeIndent) { } } - throwError$2(state, 'unexpected end of the stream within a flow collection'); + throwError(state, 'unexpected end of the stream within a flow collection'); } -function readBlockScalar$1(state, nodeIndent) { +function readBlockScalar(state, nodeIndent) { var captureStart, folding, - chomping = CHOMPING_CLIP$1, + chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, @@ -67431,20 +74332,20 @@ function readBlockScalar$1(state, nodeIndent) { ch = state.input.charCodeAt(++state.position); if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP$1 === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP$1 : CHOMPING_STRIP$1; + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; } else { - throwError$2(state, 'repeat of a chomping mode identifier'); + throwError(state, 'repeat of a chomping mode identifier'); } - } else if ((tmp = fromDecimalCode$1(ch)) >= 0) { + } else if ((tmp = fromDecimalCode(ch)) >= 0) { if (tmp === 0) { - throwError$2(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); } else if (!detectedIndent) { textIndent = nodeIndent + tmp - 1; detectedIndent = true; } else { - throwError$2(state, 'repeat of an indentation width identifier'); + throwError(state, 'repeat of an indentation width identifier'); } } else { @@ -67452,18 +74353,18 @@ function readBlockScalar$1(state, nodeIndent) { } } - if (is_WHITE_SPACE$1(ch)) { + if (is_WHITE_SPACE(ch)) { do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE$1(ch)); + while (is_WHITE_SPACE(ch)); if (ch === 0x23/* # */) { do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL$1(ch) && (ch !== 0)); + while (!is_EOL(ch) && (ch !== 0)); } } while (ch !== 0) { - readLineBreak$1(state); + readLineBreak(state); state.lineIndent = 0; ch = state.input.charCodeAt(state.position); @@ -67478,7 +74379,7 @@ function readBlockScalar$1(state, nodeIndent) { textIndent = state.lineIndent; } - if (is_EOL$1(ch)) { + if (is_EOL(ch)) { emptyLines++; continue; } @@ -67487,9 +74388,9 @@ function readBlockScalar$1(state, nodeIndent) { if (state.lineIndent < textIndent) { // Perform the chomping. - if (chomping === CHOMPING_KEEP$1) { - state.result += common$3.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP$1) { + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { if (didReadContent) { // i.e. only if the scalar is not empty. state.result += '\n'; } @@ -67503,15 +74404,15 @@ function readBlockScalar$1(state, nodeIndent) { if (folding) { // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE$1(ch)) { + if (is_WHITE_SPACE(ch)) { atMoreIndented = true; // except for the first content line (cf. Example 8.1) - state.result += common$3.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); // End of more-indented block. } else if (atMoreIndented) { atMoreIndented = false; - state.result += common$3.repeat('\n', emptyLines + 1); + state.result += common.repeat('\n', emptyLines + 1); // Just one line break - perceive as the same line. } else if (emptyLines === 0) { @@ -67521,13 +74422,13 @@ function readBlockScalar$1(state, nodeIndent) { // Several line breaks - perceive as different lines. } else { - state.result += common$3.repeat('\n', emptyLines); + state.result += common.repeat('\n', emptyLines); } // Literal style: just add exact number of line breaks between content lines. } else { // Keep all line breaks except the header line break. - state.result += common$3.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); } didReadContent = true; @@ -67535,17 +74436,17 @@ function readBlockScalar$1(state, nodeIndent) { emptyLines = 0; captureStart = state.position; - while (!is_EOL$1(ch) && (ch !== 0)) { + while (!is_EOL(ch) && (ch !== 0)) { ch = state.input.charCodeAt(++state.position); } - captureSegment$1(state, captureStart, state.position, false); + captureSegment(state, captureStart, state.position, false); } return true; } -function readBlockSequence$1(state, nodeIndent) { +function readBlockSequence(state, nodeIndent) { var _line, _tag = state.tag, _anchor = state.anchor, @@ -67567,3385 +74468,4562 @@ function readBlockSequence$1(state, nodeIndent) { while (ch !== 0) { if (state.firstTabInLine !== -1) { state.position = state.firstTabInLine; - throwError$2(state, 'tab characters must not be used in indentation'); + throwError(state, 'tab characters must not be used in indentation'); } if (ch !== 0x2D/* - */) { break; } - following = state.input.charCodeAt(state.position + 1); + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; - if (!is_WS_OR_EOL$1(following)) { - break; + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; - detected = true; - state.position++; - - if (skipSeparationSpace$1(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } } } - _line = state.line; - composeNode$1(state, nodeIndent, CONTEXT_BLOCK_IN$1, false, true); - _result.push(state.result); - skipSeparationSpace$1(state, true, -1); + if (!type) { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } - ch = state.input.charCodeAt(state.position); + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError$2(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } } } - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; + if (state.listener !== null) { + state.listener('close', state); } - return false; + return state.tag !== null || state.anchor !== null || hasContent; } -function readBlockMapping$1(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _keyLine, - _keyLineStart, - _keyPos, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = Object.create(null), - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, ch; - // there is a leading tab before this token, so it can't be a block sequence/mapping; - // it can still be flow sequence/mapping or a scalar - if (state.firstTabInLine !== -1) return false; + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); + ch = state.input.charCodeAt(state.position); - while (ch !== 0) { - if (!atExplicitKey && state.firstTabInLine !== -1) { - state.position = state.firstTabInLine; - throwError$2(state, 'tab characters must not be used in indentation'); + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; } - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL$1(following)) { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; - detected = true; - atExplicitKey = true; - allowCompact = true; + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } - } else { - throwError$2(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; } - state.position += 1; - ch = following; + if (is_EOL(ch)) break; - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; + _position = state.position; - if (!composeNode$1(state, flowIndent, CONTEXT_FLOW_OUT$1, false, true)) { - // Neither implicit nor explicit notation. - // Reading is done. Go to the epilogue. - break; + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); } - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); + directiveArgs.push(state.input.slice(_position, state.position)); + } - while (is_WHITE_SPACE$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + if (ch !== 0) readLineBreak(state); - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } - if (!is_WS_OR_EOL$1(ch)) { - throwError$2(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } + skipSeparationSpace(state, true, -1); - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } - } else if (detected) { - throwError$2(state, 'can not read an implicit mapping pair; a colon is missed'); + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } - } else if (detected) { - throwError$2(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + state.documents.push(state.result); - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); } + return; + } - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (atExplicitKey) { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; - } + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} - if (composeNode$1(state, nodeIndent, CONTEXT_BLOCK_OUT$1, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } - } - if (!atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } +function loadDocuments(input, options) { + input = String(input); + options = options || {}; - skipSeparationSpace$1(state, true, -1); - ch = state.input.charCodeAt(state.position); + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; } - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError$2(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); } } - // - // Epilogue. - // + var state = new State$1(input, options); - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); } - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; } - return detected; + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; } -function readTagProperty$1(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - ch = state.input.charCodeAt(state.position); +function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } - if (ch !== 0x21/* ! */) return false; + var documents = loadDocuments(input, options); - if (state.tag !== null) { - throwError$2(state, 'duplication of a tag property'); + if (typeof iterator !== 'function') { + return documents; } - ch = state.input.charCodeAt(++state.position); + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); +function load$1(input, options) { + var documents = loadDocuments(input, options); - } else { - tagHandle = '!'; + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; } + throw new exception('expected a single document in the stream, but found more'); +} - _position = state.position; - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); +var loadAll_1 = loadAll$1; +var load_1 = load$1; - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError$2(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { +var loader = { + loadAll: loadAll_1, + load: load_1 +}; - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); +/*eslint-disable no-use-before-define*/ - if (!PATTERN_TAG_HANDLE$1.test(tagHandle)) { - throwError$2(state, 'named tag handle cannot contain such characters'); - } - isNamed = true; - _position = state.position + 1; - } else { - throwError$2(state, 'tag suffix cannot contain exclamation marks'); - } - } - ch = state.input.charCodeAt(++state.position); - } - tagName = state.input.slice(_position, state.position); - if (PATTERN_FLOW_INDICATORS$1.test(tagName)) { - throwError$2(state, 'tag suffix cannot contain flow indicator characters'); +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); } - } + type = schema.compiledTypeMap['fallback'][tag]; - if (tagName && !PATTERN_TAG_URI$1.test(tagName)) { - throwError$2(state, 'tag name cannot contain such characters: ' + tagName); - } + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } - try { - tagName = decodeURIComponent(tagName); - } catch (err) { - throwError$2(state, 'tag name is malformed: ' + tagName); + result[tag] = style; } - if (isVerbatim) { - state.tag = tagName; - - } else if (_hasOwnProperty$2$1.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; + return result; +} - } else if (tagHandle === '!') { - state.tag = '!' + tagName; +function encodeHex(character) { + var string, handle, length; - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; + string = character.toString(16).toUpperCase(); + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; } else { - throwError$2(state, 'undeclared tag handle "' + tagHandle + '"'); + throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); } - return true; + return '\\' + handle + common.repeat('0', length - string.length) + string; } -function readAnchorProperty$1(state) { - var _position, - ch; - ch = state.input.charCodeAt(state.position); +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; - if (ch !== 0x26/* & */) return false; +function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; - if (state.anchor !== null) { - throwError$2(state, 'duplication of an anchor property'); - } + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } - ch = state.input.charCodeAt(++state.position); - _position = state.position; + if (line.length && line !== '\n') result += ind; - while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { - ch = state.input.charCodeAt(++state.position); + result += line; } - if (state.position === _position) { - throwError$2(state, 'name of an anchor node must contain at least one character'); - } + return result; +} - state.anchor = state.input.slice(_position, state.position); - return true; +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); } -function readAlias$1(state) { - var _position, alias, - ch; +function testImplicitResolving(state, str) { + var index, length, type; - ch = state.input.charCodeAt(state.position); + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; - if (ch !== 0x2A/* * */) return false; + if (type.resolve(str)) { + return true; + } + } - ch = state.input.charCodeAt(++state.position); - _position = state.position; + return false; +} - while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} - if (state.position === _position) { - throwError$2(state, 'name of an alias node must contain at least one character'); - } +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} - alias = state.input.slice(_position, state.position); +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} - if (!_hasOwnProperty$2$1.call(state.anchorMap, alias)) { - throwError$2(state, 'unidentified alias "' + alias + '"'); - } +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} - state.result = state.anchorMap[alias]; - skipSeparationSpace$1(state, true, -1); - return true; +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; } -function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } } + return first; +} - state.tag = null; - state.anchor = null; - state.kind = null; - state.result = null; +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} - allowBlockStyles = allowBlockScalars = allowBlockCollections = - CONTEXT_BLOCK_OUT$1 === nodeContext || - CONTEXT_BLOCK_IN$1 === nodeContext; +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; - if (allowToSeek) { - if (skipSeparationSpace$1(state, true, -1)) { - atNewLine = true; +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; } - } - - if (indentStatus === 1) { - while (readTagProperty$1(state) || readAnchorProperty$1(state)) { - if (skipSeparationSpace$1(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; } - } else { - allowBlockCollections = false; + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); } - - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} - if (indentStatus === 1 || CONTEXT_BLOCK_OUT$1 === nodeContext) { - if (CONTEXT_FLOW_IN$1 === nodeContext || CONTEXT_FLOW_OUT$1 === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; } - - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence$1(state, blockIndent) || - readBlockMapping$1(state, blockIndent, flowIndent)) || - readFlowCollection$1(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar$1(state, flowIndent)) || - readSingleQuotedScalar$1(state, flowIndent) || - readDoubleQuotedScalar$1(state, flowIndent)) { - hasContent = true; - - } else if (readAlias$1(state)) { - hasContent = true; - - if (state.tag !== null || state.anchor !== null) { - throwError$2(state, 'alias node should not have any properties'); - } - - } else if (readPlainScalar$1(state, flowIndent, CONTEXT_FLOW_IN$1 === nodeContext)) { - hasContent = true; - - if (state.tag === null) { - state.tag = '?'; - } - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence$1(state, blockIndent); } - } - if (state.tag === null) { - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - } else if (state.tag === '?') { - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only automatically assigned to plain scalars. - // - // We only need to check kind conformity in case user explicitly assigns '?' - // tag, for example like this: "! [0]" - // - if (state.result !== null && state.kind !== 'scalar') { - throwError$2(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); } - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (state.tag !== '!') { - if (_hasOwnProperty$2$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - } else { - // looking for multi type - type = null; - typeList = state.typeMap.multi[state.kind || 'fallback']; + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { - for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { - if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { - type = typeList[typeIndex]; - break; - } - } + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); } + }()); +} - if (!type) { - throwError$2(state, 'unknown tag !<' + state.tag + '>'); - } +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; - if (state.result !== null && type.kind !== state.kind) { - throwError$2(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); - } + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); - if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched - throwError$2(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result, state.tag); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } + return indentIndicator + chomp + '\n'; +} - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; } -function readDocument$1(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = Object.create(null); - state.anchorMap = Object.create(null); + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace$1(state, true, -1); + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } - ch = state.input.charCodeAt(state.position); + return result; +} - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { - ch = state.input.charCodeAt(++state.position); + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 } + curr = next; + } - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} - if (directiveName.length < 1) { - throwError$2(state, 'directive name must not be less than one character in length'); - } +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; - while (ch !== 0) { - while (is_WHITE_SPACE$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL$1(ch)); - break; - } + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } - if (is_EOL$1(ch)) break; + return result; +} - _position = state.position; +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; - directiveArgs.push(state.input.slice(_position, state.position)); + if (state.replacer) { + value = state.replacer.call(object, String(index), value); } - if (ch !== 0) readLineBreak$1(state); + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { - if (_hasOwnProperty$2$1.call(directiveHandlers$1, directiveName)) { - directiveHandlers$1[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning$1(state, 'unknown document directive "' + directiveName + '"'); + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; } } - skipSeparationSpace$1(state, true, -1); + state.tag = _tag; + state.dump = '[' + _result + ']'; +} - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace$1(state, true, -1); +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; - } else if (hasDirectives) { - throwError$2(state, 'directives end mark is expected'); - } + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; - composeNode$1(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT$1, false, true); - skipSeparationSpace$1(state, true, -1); + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS$1.test(state.input.slice(documentStart, state.position))) { - throwWarning$1(state, 'non-ASCII line breaks are interpreted as content'); - } + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { - state.documents.push(state.result); + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } - if (state.position === state.lineStart && testDocumentSeparator$1(state)) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace$1(state, true, -1); + _result += state.dump; } - return; } - if (state.position < (state.length - 1)) { - throwError$2(state, 'end of the stream or a document separator is expected'); - } else { - return; - } + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. } +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; -function loadDocuments$1(input, options) { - input = String(input); - options = options || {}; + for (index = 0, length = objectKeyList.length; index < length; index += 1) { - if (input.length !== 0) { + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; - } + if (state.condenseFlow) pairBuffer += '"'; - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); } - } - var state = new State$2(input, options); + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } - var nullpos = input.indexOf('\0'); + if (state.dump.length > 1024) pairBuffer += '? '; - if (nullpos !== -1) { - state.position = nullpos; - throwError$2(state, 'null byte is not allowed in input'); - } + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; - } + pairBuffer += state.dump; - while (state.position < (state.length - 1)) { - readDocument$1(state); + // Both key and value are valid. + _result += pairBuffer; } - return state.documents; + state.tag = _tag; + state.dump = '{' + _result + '}'; } +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; -function loadAll$2(input, iterator, options) { - if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { - options = iterator; - iterator = null; + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); } - var documents = loadDocuments$1(input, options); + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; - if (typeof iterator !== 'function') { - return documents; - } + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } - for (var index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); - } -} + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } -function load$3(input, options) { - var documents = loadDocuments$1(input, options); + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new exception$1('expected a single document in the stream, but found more'); -} + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } -var loadAll_1$1 = loadAll$2; -var load_1$1 = load$3; + pairBuffer += state.dump; -var loader$1 = { - loadAll: loadAll_1$1, - load: load_1$1 -}; + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } -/*eslint-disable no-use-before-define*/ + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + pairBuffer += state.dump; + // Both key and value are valid. + _result += pairBuffer; + } + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} -var _toString$2$1 = Object.prototype.toString; -var _hasOwnProperty$3$1 = Object.prototype.hasOwnProperty; +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; -var CHAR_BOM = 0xFEFF; -var CHAR_TAB$1 = 0x09; /* Tab */ -var CHAR_LINE_FEED$1 = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN$1 = 0x0D; /* CR */ -var CHAR_SPACE$1 = 0x20; /* Space */ -var CHAR_EXCLAMATION$1 = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE$2 = 0x22; /* " */ -var CHAR_SHARP$1 = 0x23; /* # */ -var CHAR_PERCENT$1 = 0x25; /* % */ -var CHAR_AMPERSAND$1 = 0x26; /* & */ -var CHAR_SINGLE_QUOTE$2 = 0x27; /* ' */ -var CHAR_ASTERISK$2 = 0x2A; /* * */ -var CHAR_COMMA$3 = 0x2C; /* , */ -var CHAR_MINUS$1 = 0x2D; /* - */ -var CHAR_COLON$1 = 0x3A; /* : */ -var CHAR_EQUALS$1 = 0x3D; /* = */ -var CHAR_GREATER_THAN$1 = 0x3E; /* > */ -var CHAR_QUESTION$1 = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT$1 = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET$3 = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET$3 = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT$1 = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET$1 = 0x7B; /* { */ -var CHAR_VERTICAL_LINE$1 = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET$1 = 0x7D; /* } */ + typeList = explicit ? state.explicitTypes : state.implicitTypes; -var ESCAPE_SEQUENCES$1 = {}; + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; -ESCAPE_SEQUENCES$1[0x00] = '\\0'; -ESCAPE_SEQUENCES$1[0x07] = '\\a'; -ESCAPE_SEQUENCES$1[0x08] = '\\b'; -ESCAPE_SEQUENCES$1[0x09] = '\\t'; -ESCAPE_SEQUENCES$1[0x0A] = '\\n'; -ESCAPE_SEQUENCES$1[0x0B] = '\\v'; -ESCAPE_SEQUENCES$1[0x0C] = '\\f'; -ESCAPE_SEQUENCES$1[0x0D] = '\\r'; -ESCAPE_SEQUENCES$1[0x1B] = '\\e'; -ESCAPE_SEQUENCES$1[0x22] = '\\"'; -ESCAPE_SEQUENCES$1[0x5C] = '\\\\'; -ESCAPE_SEQUENCES$1[0x85] = '\\N'; -ESCAPE_SEQUENCES$1[0xA0] = '\\_'; -ESCAPE_SEQUENCES$1[0x2028] = '\\L'; -ESCAPE_SEQUENCES$1[0x2029] = '\\P'; + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { -var DEPRECATED_BOOLEANS_SYNTAX$1 = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } -var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; -function compileStyleMap$1(schema, map) { - var result, keys, index, length, tag, style, type; + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } - if (map === null) return {}; + state.dump = _result; + } - result = {}; - keys = Object.keys(map); + return true; + } + } - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); + return false; +} - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); - } - type = schema.compiledTypeMap['fallback'][tag]; +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; - if (type && _hasOwnProperty$3$1.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } + if (!detectType(state, object, false)) { + detectType(state, object, true); + } - result[tag] = style; + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); } - return result; -} + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; -function encodeHex$1(character) { - var string, handle, length; + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } - string = character.toString(16).toUpperCase(); + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; } else { - throw new exception$1('code point within a string may not be greater than 0xFFFFFFFF'); - } + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } - return '\\' + handle + common$3.repeat('0', length - string.length) + string; -} + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } -var QUOTING_TYPE_SINGLE = 1, - QUOTING_TYPE_DOUBLE = 2; + state.dump = tagStr + ' ' + state.dump; + } + } -function State$1$1(options) { - this.schema = options['schema'] || _default$8; - this.indent = Math.max(1, (options['indent'] || 2)); - this.noArrayIndent = options['noArrayIndent'] || false; - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common$3.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap$1(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - this.condenseFlow = options['condenseFlow'] || false; - this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; - this.forceQuotes = options['forceQuotes'] || false; - this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + return true; +} - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; - this.tag = null; - this.result = ''; + inspectNode(object, objects, duplicatesIndexes); - this.duplicates = []; - this.usedDuplicates = null; + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); } -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString$1(string, spaces) { - var ind = common$3.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } } else { - line = string.slice(position, next + 1); - position = next + 1; + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } } - - if (line.length && line !== '\n') result += ind; - - result += line; } - - return result; } -function generateNextLine$1(state, level) { - return '\n' + common$3.repeat(' ', state.indent * level); -} +function dump$1(input, options) { + options = options || {}; -function testImplicitResolving$1(state, str) { - var index, length, type; + var state = new State(options); - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; + if (!state.noRefs) getDuplicateReferences(input, state); - if (type.resolve(str)) { - return true; - } - } + var value = input; - return false; -} + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } -// [33] s-white ::= s-space | s-tab -function isWhitespace$1(c) { - return c === CHAR_SPACE$1 || c === CHAR_TAB$1; -} + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable$1(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) - || (0x10000 <= c && c <= 0x10FFFF); + return ''; } -// [34] ns-char ::= nb-char - s-white -// [27] nb-char ::= c-printable - b-char - c-byte-order-mark -// [26] b-char ::= b-line-feed | b-carriage-return -// Including s-white (for some reason, examples doesn't match specs in this aspect) -// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark -function isNsCharOrWhitespace(c) { - return isPrintable$1(c) - && c !== CHAR_BOM - // - b-char - && c !== CHAR_CARRIAGE_RETURN$1 - && c !== CHAR_LINE_FEED$1; -} +var dump_1 = dump$1; -// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out -// c = flow-in ⇒ ns-plain-safe-in -// c = block-key ⇒ ns-plain-safe-out -// c = flow-key ⇒ ns-plain-safe-in -// [128] ns-plain-safe-out ::= ns-char -// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator -// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) -// | ( /* An ns-char preceding */ “#” ) -// | ( “:” /* Followed by an ns-plain-safe(c) */ ) -function isPlainSafe$1(c, prev, inblock) { - var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); - var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace$1(c); - return ( - // ns-plain-safe - inblock ? // c = flow-in - cIsNsCharOrWhitespace - : cIsNsCharOrWhitespace - // - c-flow-indicator - && c !== CHAR_COMMA$3 - && c !== CHAR_LEFT_SQUARE_BRACKET$3 - && c !== CHAR_RIGHT_SQUARE_BRACKET$3 - && c !== CHAR_LEFT_CURLY_BRACKET$1 - && c !== CHAR_RIGHT_CURLY_BRACKET$1 - ) - // ns-plain-char - && c !== CHAR_SHARP$1 // false on '#' - && !(prev === CHAR_COLON$1 && !cIsNsChar) // false on ': ' - || (isNsCharOrWhitespace(prev) && !isWhitespace$1(prev) && c === CHAR_SHARP$1) // change to true on '[^ ]#' - || (prev === CHAR_COLON$1 && cIsNsChar); // change to true on ':[^ ]' -} +var dumper = { + dump: dump_1 +}; -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst$1(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part - return isPrintable$1(c) && c !== CHAR_BOM - && !isWhitespace$1(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS$1 - && c !== CHAR_QUESTION$1 - && c !== CHAR_COLON$1 - && c !== CHAR_COMMA$3 - && c !== CHAR_LEFT_SQUARE_BRACKET$3 - && c !== CHAR_RIGHT_SQUARE_BRACKET$3 - && c !== CHAR_LEFT_CURLY_BRACKET$1 - && c !== CHAR_RIGHT_CURLY_BRACKET$1 - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP$1 - && c !== CHAR_AMPERSAND$1 - && c !== CHAR_ASTERISK$2 - && c !== CHAR_EXCLAMATION$1 - && c !== CHAR_VERTICAL_LINE$1 - && c !== CHAR_EQUALS$1 - && c !== CHAR_GREATER_THAN$1 - && c !== CHAR_SINGLE_QUOTE$2 - && c !== CHAR_DOUBLE_QUOTE$2 - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT$1 - && c !== CHAR_COMMERCIAL_AT$1 - && c !== CHAR_GRAVE_ACCENT$1; +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; } -// Simplified test for values allowed as the last character in plain style. -function isPlainSafeLast(c) { - // just not whitespace or colon, it will be checked to be plain character later - return !isWhitespace$1(c) && c !== CHAR_COLON$1; -} -// Same as 'string'.codePointAt(pos), but works in older browsers. -function codePointAt(string, pos) { - var first = string.charCodeAt(pos), second; - if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { - second = string.charCodeAt(pos + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - } - } - return first; -} +var Type = type; +var Schema = schema; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; + +// Re-export all types in case user wants to create custom schema +var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str +}; -// Determines whether block indentation indicator is required. -function needIndentIndicator$1(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); -} +// Removed functions from JS-YAML 3.0.x +var safeLoad = renamed('safeLoad', 'load'); +var safeLoadAll = renamed('safeLoadAll', 'loadAll'); +var safeDump = renamed('safeDump', 'dump'); -var STYLE_PLAIN$1 = 1, - STYLE_SINGLE$1 = 2, - STYLE_LITERAL$1 = 3, - STYLE_FOLDED$1 = 4, - STYLE_DOUBLE$1 = 5; +var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump +}; -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth, - testAmbiguousType, quotingType, forceQuotes, inblock) { +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * + * @typedef {string} Type + * @typedef {Object} Props + * + * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + */ - var i; - var char = 0; - var prevChar = null; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst$1(codePointAt(string, 0)) - && isPlainSafeLast(codePointAt(string, string.length - 1)); +const convert$8 = + /** + * @type {( + * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & + * ((test?: Test) => AssertAnything) + * )} + */ + ( + /** + * Generate an assertion from a check. + * @param {Test} [test] + * When nullish, checks if `node` is a `Node`. + * When `string`, works like passing `function (node) {return node.type === test}`. + * When `function` checks if function passed the node is true. + * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. + * When `array`, checks any one of the subtests pass. + * @returns {AssertAnything} + */ + function (test) { + if (test === undefined || test === null) { + return ok$7 + } - if (singleLineOnly || forceQuotes) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - if (!isPrintable$1(char)) { - return STYLE_DOUBLE$1; + if (typeof test === 'string') { + return typeFactory$7(test) } - plain = plain && isPlainSafe$1(char, prevChar, inblock); - prevChar = char; - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - if (char === CHAR_LINE_FEED$1) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable$1(char)) { - return STYLE_DOUBLE$1; + + if (typeof test === 'object') { + return Array.isArray(test) ? anyFactory$7(test) : propsFactory$6(test) } - plain = plain && isPlainSafe$1(char, prevChar, inblock); - prevChar = char; - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - if (plain && !forceQuotes && !testAmbiguousType(string)) { - return STYLE_PLAIN$1; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE$1 : STYLE_SINGLE$1; - } - // Edge case: block indentation indicator can only have one digit. - if (indentPerLevel > 9 && needIndentIndicator$1(string)) { - return STYLE_DOUBLE$1; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - if (!forceQuotes) { - return hasFoldableLine ? STYLE_FOLDED$1 : STYLE_LITERAL$1; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE$1 : STYLE_SINGLE$1; -} -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar$1(state, string, level, iskey, inblock) { - state.dump = (function () { - if (string.length === 0) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; - } - if (!state.noCompatMode) { - if (DEPRECATED_BOOLEANS_SYNTAX$1.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + if (typeof test === 'function') { + return castFactory$6(test) } + + throw new Error('Expected function, string, or object as test') } + ); +/** + * @param {Array.} tests + * @returns {AssertAnything} + */ +function anyFactory$7(tests) { + /** @type {Array.} */ + const checks = []; + let index = -1; - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + while (++index < tests.length) { + checks[index] = convert$8(tests[index]); + } - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving$1(state, string); - } + return castFactory$6(any) - switch (chooseScalarStyle$1(string, singleLineOnly, state.indent, lineWidth, - testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + /** + * @this {unknown} + * @param {unknown[]} parameters + * @returns {boolean} + */ + function any(...parameters) { + let index = -1; - case STYLE_PLAIN$1: - return string; - case STYLE_SINGLE$1: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL$1: - return '|' + blockHeader$1(string, state.indent) - + dropEndingNewline$1(indentString$1(string, indent)); - case STYLE_FOLDED$1: - return '>' + blockHeader$1(string, state.indent) - + dropEndingNewline$1(indentString$1(foldString$1(string, lineWidth), indent)); - case STYLE_DOUBLE$1: - return '"' + escapeString$1(string) + '"'; - default: - throw new exception$1('impossible error: invalid scalar style'); + while (++index < checks.length) { + if (checks[index].call(this, ...parameters)) return true } - }()); + + return false + } } -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader$1(string, indentPerLevel) { - var indentIndicator = needIndentIndicator$1(string) ? String(indentPerLevel) : ''; +/** + * Utility to assert each property in `test` is represented in `node`, and each + * values are strictly equal. + * + * @param {Props} check + * @returns {AssertAnything} + */ +function propsFactory$6(check) { + return castFactory$6(all) - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); + /** + * @param {Node} node + * @returns {boolean} + */ + function all(node) { + /** @type {string} */ + let key; - return indentIndicator + chomp + '\n'; -} + for (key in check) { + // @ts-expect-error: hush, it sure works as an index. + if (node[key] !== check[key]) return false + } -// (See the note for writeScalar.) -function dropEndingNewline$1(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; + return true + } } -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString$1(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; - - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine$1(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * + * @param {Type} check + * @returns {AssertAnything} + */ +function typeFactory$7(check) { + return castFactory$6(type) - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine$1(line, width); - prevMoreIndented = moreIndented; + /** + * @param {Node} node + */ + function type(node) { + return node && node.type === check } - - return result; } -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine$1(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * @param {TestFunctionAnything} check + * @returns {AssertAnything} + */ +function castFactory$6(check) { + return assertion - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; + /** + * @this {unknown} + * @param {Array.} parameters + * @returns {boolean} + */ + function assertion(...parameters) { + // @ts-expect-error: spreading is fine. + return Boolean(check.call(this, ...parameters)) } +} - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); - } +// Utility to return true. +function ok$7() { + return true +} - return result.slice(1); // drop extra \n joiner +/** + * @param {string} d + * @returns {string} + */ +function color$8(d) { + return '\u001B[33m' + d + '\u001B[39m' } -// Escapes a double-quoted string. -function escapeString$1(string) { - var result = ''; - var char = 0; - var escapeSeq; +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ + +/** + * Continue traversing as normal + */ +const CONTINUE$8 = true; +/** + * Do not traverse this node’s children + */ +const SKIP$8 = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT$8 = false; + +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test node, optional + * @param visitor Function to run for each node + * @param reverse Visit the tree in reverse order, defaults to false + */ +const visitParents$8 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-expect-error no visitor given, so `visitor` is test. + visitor = test; + test = null; + } - for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - escapeSeq = ESCAPE_SEQUENCES$1[char]; + const is = convert$8(test); + const step = reverse ? -1 : 1; - if (!escapeSeq && isPrintable$1(char)) { - result += string[i]; - if (char >= 0x10000) result += string[i + 1]; - } else { - result += escapeSeq || encodeHex$1(char); - } - } + factory(tree, null, [])(); - return result; -} + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + // @ts-expect-error: hush + const value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string|undefined} */ + let name; -function writeFlowSequence$1(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length, - value; + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color$8(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } - if (state.replacer) { - value = state.replacer.call(object, String(index), value); - } + return visit - // Write only valid elements, put null instead of invalid elements. - if (writeNode$1(state, level, value, false, false) || - (typeof value === 'undefined' && - writeNode$1(state, level, null, false, false))) { + function visit() { + /** @type {ActionTuple} */ + let result = []; + /** @type {ActionTuple} */ + let subresult; + /** @type {number} */ + let offset; + /** @type {Array.} */ + let grandparents; - if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); - _result += state.dump; - } - } + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$7(visitor(node, parents)); - state.tag = _tag; - state.dump = '[' + _result + ']'; -} + if (result[0] === EXIT$8) { + return result + } + } -function writeBlockSequence$1(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length, - value; + // @ts-expect-error looks like a parent. + if (node.children && result[0] !== SKIP$8) { + // @ts-expect-error looks like a parent. + offset = (reverse ? node.children.length : -1) + step; + // @ts-expect-error looks like a parent. + grandparents = parents.concat(node); - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; + // @ts-expect-error looks like a parent. + while (offset > -1 && offset < node.children.length) { + // @ts-expect-error looks like a parent. + subresult = factory(node.children[offset], offset, grandparents)(); - if (state.replacer) { - value = state.replacer.call(object, String(index), value); - } + if (subresult[0] === EXIT$8) { + return subresult + } - // Write only valid elements, put null instead of invalid elements. - if (writeNode$1(state, level + 1, value, true, true, false, true) || - (typeof value === 'undefined' && - writeNode$1(state, level + 1, null, true, true, false, true))) { + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } - if (!compact || _result !== '') { - _result += generateNextLine$1(state, level); + return result + } } + } + ); - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - _result += '-'; - } else { - _result += '- '; - } +/** + * @param {VisitorResult} value + * @returns {ActionTuple} + */ +function toResult$7(value) { + if (Array.isArray(value)) { + return value + } - _result += state.dump; - } + if (typeof value === 'number') { + return [CONTINUE$8, value] } - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. + return [value] } -function writeFlowMapping$1(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - - pairBuffer = ''; - if (_result !== '') pairBuffer += ', '; - - if (state.condenseFlow) pairBuffer += '"'; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); - } - - if (!writeNode$1(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + */ - if (state.dump.length > 1024) pairBuffer += '? '; +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test, optional + * @param visitor Function to run for each node + * @param reverse Fisit the tree in reverse, defaults to false + */ +const visit$7 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } - pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + visitParents$8(tree, test, overload, reverse); - if (!writeNode$1(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. + /** + * @param {Node} node + * @param {Array.} parents + */ + function overload(node, parents) { + const parent = parents[parents.length - 1]; + return visitor( + node, + parent ? parent.children.indexOf(node) : null, + parent + ) + } } + ); - pairBuffer += state.dump; +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0'; - // Both key and value are valid. - _result += pairBuffer; - } +const MAX_LENGTH$2 = 256; +const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991; - state.tag = _tag; - state.dump = '{' + _result + '}'; -} +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16; -function writeBlockMapping$1(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; +var constants = { + SEMVER_SPEC_VERSION, + MAX_LENGTH: MAX_LENGTH$2, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, + MAX_SAFE_COMPONENT_LENGTH +}; - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new exception$1('sortKeys must be a boolean or a function'); - } +var re$2 = {exports: {}}; - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; +const debug$1 = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {}; - if (!compact || _result !== '') { - pairBuffer += generateNextLine$1(state, level); - } +var debug_1 = debug$1; - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; +(function (module, exports) { +const { MAX_SAFE_COMPONENT_LENGTH } = constants; +const debug = debug_1; +exports = module.exports = {}; - if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); - } +// The actual regexps go on exports.re +const re = exports.re = []; +const src = exports.src = []; +const t = exports.t = {}; +let R = 0; - if (!writeNode$1(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. - } +const createToken = (name, value, isGlobal) => { + const index = R++; + debug(index, value); + t[name] = index; + src[index] = value; + re[index] = new RegExp(value, isGlobal ? 'g' : undefined); +}; - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; - } - } +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. - pairBuffer += state.dump; +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); - if (explicitPair) { - pairBuffer += generateNextLine$1(state, level); - } +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. - if (!writeNode$1(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - pairBuffer += ':'; - } else { - pairBuffer += ': '; - } +// ## Main Version +// Three dot-separated numeric identifiers. - pairBuffer += state.dump; +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`); - // Both key and value are valid. - _result += pairBuffer; - } +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`); - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. -function detectType$1(state, object, explicit) { - var _result, typeList, index, length, type, style; +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`); - typeList = explicit ? state.explicitTypes : state.implicitTypes; +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`); - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); - if (explicit) { - if (type.multi && type.representName) { - state.tag = type.representName(object); - } else { - state.tag = type.tag; - } - } else { - state.tag = '?'; - } +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. - if (_toString$2$1.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty$3$1.call(type.represent, style)) { - _result = type.represent[style](object, style); - } else { - throw new exception$1('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); - } +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); - state.dump = _result; - } +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. - return true; - } - } +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); - return false; -} +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode$1(state, level, object, block, compact, iskey, isblockseq) { - state.tag = null; - state.dump = object; +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. - if (!detectType$1(state, object, false)) { - detectType$1(state, object, true); - } +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`); - var type = _toString$2$1.call(state.dump); - var inblock = block; - var tagStr; +createToken('FULL', `^${src[t.FULLPLAIN]}$`); - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); - } +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`); - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } +createToken('GTLT', '((?:<|>)?=?)'); - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; - } +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping$1(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping$1(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - if (block && (state.dump.length !== 0)) { - if (state.noArrayIndent && !isblockseq && level > 0) { - writeBlockSequence$1(state, level - 1, state.dump, compact); - } else { - writeBlockSequence$1(state, level, state.dump, compact); - } - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowSequence$1(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar$1(state, state.dump, level, iskey, inblock); - } - } else if (type === '[object Undefined]') { - return false; - } else { - if (state.skipInvalid) return false; - throw new exception$1('unacceptable kind of an object to dump ' + type); - } +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`); - if (state.tag !== null && state.tag !== '?') { - // Need to encode all characters except those allowed by the spec: - // - // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ - // [36] ns-hex-digit ::= ns-dec-digit - // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ - // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ - // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” - // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” - // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” - // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” - // - // Also need to encode '!' because it has special meaning (end of tag prefix). - // - tagStr = encodeURI( - state.tag[0] === '!' ? state.tag.slice(1) : state.tag - ).replace(/!/g, '%21'); +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`); - if (state.tag[0] === '!') { - tagStr = '!' + tagStr; - } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { - tagStr = '!!' + tagStr.slice(18); - } else { - tagStr = '!<' + tagStr + '>'; - } +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); - state.dump = tagStr + ' ' + state.dump; - } - } +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`); +createToken('COERCERTL', src[t.COERCE], true); - return true; -} +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)'); -function getDuplicateReferences$1(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); +exports.tildeTrimReplace = '$1~'; - inspectNode$1(object, objects, duplicatesIndexes); +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = new Array(length); -} +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)'); -function inspectNode$1(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); +exports.caretTrimReplace = '$1^'; - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode$1(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode$1(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } - } -} +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); +exports.comparatorTrimReplace = '$1$2$3'; -function dump$2(input, options) { - options = options || {}; +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`); - var state = new State$1$1(options); +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`); - if (!state.noRefs) getDuplicateReferences$1(input, state); +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*'); +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); +}(re$2, re$2.exports)); - var value = input; +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl']; +const parseOptions$2 = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true; + return options + }, {}); +var parseOptions_1 = parseOptions$2; - if (state.replacer) { - value = state.replacer.call({ '': value }, '', value); - } +const numeric = /^[0-9]+$/; +const compareIdentifiers$1 = (a, b) => { + const anum = numeric.test(a); + const bnum = numeric.test(b); - if (writeNode$1(state, 0, value, true, true)) return state.dump + '\n'; + if (anum && bnum) { + a = +a; + b = +b; + } - return ''; -} + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +}; -var dump_1$1 = dump$2; +const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a); -var dumper$1 = { - dump: dump_1$1 +var identifiers = { + compareIdentifiers: compareIdentifiers$1, + rcompareIdentifiers }; -function renamed(from, to) { - return function () { - throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + - 'Use yaml.' + to + ' instead, which is now safe by default.'); - }; -} +const debug = debug_1; +const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants; +const { re: re$1, t: t$1 } = re$2.exports; +const parseOptions$1 = parseOptions_1; +const { compareIdentifiers } = identifiers; +class SemVer$2 { + constructor (version, options) { + options = parseOptions$1(options); -var Type$1$1 = type$1; -var Schema$1$1 = schema$2; -var FAILSAFE_SCHEMA$1 = failsafe$1; -var JSON_SCHEMA$1 = json$1; -var CORE_SCHEMA$1 = core$3; -var DEFAULT_SCHEMA$1 = _default$8; -var load$1$1 = loader$1.load; -var loadAll$1$1 = loader$1.loadAll; -var dump$1$1 = dumper$1.dump; -var YAMLException$1$1 = exception$1; + if (version instanceof SemVer$2) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version; + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } -// Removed functions from JS-YAML 3.0.x -var safeLoad$2 = renamed('safeLoad', 'load'); -var safeLoadAll$2 = renamed('safeLoadAll', 'loadAll'); -var safeDump$2 = renamed('safeDump', 'dump'); - -var jsYaml$2 = { - Type: Type$1$1, - Schema: Schema$1$1, - FAILSAFE_SCHEMA: FAILSAFE_SCHEMA$1, - JSON_SCHEMA: JSON_SCHEMA$1, - CORE_SCHEMA: CORE_SCHEMA$1, - DEFAULT_SCHEMA: DEFAULT_SCHEMA$1, - load: load$1$1, - loadAll: loadAll$1$1, - dump: dump$1$1, - YAMLException: YAMLException$1$1, - safeLoad: safeLoad$2, - safeLoadAll: safeLoadAll$2, - safeDump: safeDump$2 -}; + if (version.length > MAX_LENGTH$1) { + throw new TypeError( + `version is longer than ${MAX_LENGTH$1} characters` + ) + } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ + debug('SemVer', version, options); + this.options = options; + this.loose = !!options.loose; + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease; -const convert$y = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$w - } + const m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]); - if (typeof test === 'string') { - return typeFactory$v(test) - } + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$v(test) : propsFactory$v(test) - } + this.raw = version; - if (typeof test === 'function') { - return castFactory$v(test) - } + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; - throw new Error('Expected function, string, or object as test') + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$v(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$y(tests[index]); + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = []; + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }); + } + + this.build = m[5] ? m[5].split('.') : []; + this.format(); } - return castFactory$v(any) + format () { + this.version = `${this.major}.${this.minor}.${this.patch}`; + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}`; + } + return this.version + } - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + toString () { + return this.version + } - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + compare (other) { + debug('SemVer.compare', this.version, this.options, other); + if (!(other instanceof SemVer$2)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer$2(other, this.options); } - return false + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) } -} -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$v(check) { - return castFactory$v(all) + compareMain (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); + } - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false + comparePre (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); } - return true + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0; + do { + const a = this.prerelease[i]; + const b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) } -} -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$v(check) { - return castFactory$v(type) + compareBuild (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); + } - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check + let i = 0; + do { + const a = this.build[i]; + const b = other.build[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) } -} -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$v(check) { - return assertion + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier); + } + this.inc('pre', identifier); + break - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++; + } + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++; + } + this.patch = 0; + this.prerelease = []; + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++; + } + this.prerelease = []; + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0]; + } else { + let i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0); + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0]; + } + } else { + this.prerelease = [identifier, 0]; + } + } + break + + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format(); + this.raw = this.version; + return this } } -// Utility to return true. -function ok$w() { - return true -} +var semver = SemVer$2; -/** - * @param {string} d - * @returns {string} - */ -function color$w(d) { - return '\u001B[33m' + d + '\u001B[39m' -} +const {MAX_LENGTH} = constants; +const { re, t } = re$2.exports; +const SemVer$1 = semver; -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ +const parseOptions = parseOptions_1; +const parse = (version, options) => { + options = parseOptions(options); -/** - * Continue traversing as normal - */ -const CONTINUE$v = true; -/** - * Do not traverse this node’s children - */ -const SKIP$v = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$v = false; + if (version instanceof SemVer$1) { + return version + } -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$v = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } + if (typeof version !== 'string') { + return null + } - const is = convert$y(test); - const step = reverse ? -1 : 1; + if (version.length > MAX_LENGTH) { + return null + } - factory(tree, null, [])(); + const r = options.loose ? re[t.LOOSE] : re[t.FULL]; + if (!r.test(version)) { + return null + } - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; + try { + return new SemVer$1(version, options) + } catch (er) { + return null + } +}; - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; +var parse_1 = parse; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$w(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } +const SemVer = semver; +const compare$1 = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)); - return visit +var compare_1 = compare$1; - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; +const compare = compare_1; +const lt = (a, b, loose) => compare(a, b, loose) < 0; +var lt_1 = lt; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$v(visitor(node, parents)); +const allowedKeys = [ + "added", + "napiVersion", + "deprecated", + "removed", + "changes", +]; +const changesExpectedKeys = ["version", "pr-url", "description"]; +const VERSION_PLACEHOLDER = "REPLACEME"; +const MAX_SAFE_SEMVER_VERSION = parse_1( + Array.from({ length: 3 }, () => Number.MAX_SAFE_INTEGER).join(".") +); +const validVersionNumberRegex = /^v\d+\.\d+\.\d+$/; +const prUrlRegex = new RegExp("^https://github.com/nodejs/node/pull/\\d+$"); +const privatePRUrl = "https://github.com/nodejs-private/node-private/pull/"; - if (result[0] === EXIT$v) { - return result - } - } +let releasedVersions; +let invalidVersionMessage = "version(s) must respect the pattern `vx.x.x` or"; +if (process.env.NODE_RELEASED_VERSIONS) { + console.log("Using release list from env..."); + releasedVersions = process.env.NODE_RELEASED_VERSIONS.split(",").map( + (v) => `v${v}` + ); + invalidVersionMessage = `version not listed in the changelogs, `; +} +invalidVersionMessage += `use the placeholder \`${VERSION_PLACEHOLDER}\``; - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$v) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); +const kContainsIllegalKey = Symbol("illegal key"); +const kWrongKeyOrder = Symbol("Wrong key order"); +function unorderedKeys(meta) { + const keys = Object.keys(meta); + let previousKeyIndex = -1; + for (const key of keys) { + const keyIndex = allowedKeys.indexOf(key); + if (keyIndex <= previousKeyIndex) { + return keyIndex === -1 ? kContainsIllegalKey : kWrongKeyOrder; + } + previousKeyIndex = keyIndex; + } +} - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); +function containsInvalidVersionNumber(version) { + if (Array.isArray(version)) { + return version.some(containsInvalidVersionNumber); + } - if (subresult[0] === EXIT$v) { - return subresult - } + if (version === undefined || version === VERSION_PLACEHOLDER) return false; - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + if ( + releasedVersions && + // Always ignore 0.0.x and 0.1.x release numbers: + (version[1] !== "0" || (version[3] !== "0" && version[3] !== "1")) + ) + return !releasedVersions.includes(version); - return result - } - } - } - ); + return !validVersionNumberRegex.test(version); +} +const getValidSemver = (version) => + version === VERSION_PLACEHOLDER ? MAX_SAFE_SEMVER_VERSION : version; +function areVersionsUnordered(versions) { + if (!Array.isArray(versions)) return false; -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$v(value) { - if (Array.isArray(value)) { - return value + for (let index = 1; index < versions.length; index++) { + if ( + lt_1( + getValidSemver(versions[index - 1]), + getValidSemver(versions[index]) + ) + ) { + return true; + } } +} - if (typeof value === 'number') { - return [CONTINUE$v, value] +function invalidChangesKeys(change) { + const keys = Object.keys(change); + const { length } = keys; + if (length !== changesExpectedKeys.length) return true; + for (let index = 0; index < length; index++) { + if (keys[index] !== changesExpectedKeys[index]) return true; } +} +function validateSecurityChange(file, node, change, index) { + if ("commit" in change) { + if (typeof change.commit !== "string" || isNaN(`0x${change.commit}`)) { + file.message( + `changes[${index}]: Ill-formed security change commit ID`, + node + ); + } - return [value] + if (Object.keys(change)[1] === "commit") { + change = { ...change }; + delete change.commit; + } + } + if (invalidChangesKeys(change)) { + const securityChangeExpectedKeys = [...changesExpectedKeys]; + securityChangeExpectedKeys[0] += "[, commit]"; + file.message( + `changes[${index}]: Invalid keys. Expected keys are: ` + + securityChangeExpectedKeys.join(", "), + node + ); + } } +function validateChanges(file, node, changes) { + if (!Array.isArray(changes)) + return file.message("`changes` must be a YAML list", node); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ + const changesVersions = []; + for (let index = 0; index < changes.length; index++) { + const change = changes[index]; -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$v = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } + const isAncient = + typeof change.version === "string" && change.version.startsWith("v0."); + const isSecurityChange = + !isAncient && + typeof change["pr-url"] === "string" && + change["pr-url"].startsWith(privatePRUrl); - visitParents$v(tree, test, overload, reverse); + if (isSecurityChange) { + validateSecurityChange(file, node, change, index); + } else if (!isAncient && invalidChangesKeys(change)) { + file.message( + `changes[${index}]: Invalid keys. Expected keys are: ` + + changesExpectedKeys.join(", "), + node + ); + } - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + if (containsInvalidVersionNumber(change.version)) { + file.message(`changes[${index}]: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(change.version)) { + file.message(`changes[${index}]: list of versions is not in order`, node); } - ); -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0'; + if (!isAncient && !isSecurityChange && !prUrlRegex.test(change["pr-url"])) { + file.message( + `changes[${index}]: PR-URL does not match the expected pattern`, + node + ); + } -const MAX_LENGTH$2 = 256; -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991; + if (typeof change.description !== "string" || !change.description.length) { + file.message( + `changes[${index}]: must contain a non-empty description`, + node + ); + } else if (!change.description.endsWith(".")) { + file.message( + `changes[${index}]: description must end with a period`, + node + ); + } -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16; + changesVersions.push( + Array.isArray(change.version) ? change.version[0] : change.version + ); + } -var constants$3 = { - SEMVER_SPEC_VERSION, - MAX_LENGTH: MAX_LENGTH$2, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH -}; + if (areVersionsUnordered(changesVersions)) { + file.message("Items in `changes` list are not in order", node); + } +} -const debug$b = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {}; +function validateMeta(node, file, meta) { + switch (unorderedKeys(meta)) { + case kContainsIllegalKey: + file.message( + "YAML dictionary contains illegal keys. Accepted values are: " + + allowedKeys.join(", "), + node + ); + break; -var debug_1 = debug$b; + case kWrongKeyOrder: + file.message( + "YAML dictionary keys should be in this order: " + + allowedKeys.join(", "), + node + ); + break; + } -var re_1 = createCommonjsModule(function (module, exports) { -const { MAX_SAFE_COMPONENT_LENGTH } = constants$3; + if (containsInvalidVersionNumber(meta.added)) { + file.message(`Invalid \`added\` value: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(meta.added)) { + file.message("Versions in `added` list are not in order", node); + } -exports = module.exports = {}; + if (containsInvalidVersionNumber(meta.deprecated)) { + file.message( + `Invalid \`deprecated\` value: ${invalidVersionMessage}`, + node + ); + } else if (areVersionsUnordered(meta.deprecated)) { + file.message("Versions in `deprecated` list are not in order", node); + } -// The actual regexps go on exports.re -const re = exports.re = []; -const src = exports.src = []; -const t = exports.t = {}; -let R = 0; + if (containsInvalidVersionNumber(meta.removed)) { + file.message(`Invalid \`removed\` value: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(meta.removed)) { + file.message("Versions in `removed` list are not in order", node); + } -const createToken = (name, value, isGlobal) => { - const index = R++; - debug_1(index, value); - t[name] = index; - src[index] = value; - re[index] = new RegExp(value, isGlobal ? 'g' : undefined); + if ("changes" in meta) { + validateChanges(file, node, meta.changes); + } +} + +function validateYAMLComments(tree, file) { + visit$7(tree, "html", function visitor(node) { + if (node.value.startsWith("".length)); + + validateMeta(node, file, meta); + } catch (e) { + file.message(e, node); + } + }); +} + +const remarkLintNodejsYamlComments = lintRule$5( + "remark-lint:nodejs-yaml-comments", + validateYAMLComments +); + +var escapeStringRegexp$2 = string => { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } + + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); }; -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. +var start$2 = factory$1('start'); +var end = factory$1('end'); -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. +var unistUtilPosition = position$1; -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); +position$1.start = start$2; +position$1.end = end; -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. +function position$1(node) { + return {start: start$2(node), end: end(node)} +} -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); +function factory$1(type) { + point.displayName = type; -// ## Main Version -// Three dot-separated numeric identifiers. + return point -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`); + function point(node) { + var point = (node && node.position && node.position[type]) || {}; -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`); + return { + line: point.line || null, + column: point.column || null, + offset: isNaN(point.offset) ? null : point.offset + } + } +} -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. +var convert_1 = convert$7; -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`); +function convert$7(test) { + if (test == null) { + return ok$6 + } -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`); + if (typeof test === 'string') { + return typeFactory$6(test) + } -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. + if (typeof test === 'object') { + return 'length' in test ? anyFactory$6(test) : allFactory(test) + } -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); + if (typeof test === 'function') { + return test + } -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); + throw new Error('Expected function, string, or object as test') +} -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. +// Utility assert each property in `test` is represented in `node`, and each +// values are strictly equal. +function allFactory(test) { + return all -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); + function all(node) { + var key; -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. + for (key in test) { + if (node[key] !== test[key]) return false + } -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); + return true + } +} -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. +function anyFactory$6(tests) { + var checks = []; + var index = -1; -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. + while (++index < tests.length) { + checks[index] = convert$7(tests[index]); + } -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`); + return any -createToken('FULL', `^${src[t.FULLPLAIN]}$`); + function any() { + var index = -1; -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`); + while (++index < checks.length) { + if (checks[index].apply(this, arguments)) { + return true + } + } -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); + return false + } +} -createToken('GTLT', '((?:<|>)?=?)'); +// Utility to convert a string into a function which checks a given node’s type +// for said string. +function typeFactory$6(test) { + return type -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); + function type(node) { + return Boolean(node && node.type === test) + } +} -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`); +// Utility to return true. +function ok$6() { + return true +} + +var color_1 = color$7; +function color$7(d) { + return '\u001B[33m' + d + '\u001B[39m' +} -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`); +var unistUtilVisitParents = visitParents$7; -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); +var convert$6 = convert_1; +var color$6 = color_1; -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`); -createToken('COERCERTL', src[t.COERCE], true); +var CONTINUE$7 = true; +var SKIP$7 = 'skip'; +var EXIT$7 = false; -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)'); +visitParents$7.CONTINUE = CONTINUE$7; +visitParents$7.SKIP = SKIP$7; +visitParents$7.EXIT = EXIT$7; -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); -exports.tildeTrimReplace = '$1~'; +function visitParents$7(tree, test, visitor, reverse) { + var step; + var is; -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)'); + is = convert$6(test); + step = reverse ? -1 : 1; -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); -exports.caretTrimReplace = '$1^'; + factory(tree, null, [])(); -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); + function factory(node, index, parents) { + var value = typeof node === 'object' && node !== null ? node : {}; + var name; -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); -exports.comparatorTrimReplace = '$1$2$3'; + visit.displayName = + 'node (' + color$6(value.type + (name ? '<' + name + '>' : '')) + ')'; + } -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`); + return visit -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`); + function visit() { + var grandparents = parents.concat(node); + var result = []; + var subresult; + var offset; -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*'); -// >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); -}); + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$6(visitor(node, parents)); -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl']; -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true; - return options - }, {}); -var parseOptions_1 = parseOptions; + if (result[0] === EXIT$7) { + return result + } + } -const numeric$1 = /^[0-9]+$/; -const compareIdentifiers = (a, b) => { - const anum = numeric$1.test(a); - const bnum = numeric$1.test(b); + if (node.children && result[0] !== SKIP$7) { + offset = (reverse ? node.children.length : -1) + step; - if (anum && bnum) { - a = +a; - b = +b; + while (offset > -1 && offset < node.children.length) { + subresult = factory(node.children[offset], offset, grandparents)(); + + if (subresult[0] === EXIT$7) { + return subresult + } + + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } + + return result + } } +} - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -}; +function toResult$6(value) { + if (value !== null && typeof value === 'object' && 'length' in value) { + return value + } -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a); + if (typeof value === 'number') { + return [CONTINUE$7, value] + } -var identifiers = { - compareIdentifiers, - rcompareIdentifiers -}; + return [value] +} -const { MAX_LENGTH: MAX_LENGTH$3, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1 } = constants$3; -const { re: re$2, t } = re_1; +var unistUtilVisit = visit$6; +var visitParents$6 = unistUtilVisitParents; -const { compareIdentifiers: compareIdentifiers$1 } = identifiers; -class SemVer { - constructor (version, options) { - options = parseOptions_1(options); +var CONTINUE$6 = visitParents$6.CONTINUE; +var SKIP$6 = visitParents$6.SKIP; +var EXIT$6 = visitParents$6.EXIT; - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version; - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) - } +visit$6.CONTINUE = CONTINUE$6; +visit$6.SKIP = SKIP$6; +visit$6.EXIT = EXIT$6; - if (version.length > MAX_LENGTH$3) { - throw new TypeError( - `version is longer than ${MAX_LENGTH$3} characters` - ) - } +function visit$6(tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } - debug_1('SemVer', version, options); - this.options = options; - this.loose = !!options.loose; - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease; + visitParents$6(tree, test, overload, reverse); - const m = version.trim().match(options.loose ? re$2[t.LOOSE] : re$2[t.FULL]); + function overload(node, parents) { + var parent = parents[parents.length - 1]; + var index = parent ? parent.children.indexOf(node) : null; + return visitor(node, index, parent) + } +} - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) - } +var vfileLocation$1 = factory; - this.raw = version; +function factory(file) { + var value = String(file); + var indices = []; + var search = /\r?\n|\r/g; - // these are actually numbers - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; + while (search.exec(value)) { + indices.push(search.lastIndex); + } - if (this.major > MAX_SAFE_INTEGER$1 || this.major < 0) { - throw new TypeError('Invalid major version') - } + indices.push(value.length + 1); - if (this.minor > MAX_SAFE_INTEGER$1 || this.minor < 0) { - throw new TypeError('Invalid minor version') - } + return { + toPoint: offsetToPoint, + toPosition: offsetToPoint, + toOffset: pointToOffset + } - if (this.patch > MAX_SAFE_INTEGER$1 || this.patch < 0) { - throw new TypeError('Invalid patch version') - } + // Get the line and column-based `point` for `offset` in the bound indices. + function offsetToPoint(offset) { + var index = -1; - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = []; - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id; - if (num >= 0 && num < MAX_SAFE_INTEGER$1) { - return num + if (offset > -1 && offset < indices[indices.length - 1]) { + while (++index < indices.length) { + if (indices[index] > offset) { + return { + line: index + 1, + column: offset - (indices[index - 1] || 0) + 1, + offset: offset } } - return id - }); + } } - this.build = m[5] ? m[5].split('.') : []; - this.format(); + return {} } - format () { - this.version = `${this.major}.${this.minor}.${this.patch}`; - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}`; + // Get the `offset` for a line and column-based `point` in the bound + // indices. + function pointToOffset(point) { + var line = point && point.line; + var column = point && point.column; + var offset; + + if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { + offset = (indices[line - 2] || 0) + column - 1 || 0; } - return this.version - } - toString () { - return this.version + return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 } +} - compare (other) { - debug_1('SemVer.compare', this.version, this.options, other); - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options); - } +const escapeStringRegexp$1 = escapeStringRegexp$2; +const position = unistUtilPosition; +const rule = unifiedLintRule; +const visit$5 = unistUtilVisit; +const vfileLocation = vfileLocation$1; - if (other.version === this.version) { - return 0 - } +const start$1 = position.start; - return this.compareMain(other) || this.comparePre(other) +var remarkLintProhibitedStrings = rule('remark-lint:prohibited-strings', prohibitedStrings); + +function testProhibited (val, content) { + let regexpFlags = 'g'; + let no = val.no; + + if (!no) { + no = escapeStringRegexp$1(val.yes); + regexpFlags += 'i'; } - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } + let regexpString = '(? having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } + if (ignoreNextTo) { + regexpString += `(?!${ignoreNextTo})`; + } - let i = 0; - do { - const a = this.prerelease[i]; - const b = other.prerelease[i]; - debug_1('prerelease compare', i, a, b); - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers$1(a, b) - } - } while (++i) + // If it ends with a letter, make sure it is a word break. + if (/\b$/.test(no)) { + regexpString += '\\b'; } + regexpString += '(?!\\.\\w)'; + const re = new RegExp(regexpString, regexpFlags); - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); + const results = []; + let result = re.exec(content); + while (result) { + if (result[1] !== val.yes) { + results.push({ result: result[1], index: result.index }); } + result = re.exec(content); + } - let i = 0; - do { - const a = this.build[i]; - const b = other.build[i]; - debug_1('prerelease compare', i, a, b); - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers$1(a, b) + return results +} + +function prohibitedStrings (ast, file, strings) { + const location = vfileLocation(file); + + visit$5(ast, 'text', checkText); + + function checkText (node) { + const content = node.value; + const initial = start$1(node).offset; + + strings.forEach((val) => { + const results = testProhibited(val, content); + if (results.length) { + results.forEach(({ result, index }) => { + const message = val.yes ? `Use "${val.yes}" instead of "${result}"` : `Do not use "${result}"`; + file.message(message, { + start: location.toPoint(initial + index), + end: location.toPoint(initial + index + [...result].length) + }); + }); } - } while (++i) + }); } +} - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc('pre', identifier); - break - case 'preminor': - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc('pre', identifier); - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0; - this.inc('patch', identifier); - this.inc('pre', identifier); - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier); - } - this.inc('pre', identifier); - break +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFile} VFile + * + * @typedef {0|1|2} Severity + * @typedef {'warn'|'on'|'off'|'error'} Label + * @typedef {[Severity, ...unknown[]]} SeverityTuple + * + * @callback Rule + * @param {Node} tree + * @param {VFile} file + * @param {unknown} options + * @returns {void} + */ - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++; - } - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++; - } - this.patch = 0; - this.prerelease = []; - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++; - } - this.prerelease = []; - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0]; - } else { - let i = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++; - i = -2; - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0); - } +const primitives$4 = new Set(['string', 'number', 'boolean']); + +/** + * @param {string} id + * @param {Rule} rule + */ +function lintRule$4(id, rule) { + const parts = id.split(':'); + // Possibly useful if externalised later. + /* c8 ignore next */ + const source = parts[1] ? parts[0] : undefined; + const ruleId = parts[1]; + + Object.defineProperty(plugin, 'name', {value: id}); + + return plugin + + /** @type {import('unified').Plugin<[unknown]|void[]>} */ + function plugin(raw) { + const [severity, options] = coerce$4(ruleId, raw); + + if (!severity) return + + const fatal = severity === 2; + + return (tree, file, next) => { + let index = file.messages.length - 1; + + wrap(rule, (error) => { + const messages = file.messages; + + // Add the error, if not already properly added. + // Only happens for incorrect plugins. + /* c8 ignore next 6 */ + // @ts-expect-error: errors could be `messages`. + if (error && !messages.includes(error)) { + try { + file.fail(error); + } catch {} } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0]; - } - } else { - this.prerelease = [identifier, 0]; - } + + while (++index < messages.length) { + Object.assign(messages[index], {ruleId, source, fatal}); } - break - default: - throw new Error(`invalid increment argument: ${release}`) + next(); + })(tree, file, options); + } + } +} + +/** + * Coerce a value to a severity--options tuple. + * + * @param {string} name + * @param {unknown} value + * @returns {SeverityTuple} + */ +function coerce$4(name, value) { + /** @type {unknown[]} */ + let result; + + if (typeof value === 'boolean') { + result = [value]; + } else if (value === null || value === undefined) { + result = [1]; + } else if ( + Array.isArray(value) && + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + primitives$4.has(typeof value[0]) + ) { + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + result = [...value]; + } else { + result = [1, value]; + } + + let level = result[0]; + + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; } - this.format(); - this.raw = this.version; - return this } -} -var semver = SemVer; + if (typeof level !== 'number' || level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } -const {MAX_LENGTH: MAX_LENGTH$4} = constants$3; -const { re: re$3, t: t$1 } = re_1; + result[0] = level; + // @ts-expect-error: it’s now a valid tuple. + return result +} +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * + * @typedef {string} Type + * @typedef {Object} Props + * + * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + */ -const parse$9 = (version, options) => { - options = parseOptions_1(options); +const convert$5 = + /** + * @type {( + * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & + * ((test?: Test) => AssertAnything) + * )} + */ + ( + /** + * Generate an assertion from a check. + * @param {Test} [test] + * When nullish, checks if `node` is a `Node`. + * When `string`, works like passing `function (node) {return node.type === test}`. + * When `function` checks if function passed the node is true. + * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. + * When `array`, checks any one of the subtests pass. + * @returns {AssertAnything} + */ + function (test) { + if (test === undefined || test === null) { + return ok$5 + } - if (version instanceof semver) { - return version - } + if (typeof test === 'string') { + return typeFactory$5(test) + } - if (typeof version !== 'string') { - return null - } + if (typeof test === 'object') { + return Array.isArray(test) ? anyFactory$5(test) : propsFactory$5(test) + } - if (version.length > MAX_LENGTH$4) { - return null - } + if (typeof test === 'function') { + return castFactory$5(test) + } - const r = options.loose ? re$3[t$1.LOOSE] : re$3[t$1.FULL]; - if (!r.test(version)) { - return null - } + throw new Error('Expected function, string, or object as test') + } + ); +/** + * @param {Array.} tests + * @returns {AssertAnything} + */ +function anyFactory$5(tests) { + /** @type {Array.} */ + const checks = []; + let index = -1; - try { - return new semver(version, options) - } catch (er) { - return null + while (++index < tests.length) { + checks[index] = convert$5(tests[index]); } -}; -var parse_1$4 = parse$9; + return castFactory$5(any) -const compare$2 = (a, b, loose) => - new semver(a, loose).compare(new semver(b, loose)); + /** + * @this {unknown} + * @param {unknown[]} parameters + * @returns {boolean} + */ + function any(...parameters) { + let index = -1; -var compare_1 = compare$2; + while (++index < checks.length) { + if (checks[index].call(this, ...parameters)) return true + } -const lt$1 = (a, b, loose) => compare_1(a, b, loose) < 0; -var lt_1 = lt$1; + return false + } +} -const allowedKeys = [ - "added", - "napiVersion", - "deprecated", - "removed", - "changes", -]; -const changesExpectedKeys = ["version", "pr-url", "description"]; -const VERSION_PLACEHOLDER = "REPLACEME"; -const MAX_SAFE_SEMVER_VERSION = parse_1$4( - Array.from({ length: 3 }, () => Number.MAX_SAFE_INTEGER).join(".") -); -const validVersionNumberRegex = /^v\d+\.\d+\.\d+$/; -const prUrlRegex = new RegExp("^https://github.com/nodejs/node/pull/\\d+$"); -const privatePRUrl = "https://github.com/nodejs-private/node-private/pull/"; +/** + * Utility to assert each property in `test` is represented in `node`, and each + * values are strictly equal. + * + * @param {Props} check + * @returns {AssertAnything} + */ +function propsFactory$5(check) { + return castFactory$5(all) -let releasedVersions; -let invalidVersionMessage = "version(s) must respect the pattern `vx.x.x` or"; -if (process.env.NODE_RELEASED_VERSIONS) { - console.log("Using release list from env..."); - releasedVersions = process.env.NODE_RELEASED_VERSIONS.split(",").map( - (v) => `v${v}` - ); - invalidVersionMessage = `version not listed in the changelogs, `; -} -invalidVersionMessage += `use the placeholder \`${VERSION_PLACEHOLDER}\``; + /** + * @param {Node} node + * @returns {boolean} + */ + function all(node) { + /** @type {string} */ + let key; -const kContainsIllegalKey = Symbol("illegal key"); -const kWrongKeyOrder = Symbol("Wrong key order"); -function unorderedKeys(meta) { - const keys = Object.keys(meta); - let previousKeyIndex = -1; - for (const key of keys) { - const keyIndex = allowedKeys.indexOf(key); - if (keyIndex <= previousKeyIndex) { - return keyIndex === -1 ? kContainsIllegalKey : kWrongKeyOrder; + for (key in check) { + // @ts-expect-error: hush, it sure works as an index. + if (node[key] !== check[key]) return false } - previousKeyIndex = keyIndex; - } -} -function containsInvalidVersionNumber(version) { - if (Array.isArray(version)) { - return version.some(containsInvalidVersionNumber); + return true } +} - if (version === undefined || version === VERSION_PLACEHOLDER) return false; - - if ( - releasedVersions && - // Always ignore 0.0.x and 0.1.x release numbers: - (version[1] !== "0" || (version[3] !== "0" && version[3] !== "1")) - ) - return !releasedVersions.includes(version); +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * + * @param {Type} check + * @returns {AssertAnything} + */ +function typeFactory$5(check) { + return castFactory$5(type) - return !validVersionNumberRegex.test(version); + /** + * @param {Node} node + */ + function type(node) { + return node && node.type === check + } } -const getValidSemver = (version) => - version === VERSION_PLACEHOLDER ? MAX_SAFE_SEMVER_VERSION : version; -function areVersionsUnordered(versions) { - if (!Array.isArray(versions)) return false; - for (let index = 1; index < versions.length; index++) { - if ( - lt_1( - getValidSemver(versions[index - 1]), - getValidSemver(versions[index]) - ) - ) { - return true; - } +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * @param {TestFunctionAnything} check + * @returns {AssertAnything} + */ +function castFactory$5(check) { + return assertion + + /** + * @this {unknown} + * @param {Array.} parameters + * @returns {boolean} + */ + function assertion(...parameters) { + // @ts-expect-error: spreading is fine. + return Boolean(check.call(this, ...parameters)) } } -function invalidChangesKeys(change) { - const keys = Object.keys(change); - const { length } = keys; - if (length !== changesExpectedKeys.length) return true; - for (let index = 0; index < length; index++) { - if (keys[index] !== changesExpectedKeys[index]) return true; - } +// Utility to return true. +function ok$5() { + return true } -function validateSecurityChange(file, node, change, index) { - if ("commit" in change) { - if (typeof change.commit !== "string" || isNaN(`0x${change.commit}`)) { - file.message( - `changes[${index}]: Ill-formed security change commit ID`, - node - ); - } - if (Object.keys(change)[1] === "commit") { - change = { ...change }; - delete change.commit; - } - } - if (invalidChangesKeys(change)) { - const securityChangeExpectedKeys = [...changesExpectedKeys]; - securityChangeExpectedKeys[0] += "[, commit]"; - file.message( - `changes[${index}]: Invalid keys. Expected keys are: ` + - securityChangeExpectedKeys.join(", "), - node - ); - } +/** + * @param {string} d + * @returns {string} + */ +function color$5(d) { + return '\u001B[33m' + d + '\u001B[39m' } -function validateChanges(file, node, changes) { - if (!Array.isArray(changes)) - return file.message("`changes` must be a YAML list", node); - const changesVersions = []; - for (let index = 0; index < changes.length; index++) { - const change = changes[index]; +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ - const isAncient = - typeof change.version === "string" && change.version.startsWith("v0."); - const isSecurityChange = - !isAncient && - typeof change["pr-url"] === "string" && - change["pr-url"].startsWith(privatePRUrl); +/** + * Continue traversing as normal + */ +const CONTINUE$5 = true; +/** + * Do not traverse this node’s children + */ +const SKIP$5 = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT$5 = false; - if (isSecurityChange) { - validateSecurityChange(file, node, change, index); - } else if (!isAncient && invalidChangesKeys(change)) { - file.message( - `changes[${index}]: Invalid keys. Expected keys are: ` + - changesExpectedKeys.join(", "), - node - ); - } +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test node, optional + * @param visitor Function to run for each node + * @param reverse Visit the tree in reverse order, defaults to false + */ +const visitParents$5 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-expect-error no visitor given, so `visitor` is test. + visitor = test; + test = null; + } - if (containsInvalidVersionNumber(change.version)) { - file.message(`changes[${index}]: ${invalidVersionMessage}`, node); - } else if (areVersionsUnordered(change.version)) { - file.message(`changes[${index}]: list of versions is not in order`, node); - } + const is = convert$5(test); + const step = reverse ? -1 : 1; - if (!isAncient && !isSecurityChange && !prUrlRegex.test(change["pr-url"])) { - file.message( - `changes[${index}]: PR-URL does not match the expected pattern`, - node - ); - } + factory(tree, null, [])(); - if (typeof change.description !== "string" || !change.description.length) { - file.message( - `changes[${index}]: must contain a non-empty description`, - node - ); - } else if (!change.description.endsWith(".")) { - file.message( - `changes[${index}]: description must end with a period`, - node - ); - } + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + // @ts-expect-error: hush + const value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string|undefined} */ + let name; - changesVersions.push( - Array.isArray(change.version) ? change.version[0] : change.version - ); - } + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; - if (areVersionsUnordered(changesVersions)) { - file.message("Items in `changes` list are not in order", node); - } -} + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color$5(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } -function validateMeta(node, file, meta) { - switch (unorderedKeys(meta)) { - case kContainsIllegalKey: - file.message( - "YAML dictionary contains illegal keys. Accepted values are: " + - allowedKeys.join(", "), - node - ); - break; + return visit - case kWrongKeyOrder: - file.message( - "YAML dictionary keys should be in this order: " + - allowedKeys.join(", "), - node - ); - break; - } + function visit() { + /** @type {ActionTuple} */ + let result = []; + /** @type {ActionTuple} */ + let subresult; + /** @type {number} */ + let offset; + /** @type {Array.} */ + let grandparents; - if (containsInvalidVersionNumber(meta.added)) { - file.message(`Invalid \`added\` value: ${invalidVersionMessage}`, node); - } else if (areVersionsUnordered(meta.added)) { - file.message("Versions in `added` list are not in order", node); - } + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$5(visitor(node, parents)); - if (containsInvalidVersionNumber(meta.deprecated)) { - file.message( - `Invalid \`deprecated\` value: ${invalidVersionMessage}`, - node - ); - } else if (areVersionsUnordered(meta.deprecated)) { - file.message("Versions in `deprecated` list are not in order", node); - } + if (result[0] === EXIT$5) { + return result + } + } - if (containsInvalidVersionNumber(meta.removed)) { - file.message(`Invalid \`removed\` value: ${invalidVersionMessage}`, node); - } else if (areVersionsUnordered(meta.removed)) { - file.message("Versions in `removed` list are not in order", node); - } + // @ts-expect-error looks like a parent. + if (node.children && result[0] !== SKIP$5) { + // @ts-expect-error looks like a parent. + offset = (reverse ? node.children.length : -1) + step; + // @ts-expect-error looks like a parent. + grandparents = parents.concat(node); - if ("changes" in meta) { - validateChanges(file, node, meta.changes); - } -} + // @ts-expect-error looks like a parent. + while (offset > -1 && offset < node.children.length) { + // @ts-expect-error looks like a parent. + subresult = factory(node.children[offset], offset, grandparents)(); -function validateYAMLComments(tree, file) { - visit$v(tree, "html", function visitor(node) { - if (node.value.startsWith("".length)); + if (subresult[0] === EXIT$5) { + return subresult + } - validateMeta(node, file, meta); - } catch (e) { - file.message(e, node); + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } + + return result + } + } } - }); -} + ); -const remarkLintNodejsYamlComments = lintRule$A( - "remark-lint:nodejs-yaml-comments", - validateYAMLComments -); +/** + * @param {VisitorResult} value + * @returns {ActionTuple} + */ +function toResult$5(value) { + if (Array.isArray(value)) { + return value + } -var escapeStringRegexp$1 = string => { - if (typeof string !== 'string') { - throw new TypeError('Expected a string'); - } + if (typeof value === 'number') { + return [CONTINUE$5, value] + } - // Escape characters with special meaning either inside or outside character sets. - // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. - return string - .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') - .replace(/-/g, '\\x2d'); -}; + return [value] +} -var start$1 = factory$3('start'); -var end = factory$3('end'); +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + */ -var unistUtilPosition = position$3; +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test, optional + * @param visitor Function to run for each node + * @param reverse Fisit the tree in reverse, defaults to false + */ +const visit$4 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } -position$3.start = start$1; -position$3.end = end; + visitParents$5(tree, test, overload, reverse); -function position$3(node) { - return {start: start$1(node), end: end(node)} -} + /** + * @param {Node} node + * @param {Array.} parents + */ + function overload(node, parents) { + const parent = parents[parents.length - 1]; + return visitor( + node, + parent ? parent.children.indexOf(node) : null, + parent + ) + } + } + ); -function factory$3(type) { - point.displayName = type; +/** + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point + * + * @typedef {Partial} PointLike + * + * @typedef {Object} PositionLike + * @property {PointLike} [start] + * @property {PointLike} [end] + * + * @typedef {Object} NodeLike + * @property {PositionLike} [position] + */ +var pointStart$4 = point$4('start'); +var pointEnd$2 = point$4('end'); + +/** + * Get the positional info of `node`. + * + * @param {'start'|'end'} type + */ +function point$4(type) { return point + /** + * Get the positional info of `node`. + * + * @param {NodeLike} [node] + * @returns {Point} + */ function point(node) { + /** @type {Point} */ + // @ts-ignore looks like a point var point = (node && node.position && node.position[type]) || {}; return { line: point.line || null, column: point.column || null, - offset: isNaN(point.offset) ? null : point.offset + offset: point.offset > -1 ? point.offset : null } } } -var convert_1 = convert$z; - -function convert$z(test) { - if (test == null) { - return ok$x - } - - if (typeof test === 'string') { - return typeFactory$w(test) - } - - if (typeof test === 'object') { - return 'length' in test ? anyFactory$w(test) : allFactory(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function allFactory(test) { - return all +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module rule-style + * @fileoverview + * Warn when the thematic breaks (horizontal rules) violate a given or + * detected style. + * + * Options: `string`, either a corect thematic breaks such as `***`, or + * `'consistent'`, default: `'consistent'`. + * + * `'consistent'` detects the first used thematic break style and warns when + * subsequent rules use different styles. + * + * ## Fix + * + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * has three settings that define how rules are created: + * + * * [`rule`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrule) + * (default: `*`) — Marker to use + * * [`ruleRepetition`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulerepetition) + * (default: `3`) — Number of markers to use + * * [`ruleSpaces`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulespaces) + * (default: `true`) — Whether to pad markers with spaces + * + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. + * + * @example + * {"name": "ok.md", "setting": "* * *"} + * + * * * * + * + * * * * + * + * @example + * {"name": "ok.md", "setting": "_______"} + * + * _______ + * + * _______ + * + * @example + * {"name": "not-ok.md", "label": "input"} + * + * *** + * + * * * * + * + * @example + * {"name": "not-ok.md", "label": "output"} + * + * 3:1-3:6: Rules should use `***` + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} + * + * 1:1: Incorrect preferred rule style: provide a correct markdown rule or `'consistent'` + */ - function all(node) { - var key; +const remarkLintRuleStyle = lintRule$4( + 'remark-lint:rule-style', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file, option = 'consistent') => { + const value = String(file); - for (key in test) { - if (node[key] !== test[key]) return false + if (option !== 'consistent' && /[^-_* ]/.test(option)) { + file.fail( + "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" + ); } - return true - } -} - -function anyFactory$w(tests) { - var checks = []; - var index = -1; - - while (++index < tests.length) { - checks[index] = convert$z(tests[index]); - } - - return any + visit$4(tree, 'thematicBreak', (node) => { + const initial = pointStart$4(node).offset; + const final = pointEnd$2(node).offset; - function any() { - var index = -1; + if (typeof initial === 'number' && typeof final === 'number') { + const rule = value.slice(initial, final); - while (++index < checks.length) { - if (checks[index].apply(this, arguments)) { - return true + if (option === 'consistent') { + option = rule; + } else if (rule !== option) { + file.message('Rules should use `' + option + '`', node); + } } - } - - return false + }); } -} +); -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$w(test) { - return type +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFile} VFile + * + * @typedef {0|1|2} Severity + * @typedef {'warn'|'on'|'off'|'error'} Label + * @typedef {[Severity, ...unknown[]]} SeverityTuple + * + * @callback Rule + * @param {Node} tree + * @param {VFile} file + * @param {unknown} options + * @returns {void} + */ - function type(node) { - return Boolean(node && node.type === test) - } -} +const primitives$3 = new Set(['string', 'number', 'boolean']); -// Utility to return true. -function ok$x() { - return true -} +/** + * @param {string} id + * @param {Rule} rule + */ +function lintRule$3(id, rule) { + const parts = id.split(':'); + // Possibly useful if externalised later. + /* c8 ignore next */ + const source = parts[1] ? parts[0] : undefined; + const ruleId = parts[1]; -var color_1 = color$x; -function color$x(d) { - return '\u001B[33m' + d + '\u001B[39m' -} + Object.defineProperty(plugin, 'name', {value: id}); + + return plugin -var unistUtilVisitParents = visitParents$w; + /** @type {import('unified').Plugin<[unknown]|void[]>} */ + function plugin(raw) { + const [severity, options] = coerce$3(ruleId, raw); + if (!severity) return + const fatal = severity === 2; + return (tree, file, next) => { + let index = file.messages.length - 1; -var CONTINUE$w = true; -var SKIP$w = 'skip'; -var EXIT$w = false; + wrap(rule, (error) => { + const messages = file.messages; -visitParents$w.CONTINUE = CONTINUE$w; -visitParents$w.SKIP = SKIP$w; -visitParents$w.EXIT = EXIT$w; + // Add the error, if not already properly added. + // Only happens for incorrect plugins. + /* c8 ignore next 6 */ + // @ts-expect-error: errors could be `messages`. + if (error && !messages.includes(error)) { + try { + file.fail(error); + } catch {} + } -function visitParents$w(tree, test, visitor, reverse) { - var step; - var is; + while (++index < messages.length) { + Object.assign(messages[index], {ruleId, source, fatal}); + } - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + next(); + })(tree, file, options); + } } +} - is = convert_1(test); - step = reverse ? -1 : 1; - - factory(tree, null, [])(); +/** + * Coerce a value to a severity--options tuple. + * + * @param {string} name + * @param {unknown} value + * @returns {SeverityTuple} + */ +function coerce$3(name, value) { + /** @type {unknown[]} */ + let result; - function factory(node, index, parents) { - var value = typeof node === 'object' && node !== null ? node : {}; - var name; + if (typeof value === 'boolean') { + result = [value]; + } else if (value === null || value === undefined) { + result = [1]; + } else if ( + Array.isArray(value) && + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + primitives$3.has(typeof value[0]) + ) { + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + result = [...value]; + } else { + result = [1, value]; + } - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + let level = result[0]; - visit.displayName = - 'node (' + color_1(value.type + (name ? '<' + name + '>' : '')) + ')'; + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; } + } - return visit + if (typeof level !== 'number' || level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } - function visit() { - var grandparents = parents.concat(node); - var result = []; - var subresult; - var offset; + result[0] = level; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$w(visitor(node, parents)); + // @ts-expect-error: it’s now a valid tuple. + return result +} - if (result[0] === EXIT$w) { - return result - } - } +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * + * @typedef {string} Type + * @typedef {Object} Props + * + * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + */ - if (node.children && result[0] !== SKIP$w) { - offset = (reverse ? node.children.length : -1) + step; +const convert$4 = + /** + * @type {( + * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & + * ((test?: Test) => AssertAnything) + * )} + */ + ( + /** + * Generate an assertion from a check. + * @param {Test} [test] + * When nullish, checks if `node` is a `Node`. + * When `string`, works like passing `function (node) {return node.type === test}`. + * When `function` checks if function passed the node is true. + * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. + * When `array`, checks any one of the subtests pass. + * @returns {AssertAnything} + */ + function (test) { + if (test === undefined || test === null) { + return ok$4 + } - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); + if (typeof test === 'string') { + return typeFactory$4(test) + } - if (subresult[0] === EXIT$w) { - return subresult - } + if (typeof test === 'object') { + return Array.isArray(test) ? anyFactory$4(test) : propsFactory$4(test) + } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + if (typeof test === 'function') { + return castFactory$4(test) } - return result + throw new Error('Expected function, string, or object as test') } - } -} + ); +/** + * @param {Array.} tests + * @returns {AssertAnything} + */ +function anyFactory$4(tests) { + /** @type {Array.} */ + const checks = []; + let index = -1; -function toResult$w(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value + while (++index < tests.length) { + checks[index] = convert$4(tests[index]); } - if (typeof value === 'number') { - return [CONTINUE$w, value] - } + return castFactory$4(any) - return [value] -} + /** + * @this {unknown} + * @param {unknown[]} parameters + * @returns {boolean} + */ + function any(...parameters) { + let index = -1; -var unistUtilVisit = visit$w; + while (++index < checks.length) { + if (checks[index].call(this, ...parameters)) return true + } + return false + } +} +/** + * Utility to assert each property in `test` is represented in `node`, and each + * values are strictly equal. + * + * @param {Props} check + * @returns {AssertAnything} + */ +function propsFactory$4(check) { + return castFactory$4(all) -var CONTINUE$x = unistUtilVisitParents.CONTINUE; -var SKIP$x = unistUtilVisitParents.SKIP; -var EXIT$x = unistUtilVisitParents.EXIT; + /** + * @param {Node} node + * @returns {boolean} + */ + function all(node) { + /** @type {string} */ + let key; -visit$w.CONTINUE = CONTINUE$x; -visit$w.SKIP = SKIP$x; -visit$w.EXIT = EXIT$x; + for (key in check) { + // @ts-expect-error: hush, it sure works as an index. + if (node[key] !== check[key]) return false + } -function visit$w(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + return true } +} - unistUtilVisitParents(tree, test, overload, reverse); +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * + * @param {Type} check + * @returns {AssertAnything} + */ +function typeFactory$4(check) { + return castFactory$4(type) - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + /** + * @param {Node} node + */ + function type(node) { + return node && node.type === check } } -var vfileLocation = factory$4; - -function factory$4(file) { - var value = String(file); - var indices = []; - var search = /\r?\n|\r/g; +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * @param {TestFunctionAnything} check + * @returns {AssertAnything} + */ +function castFactory$4(check) { + return assertion - while (search.exec(value)) { - indices.push(search.lastIndex); + /** + * @this {unknown} + * @param {Array.} parameters + * @returns {boolean} + */ + function assertion(...parameters) { + // @ts-expect-error: spreading is fine. + return Boolean(check.call(this, ...parameters)) } +} - indices.push(value.length + 1); +// Utility to return true. +function ok$4() { + return true +} - return { - toPoint: offsetToPoint, - toPosition: offsetToPoint, - toOffset: pointToOffset - } +/** + * @param {string} d + * @returns {string} + */ +function color$4(d) { + return '\u001B[33m' + d + '\u001B[39m' +} - // Get the line and column-based `point` for `offset` in the bound indices. - function offsetToPoint(offset) { - var index = -1; +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ - if (offset > -1 && offset < indices[indices.length - 1]) { - while (++index < indices.length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } +/** + * Continue traversing as normal + */ +const CONTINUE$4 = true; +/** + * Do not traverse this node’s children + */ +const SKIP$4 = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT$4 = false; + +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test node, optional + * @param visitor Function to run for each node + * @param reverse Visit the tree in reverse order, defaults to false + */ +const visitParents$4 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-expect-error no visitor given, so `visitor` is test. + visitor = test; + test = null; } - } - return {} - } + const is = convert$4(test); + const step = reverse ? -1 : 1; - // Get the `offset` for a line and column-based `point` in the bound - // indices. - function pointToOffset(point) { - var line = point && point.line; - var column = point && point.column; - var offset; + factory(tree, null, [])(); - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - offset = (indices[line - 2] || 0) + column - 1 || 0; - } + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + // @ts-expect-error: hush + const value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string|undefined} */ + let name; - return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 - } -} + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; -const start$2 = unistUtilPosition.start; + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color$4(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } -var remarkLintProhibitedStrings = unifiedLintRule('remark-lint:prohibited-strings', prohibitedStrings); + return visit -function testProhibited (val, content) { - let regexpFlags = 'g'; - let no = val.no; + function visit() { + /** @type {ActionTuple} */ + let result = []; + /** @type {ActionTuple} */ + let subresult; + /** @type {number} */ + let offset; + /** @type {Array.} */ + let grandparents; - if (!no) { - no = escapeStringRegexp$1(val.yes); - regexpFlags += 'i'; - } + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$4(visitor(node, parents)); - let regexpString = '(? -1 && offset < node.children.length) { + // @ts-expect-error looks like a parent. + subresult = factory(node.children[offset], offset, grandparents)(); - regexpString += `(${no})`; + if (subresult[0] === EXIT$4) { + return subresult + } - if (ignoreNextTo) { - regexpString += `(?!${ignoreNextTo})`; - } + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } - // If it ends with a letter, make sure it is a word break. - if (/\b$/.test(no)) { - regexpString += '\\b'; + return result + } + } + } + ); + +/** + * @param {VisitorResult} value + * @returns {ActionTuple} + */ +function toResult$4(value) { + if (Array.isArray(value)) { + return value } - regexpString += '(?!\\.\\w)'; - const re = new RegExp(regexpString, regexpFlags); - const results = []; - let result = re.exec(content); - while (result) { - if (result[1] !== val.yes) { - results.push({ result: result[1], index: result.index }); - } - result = re.exec(content); + if (typeof value === 'number') { + return [CONTINUE$4, value] } - return results + return [value] } -function prohibitedStrings (ast, file, strings) { - const location = vfileLocation(file); +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + */ - unistUtilVisit(ast, 'text', checkText); +/** + * Visit children of tree which pass a test + * + * @param tree Abstract syntax tree to walk + * @param test Test, optional + * @param visitor Function to run for each node + * @param reverse Fisit the tree in reverse, defaults to false + */ +const visit$3 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } - function checkText (node) { - const content = node.value; - const initial = start$2(node).offset; + visitParents$4(tree, test, overload, reverse); - strings.forEach((val) => { - const results = testProhibited(val, content); - if (results.length) { - results.forEach(({ result, index }) => { - const message = val.yes ? `Use "${val.yes}" instead of "${result}"` : `Do not use "${result}"`; - file.message(message, { - start: location.toPoint(initial + index), - end: location.toPoint(initial + index + [...result].length) - }); - }); + /** + * @param {Node} node + * @param {Array.} parents + */ + function overload(node, parents) { + const parent = parents[parents.length - 1]; + return visitor( + node, + parent ? parent.children.indexOf(node) : null, + parent + ) } - }); - } -} + } + ); /** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline + * @typedef {Partial} PointLike + * + * @typedef {Object} PositionLike + * @property {PointLike} [start] + * @property {PointLike} [end] + * + * @typedef {Object} NodeLike + * @property {PositionLike} [position] */ +var pointStart$3 = point$3('start'); + /** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. + * Get the positional info of `node`. * - * @param {Middleware} middleware - * @param {Callback} callback + * @param {'start'|'end'} type */ -function wrap$C(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped +function point$3(type) { + return point /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} + * Get the positional info of `node`. + * + * @param {NodeLike} [node] + * @returns {Point} */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; + function point(node) { + /** @type {Point} */ + // @ts-ignore looks like a point + var point = (node && node.position && node.position[type]) || {}; - if (fnExpectsCallback) { - parameters.push(done); + return { + line: point.line || null, + column: point.column || null, + offset: point.offset > -1 ? point.offset : null } + } +} - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module strong-marker + * @fileoverview + * Warn for violating importance (strong) markers. + * + * Options: `'consistent'`, `'*'`, or `'_'`, default: `'consistent'`. + * + * `'consistent'` detects the first used importance style and warns when + * subsequent importance sequences use different styles. + * + * ## Fix + * + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * formats importance using an `*` (asterisk) by default. + * Pass + * [`strong: '_'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsstrong) + * to use `_` (underscore) instead. + * + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. + * + * @example + * {"name": "ok.md"} + * + * **foo** and **bar**. + * + * @example + * {"name": "also-ok.md"} + * + * __foo__ and __bar__. + * + * @example + * {"name": "ok.md", "setting": "*"} + * + * **foo**. + * + * @example + * {"name": "ok.md", "setting": "_"} + * + * __foo__. + * + * @example + * {"name": "not-ok.md", "label": "input"} + * + * **foo** and __bar__. + * + * @example + * {"name": "not-ok.md", "label": "output"} + * + * 1:13-1:20: Strong should use `*` as a marker + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} + * + * 1:1: Incorrect strong marker `💩`: use either `'consistent'`, `'*'`, or `'_'` + */ - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } +const remarkLintStrongMarker = lintRule$3( + 'remark-lint:strong-marker', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file, option = 'consistent') => { + const value = String(file); - return done(exception) + if (option !== '*' && option !== '_' && option !== 'consistent') { + file.fail( + 'Incorrect strong marker `' + + option + + "`: use either `'consistent'`, `'*'`, or `'_'`" + ); } - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } + visit$3(tree, 'strong', (node) => { + const start = pointStart$3(node).offset; - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } + if (typeof start === 'number') { + const marker = /** @type {Marker} */ (value.charAt(start)); - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); + if (option === 'consistent') { + option = marker; + } else if (marker !== option) { + file.message('Strong should use `' + option + '` as a marker', node); + } + } + }); } -} +); /** * @typedef {import('unist').Node} Node @@ -70962,13 +79040,13 @@ function wrap$C(middleware, callback) { * @returns {void} */ -const primitives$B = new Set(['string', 'number', 'boolean']); +const primitives$2 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$B(id, rule) { +function lintRule$2(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -70981,7 +79059,7 @@ function lintRule$B(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$C(ruleId, raw); + const [severity, options] = coerce$2(ruleId, raw); if (!severity) return @@ -70990,7 +79068,7 @@ function lintRule$B(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$C(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -71020,7 +79098,7 @@ function lintRule$B(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$C(name, value) { +function coerce$2(name, value) { /** @type {unknown[]} */ let result; @@ -71032,7 +79110,7 @@ function coerce$C(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$B.has(typeof value[0]) + primitives$2.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -71085,7 +79163,7 @@ function coerce$C(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$A = +const convert$3 = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -71105,19 +79183,19 @@ const convert$A = */ function (test) { if (test === undefined || test === null) { - return ok$y + return ok$3 } if (typeof test === 'string') { - return typeFactory$x(test) + return typeFactory$3(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$x(test) : propsFactory$w(test) + return Array.isArray(test) ? anyFactory$3(test) : propsFactory$3(test) } if (typeof test === 'function') { - return castFactory$w(test) + return castFactory$3(test) } throw new Error('Expected function, string, or object as test') @@ -71127,16 +79205,16 @@ const convert$A = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$x(tests) { +function anyFactory$3(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$A(tests[index]); + checks[index] = convert$3(tests[index]); } - return castFactory$w(any) + return castFactory$3(any) /** * @this {unknown} @@ -71161,8 +79239,8 @@ function anyFactory$x(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$w(check) { - return castFactory$w(all) +function propsFactory$3(check) { + return castFactory$3(all) /** * @param {Node} node @@ -71188,8 +79266,8 @@ function propsFactory$w(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$x(check) { - return castFactory$w(type) +function typeFactory$3(check) { + return castFactory$3(type) /** * @param {Node} node @@ -71205,7 +79283,7 @@ function typeFactory$x(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$w(check) { +function castFactory$3(check) { return assertion /** @@ -71220,7 +79298,7 @@ function castFactory$w(check) { } // Utility to return true. -function ok$y() { +function ok$3() { return true } @@ -71228,7 +79306,7 @@ function ok$y() { * @param {string} d * @returns {string} */ -function color$y(d) { +function color$3(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -71241,15 +79319,15 @@ function color$y(d) { /** * Continue traversing as normal */ -const CONTINUE$y = true; +const CONTINUE$3 = true; /** * Do not traverse this node’s children */ -const SKIP$y = 'skip'; +const SKIP$3 = 'skip'; /** * Stop traversing immediately */ -const EXIT$y = false; +const EXIT$3 = false; /** * Visit children of tree which pass a test @@ -71259,7 +79337,7 @@ const EXIT$y = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$x = +const visitParents$3 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -71281,7 +79359,7 @@ const visitParents$x = test = null; } - const is = convert$A(test); + const is = convert$3(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -71309,7 +79387,7 @@ const visitParents$x = Object.defineProperty(visit, 'name', { value: 'node (' + - color$y(value.type + (name ? '<' + name + '>' : '')) + + color$3(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -71327,15 +79405,15 @@ const visitParents$x = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$x(visitor(node, parents)); + result = toResult$3(visitor(node, parents)); - if (result[0] === EXIT$y) { + if (result[0] === EXIT$3) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$y) { + if (node.children && result[0] !== SKIP$3) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -71346,7 +79424,7 @@ const visitParents$x = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$y) { + if (subresult[0] === EXIT$3) { return subresult } @@ -71365,13 +79443,13 @@ const visitParents$x = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$x(value) { +function toResult$3(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$y, value] + return [CONTINUE$3, value] } return [value] @@ -71392,7 +79470,7 @@ function toResult$x(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$x = +const visit$2 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -71413,7 +79491,7 @@ const visit$x = test = null; } - visitParents$x(tree, test, overload, reverse); + visitParents$3(tree, test, overload, reverse); /** * @param {Node} node @@ -71444,15 +79522,15 @@ const visit$x = * @property {PositionLike} [position] */ -var pointStart$m = point$p('start'); -var pointEnd$c = point$p('end'); +var pointStart$2 = point$2('start'); +var pointEnd$1 = point$2('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$p(type) { +function point$2(type) { return point /** @@ -71478,177 +79556,335 @@ function point$p(type) { * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT - * @module rule-style + * @module table-cell-padding * @fileoverview - * Warn when the thematic breaks (horizontal rules) violate a given or - * detected style. + * Warn when table cells are incorrectly padded. * - * Options: `string`, either a corect thematic breaks such as `***`, or - * `'consistent'`, default: `'consistent'`. + * Options: `'consistent'`, `'padded'`, or `'compact'`, default: `'consistent'`. * - * `'consistent'` detects the first used thematic break style and warns when - * subsequent rules use different styles. + * `'consistent'` detects the first used cell padding style and warns when + * subsequent cells use different styles. * * ## Fix * * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * has three settings that define how rules are created: - * - * * [`rule`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrule) - * (default: `*`) — Marker to use - * * [`ruleRepetition`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulerepetition) - * (default: `3`) — Number of markers to use - * * [`ruleSpaces`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulespaces) - * (default: `true`) — Whether to pad markers with spaces + * formats tables with padding by default. + * Pass + * [`spacedTable: false`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsspacedtable) + * to not use padding. * * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) * on how to automatically fix warnings for this rule. * * @example - * {"name": "ok.md", "setting": "* * *"} + * {"name": "ok.md", "setting": "padded", "gfm": true} * - * * * * + * | A | B | + * | ----- | ----- | + * | Alpha | Bravo | * - * * * * + * @example + * {"name": "not-ok.md", "label": "input", "setting": "padded", "gfm": true} + * + * | A | B | + * | :----|----: | + * | Alpha|Bravo | + * + * | C | D | + * | :----- | ---: | + * |Charlie | Delta| + * + * Too much padding isn’t good either: + * + * | E | F | G | H | + * | :---- | -------- | :----: | -----: | + * | Echo | Foxtrot | Golf | Hotel | * * @example - * {"name": "ok.md", "setting": "_______"} + * {"name": "not-ok.md", "label": "output", "setting": "padded", "gfm": true} * - * _______ + * 3:8: Cell should be padded + * 3:9: Cell should be padded + * 7:2: Cell should be padded + * 7:17: Cell should be padded + * 13:9: Cell should be padded with 1 space, not 2 + * 13:20: Cell should be padded with 1 space, not 2 + * 13:21: Cell should be padded with 1 space, not 2 + * 13:29: Cell should be padded with 1 space, not 2 + * 13:30: Cell should be padded with 1 space, not 2 * - * _______ + * @example + * {"name": "ok.md", "setting": "compact", "gfm": true} + * + * |A |B | + * |-----|-----| + * |Alpha|Bravo| * * @example - * {"name": "not-ok.md", "label": "input"} + * {"name": "not-ok.md", "label": "input", "setting": "compact", "gfm": true} * - * *** + * | A | B | + * | -----| -----| + * | Alpha| Bravo| * - * * * * + * |C | D| + * |:------|-----:| + * |Charlie|Delta | * * @example - * {"name": "not-ok.md", "label": "output"} + * {"name": "not-ok.md", "label": "output", "setting": "compact", "gfm": true} * - * 3:1-3:6: Rules should use `***` + * 3:2: Cell should be compact + * 3:11: Cell should be compact + * 7:16: Cell should be compact * * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} + * {"name": "ok-padded.md", "setting": "consistent", "gfm": true} * - * 1:1: Incorrect preferred rule style: provide a correct markdown rule or `'consistent'` + * | A | B | + * | ----- | ----- | + * | Alpha | Bravo | + * + * | C | D | + * | ------- | ----- | + * | Charlie | Delta | + * + * @example + * {"name": "not-ok-padded.md", "label": "input", "setting": "consistent", "gfm": true} + * + * | A | B | + * | ----- | ----- | + * | Alpha | Bravo | + * + * | C | D | + * | :----- | ----: | + * |Charlie | Delta | + * + * @example + * {"name": "not-ok-padded.md", "label": "output", "setting": "consistent", "gfm": true} + * + * 7:2: Cell should be padded + * + * @example + * {"name": "ok-compact.md", "setting": "consistent", "gfm": true} + * + * |A |B | + * |-----|-----| + * |Alpha|Bravo| + * + * |C |D | + * |-------|-----| + * |Charlie|Delta| + * + * @example + * {"name": "not-ok-compact.md", "label": "input", "setting": "consistent", "gfm": true} + * + * |A |B | + * |-----|-----| + * |Alpha|Bravo| + * + * |C | D| + * |:------|-----:| + * |Charlie|Delta | + * + * @example + * {"name": "not-ok-compact.md", "label": "output", "setting": "consistent", "gfm": true} + * + * 7:16: Cell should be compact + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true, "gfm": true} + * + * 1:1: Incorrect table cell padding style `💩`, expected `'padded'`, `'compact'`, or `'consistent'` + * + * @example + * {"name": "empty.md", "label": "input", "setting": "padded", "gfm": true} + * + * + * + * | | Alpha | Bravo| + * | ------ | ----- | ---: | + * | Charlie| | Echo| + * + * @example + * {"name": "empty.md", "label": "output", "setting": "padded", "gfm": true} + * + * 3:25: Cell should be padded + * 5:10: Cell should be padded + * 5:25: Cell should be padded + * + * @example + * {"name": "missing-body.md", "setting": "padded", "gfm": true} + * + * + * + * | Alpha | Bravo | Charlie | + * | ----- | ------- | ------- | + * | Delta | + * | Echo | Foxtrot | */ -const remarkLintRuleStyle = lintRule$B( - 'remark-lint:rule-style', +const remarkLintTableCellPadding = lintRule$2( + 'remark-lint:table-cell-padding', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { - const value = String(file); - - if (option !== 'consistent' && /[^-_* ]/.test(option)) { + if ( + option !== 'padded' && + option !== 'compact' && + option !== 'consistent' + ) { file.fail( - "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" + 'Incorrect table cell padding style `' + + option + + "`, expected `'padded'`, `'compact'`, or `'consistent'`" ); } - visit$x(tree, 'thematicBreak', (node) => { - const initial = pointStart$m(node).offset; - const final = pointEnd$c(node).offset; + visit$2(tree, 'table', (node) => { + const rows = node.children; + // To do: fix types to always have `align` defined. + /* c8 ignore next */ + const align = node.align || []; + /** @type {number[]} */ + const sizes = Array.from({length: align.length}); + /** @type {Entry[]} */ + const entries = []; + let index = -1; - if (typeof initial === 'number' && typeof final === 'number') { - const rule = value.slice(initial, final); + // Check rows. + while (++index < rows.length) { + const row = rows[index]; + let column = -1; - if (option === 'consistent') { - option = rule; - } else if (rule !== option) { - file.message('Rules should use `' + option + '`', node); + // Check fences (before, between, and after cells). + while (++column < row.children.length) { + const cell = row.children[column]; + + if (cell.children.length > 0) { + const cellStart = pointStart$2(cell).offset; + const cellEnd = pointEnd$1(cell).offset; + const contentStart = pointStart$2(cell.children[0]).offset; + const contentEnd = pointEnd$1( + cell.children[cell.children.length - 1] + ).offset; + + if ( + typeof cellStart !== 'number' || + typeof cellEnd !== 'number' || + typeof contentStart !== 'number' || + typeof contentEnd !== 'number' + ) { + continue + } + + entries.push({ + node: cell, + start: contentStart - cellStart - (column ? 0 : 1), + end: cellEnd - contentEnd - 1, + column + }); + + // Detect max space per 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$3 }); - } -); -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ + /** + * @param {'start'|'end'} side + * @param {Entry} entry + * @param {0|1} style + * @param {number[]} sizes + */ + function checkSide(side, entry, style, sizes) { + const cell = entry.node; + const column = entry.column; + const spacing = entry[side]; -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$D(middleware, callback) { - /** @type {boolean} */ - let called; + if (spacing === undefined || spacing === style) { + return + } - return wrapped + let reason = 'Cell should be '; - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; + if (style === 0) { + // Ignore every cell except the biggest in the column. + if (size(cell) < sizes[column]) { + return + } - if (fnExpectsCallback) { - parameters.push(done); - } + reason += 'compact'; + } else { + reason += 'padded'; - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; + if (spacing > style) { + // May be right or center aligned. + if (size(cell) < sizes[column]) { + return + } - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception + reason += ' with 1 space, not ' + spacing; + } } - return done(exception) - } + /** @type {Point} */ + let point; - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); + if (side === 'start') { + point = pointStart$2(cell); + if (!column) { + point.column++; + + if (typeof point.offset === 'number') { + point.offset++; + } + } } else { - then(result); + point = pointEnd$1(cell); + point.column--; + + if (typeof point.offset === 'number') { + point.offset--; + } } - } - } - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); + file.message(reason, point); } } +); - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } +/** + * @param {TableCell} node + * @returns {number} + */ +function size(node) { + const head = pointStart$2(node.children[0]).offset; + const tail = pointEnd$1(node.children[node.children.length - 1]).offset; + // Only called when we’re sure offsets exist. + /* c8 ignore next */ + return typeof head === 'number' && typeof tail === 'number' ? tail - head : 0 } /** @@ -71666,13 +79902,13 @@ function wrap$D(middleware, callback) { * @returns {void} */ -const primitives$C = new Set(['string', 'number', 'boolean']); +const primitives$1 = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$C(id, rule) { +function lintRule$1(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -71685,7 +79921,7 @@ function lintRule$C(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$D(ruleId, raw); + const [severity, options] = coerce$1(ruleId, raw); if (!severity) return @@ -71694,7 +79930,7 @@ function lintRule$C(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$D(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -71724,7 +79960,7 @@ function lintRule$C(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$D(name, value) { +function coerce$1(name, value) { /** @type {unknown[]} */ let result; @@ -71736,7 +79972,7 @@ function coerce$D(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$C.has(typeof value[0]) + primitives$1.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -71789,7 +80025,7 @@ function coerce$D(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$B = +const convert$2 = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -71809,19 +80045,19 @@ const convert$B = */ function (test) { if (test === undefined || test === null) { - return ok$z + return ok$2 } if (typeof test === 'string') { - return typeFactory$y(test) + return typeFactory$2(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$y(test) : propsFactory$x(test) + return Array.isArray(test) ? anyFactory$2(test) : propsFactory$2(test) } if (typeof test === 'function') { - return castFactory$x(test) + return castFactory$2(test) } throw new Error('Expected function, string, or object as test') @@ -71831,16 +80067,16 @@ const convert$B = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$y(tests) { +function anyFactory$2(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$B(tests[index]); + checks[index] = convert$2(tests[index]); } - return castFactory$x(any) + return castFactory$2(any) /** * @this {unknown} @@ -71865,8 +80101,8 @@ function anyFactory$y(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$x(check) { - return castFactory$x(all) +function propsFactory$2(check) { + return castFactory$2(all) /** * @param {Node} node @@ -71892,8 +80128,8 @@ function propsFactory$x(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$y(check) { - return castFactory$x(type) +function typeFactory$2(check) { + return castFactory$2(type) /** * @param {Node} node @@ -71909,7 +80145,7 @@ function typeFactory$y(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$x(check) { +function castFactory$2(check) { return assertion /** @@ -71924,7 +80160,7 @@ function castFactory$x(check) { } // Utility to return true. -function ok$z() { +function ok$2() { return true } @@ -71932,7 +80168,7 @@ function ok$z() { * @param {string} d * @returns {string} */ -function color$z(d) { +function color$2(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -71945,15 +80181,15 @@ function color$z(d) { /** * Continue traversing as normal */ -const CONTINUE$z = true; +const CONTINUE$2 = true; /** * Do not traverse this node’s children */ -const SKIP$z = 'skip'; +const SKIP$2 = 'skip'; /** * Stop traversing immediately */ -const EXIT$z = false; +const EXIT$2 = false; /** * Visit children of tree which pass a test @@ -71963,7 +80199,7 @@ const EXIT$z = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$y = +const visitParents$2 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -71985,7 +80221,7 @@ const visitParents$y = test = null; } - const is = convert$B(test); + const is = convert$2(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -72013,7 +80249,7 @@ const visitParents$y = Object.defineProperty(visit, 'name', { value: 'node (' + - color$z(value.type + (name ? '<' + name + '>' : '')) + + color$2(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -72031,15 +80267,15 @@ const visitParents$y = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$y(visitor(node, parents)); + result = toResult$2(visitor(node, parents)); - if (result[0] === EXIT$z) { + if (result[0] === EXIT$2) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$z) { + if (node.children && result[0] !== SKIP$2) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -72050,7 +80286,7 @@ const visitParents$y = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$z) { + if (subresult[0] === EXIT$2) { return subresult } @@ -72069,13 +80305,13 @@ const visitParents$y = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$y(value) { +function toResult$2(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$z, value] + return [CONTINUE$2, value] } return [value] @@ -72096,7 +80332,7 @@ function toResult$y(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$y = +const visit$1 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -72117,7 +80353,7 @@ const visit$y = test = null; } - visitParents$y(tree, test, overload, reverse); + visitParents$2(tree, test, overload, reverse); /** * @param {Node} node @@ -72148,14 +80384,15 @@ const visit$y = * @property {PositionLike} [position] */ -var pointStart$n = point$q('start'); +var pointStart$1 = point$1('start'); +var pointEnd = point$1('end'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$q(type) { +function point$1(type) { return point /** @@ -72181,177 +80418,75 @@ function point$q(type) { * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT - * @module strong-marker + * @module table-pipes * @fileoverview - * Warn for violating importance (strong) markers. - * - * Options: `'consistent'`, `'*'`, or `'_'`, default: `'consistent'`. - * - * `'consistent'` detects the first used importance style and warns when - * subsequent importance sequences use different styles. + * Warn when table rows are not fenced with pipes. * * ## Fix * * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats importance using an `*` (asterisk) by default. - * Pass - * [`strong: '_'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsstrong) - * to use `_` (underscore) instead. + * creates fenced rows with initial and final pipes by default. * * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) * on how to automatically fix warnings for this rule. * * @example - * {"name": "ok.md"} - * - * **foo** and **bar**. - * - * @example - * {"name": "also-ok.md"} - * - * __foo__ and __bar__. - * - * @example - * {"name": "ok.md", "setting": "*"} - * - * **foo**. - * - * @example - * {"name": "ok.md", "setting": "_"} - * - * __foo__. - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * **foo** and __bar__. - * - * @example - * {"name": "not-ok.md", "label": "output"} + * {"name": "ok.md", "gfm": true} * - * 1:13-1:20: Strong should use `*` as a marker + * | A | B | + * | ----- | ----- | + * | Alpha | Bravo | * * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} - * - * 1:1: Incorrect strong marker `💩`: use either `'consistent'`, `'*'`, or `'_'` - */ - -const remarkLintStrongMarker = lintRule$C( - 'remark-lint:strong-marker', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); - - if (option !== '*' && option !== '_' && option !== 'consistent') { - file.fail( - 'Incorrect strong marker `' + - option + - "`: use either `'consistent'`, `'*'`, or `'_'`" - ); - } - - visit$y(tree, 'strong', (node) => { - const start = pointStart$n(node).offset; - - if (typeof start === 'number') { - const marker = /** @type {Marker} */ (value.charAt(start)); - - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Strong should use `' + option + '` as a marker', node); - } - } - }); - } -); - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware + * {"name": "not-ok.md", "label": "input", "gfm": true} * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. + * A | B + * ----- | ----- + * Alpha | Bravo * - * @param {Middleware} middleware - * @param {Callback} callback + * @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 */ -function wrap$E(middleware, callback) { - /** @type {boolean} */ - let called; - return wrapped - - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; +const reasonStart = 'Missing initial pipe in table fence'; +const reasonEnd = 'Missing final pipe in table fence'; - if (fnExpectsCallback) { - parameters.push(done); - } +const remarkLintTablePipes = lintRule$1( + 'remark-lint:table-pipes', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file) => { + const value = String(file); - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; + visit$1(tree, 'table', (node) => { + let index = -1; - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } + while (++index < node.children.length) { + const row = node.children[index]; + const start = pointStart$1(row); + const end = pointEnd(row); - return done(exception) - } + if ( + typeof start.offset === 'number' && + value.charCodeAt(start.offset) !== 124 + ) { + file.message(reasonStart, start); + } - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); + if ( + typeof end.offset === 'number' && + value.charCodeAt(end.offset - 1) !== 124 + ) { + file.message(reasonEnd, end); + } } - } - } - - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } - } - - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); + }); } -} +); /** * @typedef {import('unist').Node} Node @@ -72368,13 +80503,13 @@ function wrap$E(middleware, callback) { * @returns {void} */ -const primitives$D = new Set(['string', 'number', 'boolean']); +const primitives = new Set(['string', 'number', 'boolean']); /** * @param {string} id * @param {Rule} rule */ -function lintRule$D(id, rule) { +function lintRule(id, rule) { const parts = id.split(':'); // Possibly useful if externalised later. /* c8 ignore next */ @@ -72387,7 +80522,7 @@ function lintRule$D(id, rule) { /** @type {import('unified').Plugin<[unknown]|void[]>} */ function plugin(raw) { - const [severity, options] = coerce$E(ruleId, raw); + const [severity, options] = coerce(ruleId, raw); if (!severity) return @@ -72396,7 +80531,7 @@ function lintRule$D(id, rule) { return (tree, file, next) => { let index = file.messages.length - 1; - wrap$E(rule, (error) => { + wrap(rule, (error) => { const messages = file.messages; // Add the error, if not already properly added. @@ -72426,7 +80561,7 @@ function lintRule$D(id, rule) { * @param {unknown} value * @returns {SeverityTuple} */ -function coerce$E(name, value) { +function coerce(name, value) { /** @type {unknown[]} */ let result; @@ -72438,7 +80573,7 @@ function coerce$E(name, value) { Array.isArray(value) && // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line - primitives$D.has(typeof value[0]) + primitives.has(typeof value[0]) ) { // `isArray(unknown)` is turned into `any[]`: // type-coverage:ignore-next-line @@ -72491,7 +80626,7 @@ function coerce$E(name, value) { * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test */ -const convert$C = +const convert$1 = /** * @type {( * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & @@ -72511,19 +80646,19 @@ const convert$C = */ function (test) { if (test === undefined || test === null) { - return ok$A + return ok$1 } if (typeof test === 'string') { - return typeFactory$z(test) + return typeFactory$1(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$z(test) : propsFactory$y(test) + return Array.isArray(test) ? anyFactory$1(test) : propsFactory$1(test) } if (typeof test === 'function') { - return castFactory$y(test) + return castFactory$1(test) } throw new Error('Expected function, string, or object as test') @@ -72533,16 +80668,16 @@ const convert$C = * @param {Array.} tests * @returns {AssertAnything} */ -function anyFactory$z(tests) { +function anyFactory$1(tests) { /** @type {Array.} */ const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$C(tests[index]); + checks[index] = convert$1(tests[index]); } - return castFactory$y(any) + return castFactory$1(any) /** * @this {unknown} @@ -72567,8 +80702,8 @@ function anyFactory$z(tests) { * @param {Props} check * @returns {AssertAnything} */ -function propsFactory$y(check) { - return castFactory$y(all) +function propsFactory$1(check) { + return castFactory$1(all) /** * @param {Node} node @@ -72594,8 +80729,8 @@ function propsFactory$y(check) { * @param {Type} check * @returns {AssertAnything} */ -function typeFactory$z(check) { - return castFactory$y(type) +function typeFactory$1(check) { + return castFactory$1(type) /** * @param {Node} node @@ -72611,7 +80746,7 @@ function typeFactory$z(check) { * @param {TestFunctionAnything} check * @returns {AssertAnything} */ -function castFactory$y(check) { +function castFactory$1(check) { return assertion /** @@ -72626,7 +80761,7 @@ function castFactory$y(check) { } // Utility to return true. -function ok$A() { +function ok$1() { return true } @@ -72634,7 +80769,7 @@ function ok$A() { * @param {string} d * @returns {string} */ -function color$A(d) { +function color$1(d) { return '\u001B[33m' + d + '\u001B[39m' } @@ -72647,15 +80782,15 @@ function color$A(d) { /** * Continue traversing as normal */ -const CONTINUE$A = true; +const CONTINUE$1 = true; /** * Do not traverse this node’s children */ -const SKIP$A = 'skip'; +const SKIP$1 = 'skip'; /** * Stop traversing immediately */ -const EXIT$A = false; +const EXIT$1 = false; /** * Visit children of tree which pass a test @@ -72665,7 +80800,7 @@ const EXIT$A = false; * @param visitor Function to run for each node * @param reverse Visit the tree in reverse order, defaults to false */ -const visitParents$z = +const visitParents$1 = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -72687,7 +80822,7 @@ const visitParents$z = test = null; } - const is = convert$C(test); + const is = convert$1(test); const step = reverse ? -1 : 1; factory(tree, null, [])(); @@ -72715,7 +80850,7 @@ const visitParents$z = Object.defineProperty(visit, 'name', { value: 'node (' + - color$A(value.type + (name ? '<' + name + '>' : '')) + + color$1(value.type + (name ? '<' + name + '>' : '')) + ')' }); } @@ -72733,15 +80868,15 @@ const visitParents$z = let grandparents; if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$z(visitor(node, parents)); + result = toResult$1(visitor(node, parents)); - if (result[0] === EXIT$A) { + if (result[0] === EXIT$1) { return result } } // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$A) { + if (node.children && result[0] !== SKIP$1) { // @ts-expect-error looks like a parent. offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent. @@ -72752,7 +80887,7 @@ const visitParents$z = // @ts-expect-error looks like a parent. subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$A) { + if (subresult[0] === EXIT$1) { return subresult } @@ -72771,13 +80906,13 @@ const visitParents$z = * @param {VisitorResult} value * @returns {ActionTuple} */ -function toResult$z(value) { +function toResult$1(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$A, value] + return [CONTINUE$1, value] } return [value] @@ -72798,7 +80933,7 @@ function toResult$z(value) { * @param visitor Function to run for each node * @param reverse Fisit the tree in reverse, defaults to false */ -const visit$z = +const visit = /** * @type {( * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & @@ -72819,7 +80954,7 @@ const visit$z = test = null; } - visitParents$z(tree, test, overload, reverse); + visitParents$1(tree, test, overload, reverse); /** * @param {Node} node @@ -72850,15 +80985,14 @@ const visit$z = * @property {PositionLike} [position] */ -var pointStart$o = point$r('start'); -var pointEnd$d = point$r('end'); +var pointStart = point('start'); /** * Get the positional info of `node`. * * @param {'start'|'end'} type */ -function point$r(type) { +function point(type) { return point /** @@ -72884,3652 +81018,3700 @@ function point$r(type) { * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT - * @module table-cell-padding + * @module unordered-list-marker-style * @fileoverview - * Warn when table cells are incorrectly padded. + * Warn when the list item marker style of unordered lists violate a given + * style. * - * Options: `'consistent'`, `'padded'`, or `'compact'`, default: `'consistent'`. + * Options: `'consistent'`, `'-'`, `'*'`, or `'+'`, default: `'consistent'`. * - * `'consistent'` detects the first used cell padding style and warns when - * subsequent cells use different styles. + * `'consistent'` detects the first used list style and warns when subsequent + * lists use different styles. * * ## Fix * * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats tables with padding by default. + * formats unordered lists using `-` (hyphen-minus) by default. * Pass - * [`spacedTable: false`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsspacedtable) - * to not use padding. + * [`bullet: '*'` or `bullet: '+'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsbullet) + * to use `*` (asterisk) or `+` (plus sign) instead. * * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) * on how to automatically fix warnings for this rule. * * @example - * {"name": "ok.md", "setting": "padded", "gfm": true} - * - * | A | B | - * | ----- | ----- | - * | Alpha | Bravo | - * - * @example - * {"name": "not-ok.md", "label": "input", "setting": "padded", "gfm": true} - * - * | A | B | - * | :----|----: | - * | Alpha|Bravo | - * - * | C | D | - * | :----- | ---: | - * |Charlie | Delta| - * - * Too much padding isn’t good either: - * - * | E | F | G | H | - * | :---- | -------- | :----: | -----: | - * | Echo | Foxtrot | Golf | Hotel | - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "padded", "gfm": true} - * - * 3:8: Cell should be padded - * 3:9: Cell should be padded - * 7:2: Cell should be padded - * 7:17: Cell should be padded - * 13:9: Cell should be padded with 1 space, not 2 - * 13:20: Cell should be padded with 1 space, not 2 - * 13:21: Cell should be padded with 1 space, not 2 - * 13:29: Cell should be padded with 1 space, not 2 - * 13:30: Cell should be padded with 1 space, not 2 - * - * @example - * {"name": "ok.md", "setting": "compact", "gfm": true} - * - * |A |B | - * |-----|-----| - * |Alpha|Bravo| - * - * @example - * {"name": "not-ok.md", "label": "input", "setting": "compact", "gfm": true} - * - * | A | B | - * | -----| -----| - * | Alpha| Bravo| - * - * |C | D| - * |:------|-----:| - * |Charlie|Delta | - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "compact", "gfm": true} - * - * 3:2: Cell should be compact - * 3:11: Cell should be compact - * 7:16: Cell should be compact - * - * @example - * {"name": "ok-padded.md", "setting": "consistent", "gfm": true} - * - * | A | B | - * | ----- | ----- | - * | Alpha | Bravo | - * - * | C | D | - * | ------- | ----- | - * | Charlie | Delta | - * - * @example - * {"name": "not-ok-padded.md", "label": "input", "setting": "consistent", "gfm": true} - * - * | A | B | - * | ----- | ----- | - * | Alpha | Bravo | - * - * | C | D | - * | :----- | ----: | - * |Charlie | Delta | - * - * @example - * {"name": "not-ok-padded.md", "label": "output", "setting": "consistent", "gfm": true} + * {"name": "ok.md"} * - * 7:2: Cell should be padded + * By default (`'consistent'`), if the file uses only one marker, + * that’s OK. * - * @example - * {"name": "ok-compact.md", "setting": "consistent", "gfm": true} + * * Foo + * * Bar + * * Baz * - * |A |B | - * |-----|-----| - * |Alpha|Bravo| + * Ordered lists are not affected. * - * |C |D | - * |-------|-----| - * |Charlie|Delta| + * 1. Foo + * 2. Bar + * 3. Baz * * @example - * {"name": "not-ok-compact.md", "label": "input", "setting": "consistent", "gfm": true} - * - * |A |B | - * |-----|-----| - * |Alpha|Bravo| + * {"name": "ok.md", "setting": "*"} * - * |C | D| - * |:------|-----:| - * |Charlie|Delta | + * * Foo * * @example - * {"name": "not-ok-compact.md", "label": "output", "setting": "consistent", "gfm": true} + * {"name": "ok.md", "setting": "-"} * - * 7:16: Cell should be compact + * - Foo * * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true, "gfm": true} + * {"name": "ok.md", "setting": "+"} * - * 1:1: Incorrect table cell padding style `💩`, expected `'padded'`, `'compact'`, or `'consistent'` + * + Foo * * @example - * {"name": "empty.md", "label": "input", "setting": "padded", "gfm": true} - * - * + * {"name": "not-ok.md", "label": "input"} * - * | | Alpha | Bravo| - * | ------ | ----- | ---: | - * | Charlie| | Echo| + * * Foo + * - Bar + * + Baz * * @example - * {"name": "empty.md", "label": "output", "setting": "padded", "gfm": true} + * {"name": "not-ok.md", "label": "output"} * - * 3:25: Cell should be padded - * 5:10: Cell should be padded - * 5:25: Cell should be padded + * 2:1-2:6: Marker style should be `*` + * 3:1-3:6: Marker style should be `*` * * @example - * {"name": "missing-body.md", "setting": "padded", "gfm": true} - * - * + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} * - * | Alpha | Bravo | Charlie | - * | ----- | ------- | ------- | - * | Delta | - * | Echo | Foxtrot | + * 1:1: Incorrect unordered list item marker style `💩`: use either `'-'`, `'*'`, or `'+'` */ -const remarkLintTableCellPadding = lintRule$D( - 'remark-lint:table-cell-padding', +const markers = new Set(['-', '*', '+']); + +const remarkLintUnorderedListMarkerStyle = lintRule( + 'remark-lint:unordered-list-marker-style', /** @type {import('unified-lint-rule').Rule} */ (tree, file, option = 'consistent') => { - if ( - option !== 'padded' && - option !== 'compact' && - option !== 'consistent' - ) { + const value = String(file); + + if (option !== 'consistent' && !markers.has(option)) { file.fail( - 'Incorrect table cell padding style `' + + 'Incorrect unordered list item marker style `' + option + - "`, expected `'padded'`, `'compact'`, or `'consistent'`" + "`: use either `'-'`, `'*'`, or `'+'`" ); } - visit$z(tree, 'table', (node) => { - const rows = node.children; - // To do: fix types to always have `align` defined. - /* c8 ignore next */ - const align = node.align || []; - /** @type {number[]} */ - const sizes = Array.from({length: align.length}); - /** @type {Entry[]} */ - const entries = []; - let index = -1; - - // Check rows. - while (++index < rows.length) { - const row = rows[index]; - let column = -1; - - // Check fences (before, between, and after cells). - while (++column < row.children.length) { - const cell = row.children[column]; + visit(tree, 'list', (node) => { + if (node.ordered) return - if (cell.children.length > 0) { - const cellStart = pointStart$o(cell).offset; - const cellEnd = pointEnd$d(cell).offset; - const contentStart = pointStart$o(cell.children[0]).offset; - const contentEnd = pointEnd$d( - cell.children[cell.children.length - 1] - ).offset; + let index = -1; - if ( - typeof cellStart !== 'number' || - typeof cellEnd !== 'number' || - typeof contentStart !== 'number' || - typeof contentEnd !== 'number' - ) { - continue - } + while (++index < node.children.length) { + const child = node.children[index]; - entries.push({ - node: cell, - start: contentStart - cellStart - (column ? 0 : 1), - end: cellEnd - contentEnd - 1, - column - }); + if (!generated(child)) { + const marker = /** @type {Marker} */ ( + value + .slice( + pointStart(child).offset, + pointStart(child.children[0]).offset + ) + .replace(/\[[x ]?]\s*$/i, '') + .replace(/\s/g, '') + ); - // Detect max space per column. - sizes[column] = Math.max( - sizes[column] || 0, - contentEnd - contentStart - ); + if (option === 'consistent') { + option = marker; + } else if (marker !== option) { + file.message('Marker style should be `' + option + '`', child); } } } - - 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$A }); + } +); - /** - * @param {'start'|'end'} side - * @param {Entry} entry - * @param {0|1} style - * @param {number[]} sizes - */ - function checkSide(side, entry, style, sizes) { - const cell = entry.node; - const column = entry.column; - const spacing = entry[side]; - - if (spacing === undefined || spacing === style) { - return - } - - let reason = 'Cell should be '; +// @see https://github.com/nodejs/node/blob/master/doc/guides/doc-style-guide.md - if (style === 0) { - // Ignore every cell except the biggest in the column. - if (size$1(cell) < sizes[column]) { - return - } +// Add in rules alphabetically +const remarkPresetLintNode = [ + // Leave preset at the top so it can be overridden + remarkPresetLintRecommended, + [remarkLintBlockquoteIndentation, 2], + [remarkLintCheckboxCharacterStyle, { checked: "x", unchecked: " " }], + remarkLintCheckboxContentIndent, + [remarkLintCodeBlockStyle, "fenced"], + remarkLintDefinitionSpacing, + [ + remarkLintFencedCodeFlag, + { + flags: [ + "bash", + "c", + "cjs", + "coffee", + "console", + "cpp", + "diff", + "http", + "js", + "json", + "markdown", + "mjs", + "powershell", + "r", + "text", + ], + }, + ], + [remarkLintFencedCodeMarker, "`"], + [remarkLintFileExtension, "md"], + remarkLintFinalDefinition, + [remarkLintFirstHeadingLevel, 1], + [remarkLintHeadingStyle, "atx"], + [remarkLintListItemIndent, "space"], + remarkLintMaximumLineLength, + remarkLintNoConsecutiveBlankLines, + remarkLintNoFileNameArticles, + remarkLintNoFileNameConsecutiveDashes, + remarkLintNofileNameOuterDashes, + remarkLintNoHeadingIndent, + remarkLintNoMultipleToplevelHeadings, + remarkLintNoShellDollars, + remarkLintNoTableIndentation, + remarkLintNoTabs, + remarkLintNoTrailingSpaces, + remarkLintNodejsLinks, + remarkLintNodejsYamlComments, + [ + remarkLintProhibitedStrings, + [ + { yes: "End-of-Life" }, + { yes: "GitHub" }, + { no: "hostname", yes: "host name" }, + { yes: "JavaScript" }, + { no: "[Ll]ong[ -][Tt]erm [Ss]upport", yes: "Long Term Support" }, + { no: "Node", yes: "Node.js", ignoreNextTo: "-API" }, + { yes: "Node.js" }, + { no: "Node[Jj][Ss]", yes: "Node.js" }, + { no: "Node\\.js's?", yes: "the Node.js" }, + { no: "[Nn]ote that", yes: "" }, + { yes: "RFC" }, + { no: "[Rr][Ff][Cc]\\d+", yes: "RFC " }, + { yes: "Unix" }, + { yes: "V8" }, + ], + ], + remarkLintRuleStyle, + [remarkLintStrongMarker, "*"], + [remarkLintTableCellPadding, "padded"], + remarkLintTablePipes, + [remarkLintUnorderedListMarkerStyle, "*"], +]; - reason += 'compact'; - } else { - reason += 'padded'; +var remarkPresetLintNode$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': remarkPresetLintNode +}); - if (spacing > style) { - // May be right or center aligned. - if (size$1(cell) < sizes[column]) { - return - } +var require$$5 = /*@__PURE__*/getAugmentedNamespace(remarkPresetLintNode$1); - reason += ' with 1 space, not ' + spacing; - } - } +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * @param {T[]} list + * @param {number} start + * @param {number} remove + * @param {T[]} items + * @returns {void} + */ +function splice(list, start, remove, items) { + const end = list.length; + let chunkStart = 0; + /** @type {unknown[]} */ - /** @type {Point} */ - let point; + let parameters; // Make start between zero and `end` (included). - if (side === 'start') { - point = pointStart$o(cell); - if (!column) { - point.column++; + if (start < 0) { + start = -start > end ? 0 : end + start; + } else { + start = start > end ? end : start; + } - if (typeof point.offset === 'number') { - point.offset++; - } - } - } else { - point = pointEnd$d(cell); - point.column--; + remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items. - if (typeof point.offset === 'number') { - point.offset--; - } - } + if (items.length < 10000) { + parameters = Array.from(items); + parameters.unshift(start, remove) // @ts-expect-error Hush, it’s fine. + ;[].splice.apply(list, parameters); + } else { + // Delete `remove` items starting from `start` + if (remove) [].splice.apply(list, [start, remove]); // Insert the items in chunks to not cause stack overflows. - file.message(reason, point); + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000); + parameters.unshift(start, 0) // @ts-expect-error Hush, it’s fine. + ;[].splice.apply(list, parameters); + chunkStart += 10000; + start += 10000; } } -); +} /** - * @param {TableCell} node - * @returns {number} + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ -function size$1(node) { - const head = pointStart$o(node.children[0]).offset; - const tail = pointEnd$d(node.children[node.children.length - 1]).offset; - // Only called when we’re sure offsets exist. - /* c8 ignore next */ - return typeof head === 'number' && typeof tail === 'number' ? tail - head : 0 -} + +const hasOwnProperty = {}.hasOwnProperty; /** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware + * Combine several syntax extensions into one. * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline + * @param {Extension[]} extensions List of syntax extensions. + * @returns {NormalizedExtension} A single combined extension. */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {}; + let index = -1; + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]); + } + + return all +} /** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. + * Merge `extension` into `all`. * - * @param {Middleware} middleware - * @param {Callback} callback + * @param {NormalizedExtension} all Extension to merge into. + * @param {Extension} extension Extension to merge. + * @returns {void} */ -function wrap$F(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped +function syntaxExtension(all, extension) { + /** @type {string} */ + let hook; - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined; + const left = maybe || (all[hook] = {}); + const right = extension[hook]; + /** @type {string} */ + let code; - if (fnExpectsCallback) { - parameters.push(done); + for (code in right) { + if (!hasOwnProperty.call(left, code)) left[code] = []; + const value = right[code]; + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ); } + } +} - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {unknown[]} existing + * @param {unknown[]} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1; + /** @type {unknown[]} */ + const before = []; - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } + while (++index < list.length) { +(list[index].add === 'after' ? existing : before).push(list[index]); + } - return done(exception) - } + splice(existing, 0, 0, before); +} - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } +/** + * Combine several HTML extensions into one. + * + * @param {HtmlExtension[]} htmlExtensions List of HTML extensions. + * @returns {HtmlExtension} A single combined extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {}; + let index = -1; - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]); } - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); - } + return handlers } /** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple + * Merge `extension` into `all`. * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options + * @param {HtmlExtension} all Extension to merge into. + * @param {HtmlExtension} extension Extension to merge. * @returns {void} */ +function htmlExtension(all, extension) { + /** @type {string} */ + let hook; -const primitives$E = new Set(['string', 'number', 'boolean']); + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined; + const left = maybe || (all[hook] = {}); + const right = extension[hook]; + /** @type {string} */ + let type; + + if (right) { + for (type in right) { + left[type] = right[type]; + } + } + } +} + +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. +const unicodePunctuationRegex = + /[!-/:-@[-`{-~\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; /** - * @param {string} id - * @param {Rule} rule + * @typedef {import('micromark-util-types').Code} Code + */ +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). */ -function lintRule$E(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - Object.defineProperty(plugin, 'name', {value: id}); +const asciiAlpha = regexCheck(/[A-Za-z]/); +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + */ - return plugin +const asciiDigit = regexCheck(/\d/); +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + */ - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$F(ruleId, raw); +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * @returns {code is number} + */ - if (!severity) return +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * @returns {code is number} + */ - const fatal = severity === 2; +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * @returns {code is number} + */ - return (tree, file, next) => { - let index = file.messages.length - 1; +function markdownLineEnding(code) { + return code !== null && code < -2 +} +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * @returns {code is number} + */ - wrap$F(rule, (error) => { - const messages = file.messages; +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + */ - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } +const unicodeWhitespace = regexCheck(/\s/); +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + */ +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } +const unicodePunctuation = regexCheck(unicodePunctuationRegex); +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => code is number} + */ - next(); - })(tree, file, options); - } +function regexCheck(regex) { + return check + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code Character code + * @returns {code is number} Whether the character code matches the bound regex + */ + + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) } } /** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Code} Code */ -function coerce$F(name, value) { - /** @type {unknown[]} */ - let result; +const www = { + tokenize: tokenizeWww, + partial: true +}; +const domain = { + tokenize: tokenizeDomain, + partial: true +}; +const path = { + tokenize: tokenizePath, + partial: true +}; +const punctuation = { + tokenize: tokenizePunctuation, + partial: true +}; +const namedCharacterReference = { + tokenize: tokenizeNamedCharacterReference, + partial: true +}; +const wwwAutolink = { + tokenize: tokenizeWwwAutolink, + previous: previousWww +}; +const httpAutolink = { + tokenize: tokenizeHttpAutolink, + previous: previousHttp +}; +const emailAutolink = { + tokenize: tokenizeEmailAutolink, + previous: previousEmail +}; +/** @type {ConstructRecord} */ - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$E.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } +const text = {}; +/** @type {Extension} */ - let level = result[0]; +const gfmAutolinkLiteral = { + text +}; +let code = 48; // Add alphanumerics. - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; +while (code < 123) { + text[code] = emailAutolink; + code++; + if (code === 58) code = 65; + else if (code === 91) code = 97; +} + +text[43] = emailAutolink; +text[45] = emailAutolink; +text[46] = emailAutolink; +text[95] = emailAutolink; +text[72] = [emailAutolink, httpAutolink]; +text[104] = [emailAutolink, httpAutolink]; +text[87] = [emailAutolink, wwwAutolink]; +text[119] = [emailAutolink, wwwAutolink]; +/** @type {Tokenizer} */ + +function tokenizeEmailAutolink(effects, ok, nok) { + const self = this; + /** @type {boolean} */ + + let hasDot; + /** @type {boolean|undefined} */ + + let hasDigitInLastSegment; + return start + /** @type {State} */ + + function start(code) { + if ( + !gfmAtext(code) || + !previousEmail(self.previous) || + previousUnbalanced(self.events) + ) { + return nok(code) } - } - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) + effects.enter('literalAutolink'); + effects.enter('literalAutolinkEmail'); + return atext(code) } + /** @type {State} */ - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. - return result -} + function atext(code) { + if (gfmAtext(code)) { + effects.consume(code); + return atext + } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ + if (code === 64) { + effects.consume(code); + return label + } -const convert$D = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$B - } + return nok(code) + } + /** @type {State} */ - if (typeof test === 'string') { - return typeFactory$A(test) - } + function label(code) { + if (code === 46) { + return effects.check(punctuation, done, dotContinuation)(code) + } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$A(test) : propsFactory$z(test) - } + if (code === 45 || code === 95) { + return effects.check(punctuation, nok, dashOrUnderscoreContinuation)(code) + } - if (typeof test === 'function') { - return castFactory$z(test) + if (asciiAlphanumeric(code)) { + if (!hasDigitInLastSegment && asciiDigit(code)) { + hasDigitInLastSegment = true; } - throw new Error('Expected function, string, or object as test') + effects.consume(code); + return label } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$A(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$D(tests[index]); + return done(code) } + /** @type {State} */ - return castFactory$z(any) + function dotContinuation(code) { + effects.consume(code); + hasDot = true; + hasDigitInLastSegment = undefined; + return label + } + /** @type {State} */ - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + function dashOrUnderscoreContinuation(code) { + effects.consume(code); + return afterDashOrUnderscore + } + /** @type {State} */ - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + function afterDashOrUnderscore(code) { + if (code === 46) { + return effects.check(punctuation, nok, dotContinuation)(code) } - return false + return label(code) + } + /** @type {State} */ + + function done(code) { + if (hasDot && !hasDigitInLastSegment) { + effects.exit('literalAutolinkEmail'); + effects.exit('literalAutolink'); + return ok(code) + } + + return nok(code) } } +/** @type {Tokenizer} */ -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$z(check) { - return castFactory$z(all) +function tokenizeWwwAutolink(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; + function start(code) { + if ( + (code !== 87 && code !== 119) || + !previousWww(self.previous) || + previousUnbalanced(self.events) + ) { + return nok(code) + } - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false + effects.enter('literalAutolink'); + effects.enter('literalAutolinkWww'); // For `www.` we check instead of attempt, because when it matches, GH + // treats it as part of a domain (yes, it says a valid domain must come + // after `www.`, but that’s not how it’s implemented by them). + + return effects.check( + www, + effects.attempt(domain, effects.attempt(path, done), nok), + nok + )(code) + } + /** @type {State} */ + + function done(code) { + effects.exit('literalAutolinkWww'); + effects.exit('literalAutolink'); + return ok(code) + } +} +/** @type {Tokenizer} */ + +function tokenizeHttpAutolink(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ + + function start(code) { + if ( + (code !== 72 && code !== 104) || + !previousHttp(self.previous) || + previousUnbalanced(self.events) + ) { + return nok(code) } - return true + effects.enter('literalAutolink'); + effects.enter('literalAutolinkHttp'); + effects.consume(code); + return t1 } -} + /** @type {State} */ -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$A(check) { - return castFactory$z(type) + function t1(code) { + if (code === 84 || code === 116) { + effects.consume(code); + return t2 + } - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check + return nok(code) } -} + /** @type {State} */ -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$z(check) { - return assertion + function t2(code) { + if (code === 84 || code === 116) { + effects.consume(code); + return p + } - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) + return nok(code) } -} + /** @type {State} */ -// Utility to return true. -function ok$B() { - return true -} + function p(code) { + if (code === 80 || code === 112) { + effects.consume(code); + return s + } -/** - * @param {string} d - * @returns {string} - */ -function color$B(d) { - return '\u001B[33m' + d + '\u001B[39m' -} + return nok(code) + } + /** @type {State} */ -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ + function s(code) { + if (code === 83 || code === 115) { + effects.consume(code); + return colon + } -/** - * Continue traversing as normal - */ -const CONTINUE$B = true; -/** - * Do not traverse this node’s children - */ -const SKIP$B = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$B = false; + return colon(code) + } + /** @type {State} */ -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$A = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } + function colon(code) { + if (code === 58) { + effects.consume(code); + return slash1 + } - const is = convert$D(test); - const step = reverse ? -1 : 1; + return nok(code) + } + /** @type {State} */ - factory(tree, null, [])(); + function slash1(code) { + if (code === 47) { + effects.consume(code); + return slash2 + } - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; + return nok(code) + } + /** @type {State} */ - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + function slash2(code) { + if (code === 47) { + effects.consume(code); + return after + } - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$B(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + return nok(code) + } + /** @type {State} */ - return visit + function after(code) { + return code === null || + asciiControl(code) || + unicodeWhitespace(code) || + unicodePunctuation(code) + ? nok(code) + : effects.attempt(domain, effects.attempt(path, done), nok)(code) + } + /** @type {State} */ - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; + function done(code) { + effects.exit('literalAutolinkHttp'); + effects.exit('literalAutolink'); + return ok(code) + } +} +/** @type {Tokenizer} */ - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$A(visitor(node, parents)); +function tokenizeWww(effects, ok, nok) { + return start + /** @type {State} */ - if (result[0] === EXIT$B) { - return result - } - } + function start(code) { + effects.consume(code); + return w2 + } + /** @type {State} */ - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$B) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); + function w2(code) { + if (code === 87 || code === 119) { + effects.consume(code); + return w3 + } - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); + return nok(code) + } + /** @type {State} */ - if (subresult[0] === EXIT$B) { - return subresult - } + function w3(code) { + if (code === 87 || code === 119) { + effects.consume(code); + return dot + } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + return nok(code) + } + /** @type {State} */ - return result - } - } + function dot(code) { + if (code === 46) { + effects.consume(code); + return after } - ); -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$A(value) { - if (Array.isArray(value)) { - return value + return nok(code) } + /** @type {State} */ - if (typeof value === 'number') { - return [CONTINUE$B, value] + function after(code) { + return code === null || markdownLineEnding(code) ? nok(code) : ok(code) } - - return [value] } +/** @type {Tokenizer} */ -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ - -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$A = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +function tokenizeDomain(effects, ok, nok) { + /** @type {boolean|undefined} */ + let hasUnderscoreInLastSegment; + /** @type {boolean|undefined} */ - visitParents$A(tree, test, overload, reverse); + let hasUnderscoreInLastLastSegment; + return domain + /** @type {State} */ - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + function domain(code) { + if (code === 38) { + return effects.check( + namedCharacterReference, + done, + punctuationContinuation + )(code) } - ); -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ + if (code === 46 || code === 95) { + return effects.check(punctuation, done, punctuationContinuation)(code) + } // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can + // occur, which sounds like ASCII only, but they also support `www.點看.com`, + // so that’s Unicode. + // Instead of some new production for Unicode alphanumerics, markdown + // already has that for Unicode punctuation and whitespace, so use those. -var pointStart$p = point$s('start'); -var pointEnd$e = point$s('end'); + if ( + code === null || + asciiControl(code) || + unicodeWhitespace(code) || + (code !== 45 && unicodePunctuation(code)) + ) { + return done(code) + } -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$s(type) { - return point + effects.consume(code); + return domain + } + /** @type {State} */ - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; + function punctuationContinuation(code) { + if (code === 46) { + hasUnderscoreInLastLastSegment = hasUnderscoreInLastSegment; + hasUnderscoreInLastSegment = undefined; + effects.consume(code); + return domain + } - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null + if (code === 95) hasUnderscoreInLastSegment = true; + effects.consume(code); + return domain + } + /** @type {State} */ + + function done(code) { + if (!hasUnderscoreInLastLastSegment && !hasUnderscoreInLastSegment) { + return ok(code) } + + return nok(code) } } +/** @type {Tokenizer} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module table-pipes - * @fileoverview - * Warn when table rows are not fenced with pipes. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * creates fenced rows with initial and final pipes by default. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md", "gfm": true} - * - * | A | B | - * | ----- | ----- | - * | Alpha | Bravo | - * - * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} - * - * A | B - * ----- | ----- - * Alpha | Bravo - * - * @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 - */ +function tokenizePath(effects, ok) { + let balance = 0; + return inPath + /** @type {State} */ -const reasonStart = 'Missing initial pipe in table fence'; -const reasonEnd = 'Missing final pipe in table fence'; + function inPath(code) { + if (code === 38) { + return effects.check( + namedCharacterReference, + ok, + continuedPunctuation + )(code) + } -const remarkLintTablePipes = lintRule$E( - 'remark-lint:table-pipes', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - const value = String(file); + if (code === 40) { + balance++; + } - visit$A(tree, 'table', (node) => { - let index = -1; + if (code === 41) { + return effects.check( + punctuation, + parenAtPathEnd, + continuedPunctuation + )(code) + } - while (++index < node.children.length) { - const row = node.children[index]; - const start = pointStart$p(row); - const end = pointEnd$e(row); + if (pathEnd(code)) { + return ok(code) + } - if ( - typeof start.offset === 'number' && - value.charCodeAt(start.offset) !== 124 - ) { - file.message(reasonStart, start); - } + if (trailingPunctuation(code)) { + return effects.check(punctuation, ok, continuedPunctuation)(code) + } - if ( - typeof end.offset === 'number' && - value.charCodeAt(end.offset - 1) !== 124 - ) { - file.message(reasonEnd, end); - } - } - }); + effects.consume(code); + return inPath } -); - -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ - -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap$G(middleware, callback) { - /** @type {boolean} */ - let called; - - return wrapped + /** @type {State} */ - /** - * Call `middleware`. - * @param {any[]} parameters - * @returns {void} - */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; + function continuedPunctuation(code) { + effects.consume(code); + return inPath + } + /** @type {State} */ - if (fnExpectsCallback) { - parameters.push(done); - } + function parenAtPathEnd(code) { + balance--; + return balance < 0 ? ok(code) : continuedPunctuation(code) + } +} +/** @type {Tokenizer} */ - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; +function tokenizeNamedCharacterReference(effects, ok, nok) { + return start + /** @type {State} */ - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } + function start(code) { + effects.consume(code); + return inside + } + /** @type {State} */ - return done(exception) + function inside(code) { + if (asciiAlpha(code)) { + effects.consume(code); + return inside } - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } + if (code === 59) { + effects.consume(code); + return after } - } - /** - * Call `callback`, only once. - * @type {Callback} - */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } + return nok(code) } + /** @type {State} */ - /** - * Call `done` with one value. - * - * @param {any} [value] - */ - function then(value) { - done(null, value); + function after(code) { + // If the named character reference is followed by the end of the path, it’s + // not continued punctuation. + return pathEnd(code) ? ok(code) : nok(code) } } +/** @type {Tokenizer} */ -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ +function tokenizePunctuation(effects, ok, nok) { + return start + /** @type {State} */ -const primitives$F = new Set(['string', 'number', 'boolean']); + function start(code) { + effects.consume(code); + return after + } + /** @type {State} */ + + function after(code) { + // Check the next. + if (trailingPunctuation(code)) { + effects.consume(code); + return after + } // If the punctuation marker is followed by the end of the path, it’s not + // continued punctuation. + return pathEnd(code) ? ok(code) : nok(code) + } +} /** - * @param {string} id - * @param {Rule} rule + * @param {Code} code + * @returns {boolean} */ -function lintRule$F(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - - Object.defineProperty(plugin, 'name', {value: id}); - - return plugin - - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$G(ruleId, raw); - - if (!severity) return - - const fatal = severity === 2; - return (tree, file, next) => { - let index = file.messages.length - 1; +function trailingPunctuation(code) { + return ( + code === 33 || + code === 34 || + code === 39 || + code === 41 || + code === 42 || + code === 44 || + code === 46 || + code === 58 || + code === 59 || + code === 60 || + code === 63 || + code === 95 || + code === 126 + ) +} +/** + * @param {Code} code + * @returns {boolean} + */ - wrap$G(rule, (error) => { - const messages = file.messages; +function pathEnd(code) { + return code === null || code === 60 || markdownLineEndingOrSpace(code) +} +/** + * @param {Code} code + * @returns {boolean} + */ - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } +function gfmAtext(code) { + return ( + code === 43 || + code === 45 || + code === 46 || + code === 95 || + asciiAlphanumeric(code) + ) +} +/** @type {Previous} */ - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } +function previousWww(code) { + return ( + code === null || + code === 40 || + code === 42 || + code === 95 || + code === 126 || + markdownLineEndingOrSpace(code) + ) +} +/** @type {Previous} */ - next(); - })(tree, file, options); - } - } +function previousHttp(code) { + return code === null || !asciiAlpha(code) } +/** @type {Previous} */ +function previousEmail(code) { + return code !== 47 && previousHttp(code) +} /** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} + * @param {Event[]} events + * @returns {boolean} */ -function coerce$G(name, value) { - /** @type {unknown[]} */ - let result; - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$F.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } +function previousUnbalanced(events) { + let index = events.length; + let result = false; - let level = result[0]; + while (index--) { + const token = events[index][1]; - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; + if ( + (token.type === 'labelLink' || token.type === 'labelImage') && + !token._balanced + ) { + result = true; + break + } // @ts-expect-error If we’ve seen this token, and it was marked as not + // having any unbalanced bracket before it, we can exit. + + if (token._gfmAutolinkLiteralWalkedInto) { + result = false; + break } } - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) + if (events.length > 0 && !result) { + // @ts-expect-error Mark the last token as “walked into” w/o finding + // anything. + events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true; } - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. return result } +const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'}; + /** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent + * Encode only the dangerous HTML characters. * - * @typedef {string} Type - * @typedef {Object} Props + * This ensures that certain characters which have special meaning in HTML are + * dealt with. + * Technically, we can skip `>` and `"` in many cases, but CM includes them. * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + * @param {string} value + * @returns {string} */ +function encode(value) { + return value.replace(/["&<>]/g, replace) -const convert$E = /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} + * @param {string} value + * @returns {string} */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$C - } + function replace(value) { + // @ts-expect-error Hush, it’s fine. + return '&' + characterReferences[value] + ';' + } +} - if (typeof test === 'string') { - return typeFactory$B(test) - } +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri` below). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * Then, a regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, + * or `/^https?$/i` for `img[src]`. + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string|undefined} url + * @param {RegExp} [protocol] + * @returns {string} + */ +function sanitizeUri(url, protocol) { + const value = encode(normalizeUri(url || '')); - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$B(test) : propsFactory$A(test) - } + if (!protocol) { + return value + } - if (typeof test === 'function') { - return castFactory$A(test) - } + const colon = value.indexOf(':'); + const questionMark = value.indexOf('?'); + const numberSign = value.indexOf('#'); + const slash = value.indexOf('/'); - throw new Error('Expected function, string, or object as test') - } - ); + if ( + // If there is no protocol, it’s relative. + colon < 0 || // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. + (slash > -1 && colon > slash) || + (questionMark > -1 && colon > questionMark) || + (numberSign > -1 && colon > numberSign) || // It is a protocol, it should be allowed. + protocol.test(value.slice(0, colon)) + ) { + return value + } + + return '' +} /** - * @param {Array.} tests - * @returns {AssertAnything} + * Normalize a URL (such as used in definitions). + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * @returns {string} */ -function anyFactory$B(tests) { - /** @type {Array.} */ - const checks = []; + +function normalizeUri(value) { + /** @type {string[]} */ + const result = []; let index = -1; + let start = 0; + let skip = 0; - while (++index < tests.length) { - checks[index] = convert$E(tests[index]); - } + while (++index < value.length) { + const code = value.charCodeAt(index); + /** @type {string} */ - return castFactory$A(any) + let replace = ''; // A correct percent encoded value. - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + if ( + code === 37 && + asciiAlphanumeric(value.charCodeAt(index + 1)) && + asciiAlphanumeric(value.charCodeAt(index + 2)) + ) { + skip = 2; + } // ASCII. + else if (code < 128) { + if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { + replace = String.fromCharCode(code); + } + } // Astral. + else if (code > 55295 && code < 57344) { + const next = value.charCodeAt(index + 1); // A correct surrogate pair. + + if (code < 56320 && next > 56319 && next < 57344) { + replace = String.fromCharCode(code, next); + skip = 1; + } // Lone surrogate. + else { + replace = '\uFFFD'; + } + } // Unicode. + else { + replace = String.fromCharCode(code); + } - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + if (replace) { + result.push(value.slice(start, index), encodeURIComponent(replace)); + start = index + skip + 1; + replace = ''; } - return false + if (skip) { + index += skip; + skip = 0; + } } + + return result.join('') + value.slice(start) } /** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').Handle} Handle + * @typedef {import('micromark-util-types').CompileContext} CompileContext + * @typedef {import('micromark-util-types').Token} Token */ -function propsFactory$A(check) { - return castFactory$A(all) +/** @type {HtmlExtension} */ - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; +const gfmAutolinkLiteralHtml = { + exit: { + literalAutolinkEmail, + literalAutolinkHttp, + literalAutolinkWww + } +}; +/** @type {Handle} */ - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } +function literalAutolinkWww(token) { + anchorFromToken.call(this, token, 'http://'); +} +/** @type {Handle} */ - return true - } +function literalAutolinkEmail(token) { + anchorFromToken.call(this, token, 'mailto:'); } +/** @type {Handle} */ +function literalAutolinkHttp(token) { + anchorFromToken.call(this, token); +} /** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} + * @this CompileContext + * @param {Token} token + * @param {string} [protocol] + * @returns {void} */ -function typeFactory$B(check) { - return castFactory$A(type) - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check - } +function anchorFromToken(token, protocol) { + const url = this.sliceSerialize(token); + this.tag(''); + this.raw(this.encode(url)); + this.tag(''); } /** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ -function castFactory$A(check) { - return assertion - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) +/** @type {HtmlExtension} */ +const gfmStrikethroughHtml = { + enter: { + strikethrough() { + this.tag(''); + } + }, + exit: { + strikethrough() { + this.tag(''); + } } -} +}; -// Utility to return true. -function ok$C() { - return true -} +/** + * @typedef {import('micromark-util-types').Code} Code + */ /** - * @param {string} d - * @returns {string} + * Classify whether a character code represents whitespace, punctuation, or + * something else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * Note that eof (`null`) is seen as whitespace. + * + * @param {Code} code + * @returns {number|undefined} */ -function color$C(d) { - return '\u001B[33m' + d + '\u001B[39m' +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + + if (unicodePunctuation(code)) { + return 2 + } } /** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver */ /** - * Continue traversing as normal + * Call all `resolveAll`s. + * + * @param {{resolveAll?: Resolver}[]} constructs + * @param {Event[]} events + * @param {TokenizeContext} context + * @returns {Event[]} */ -const CONTINUE$C = true; +function resolveAll(constructs, events, context) { + /** @type {Resolver[]} */ + const called = []; + let index = -1; + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll; + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context); + called.push(resolve); + } + } + + return events +} + /** - * Do not traverse this node’s children + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').Event} Event */ -const SKIP$C = 'skip'; + +/** + * @param {Options} [options] + * @returns {Extension} + */ +function gfmStrikethrough(options = {}) { + let single = options.singleTilde; + const tokenizer = { + tokenize: tokenizeStrikethrough, + resolveAll: resolveAllStrikethrough + }; + + if (single === null || single === undefined) { + single = true; + } + + return { + text: { + [126]: tokenizer + }, + insideSpan: { + null: [tokenizer] + } + } + /** + * Take events and resolve strikethrough. + * + * @type {Resolver} + */ + + function resolveAllStrikethrough(events, context) { + let index = -1; + /** @type {Token} */ + + let strikethrough; + /** @type {Token} */ + + let text; + /** @type {number} */ + + let open; + /** @type {Event[]} */ + + let nextEvents; // Walk through all events. + + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'strikethroughSequenceTemporary' && + events[index][1]._close + ) { + open = index; // Now walk back to find an opener. + + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'strikethroughSequenceTemporary' && + events[open][1]._open && // If the sizes are the same: + events[index][1].end.offset - events[index][1].start.offset === + events[open][1].end.offset - events[open][1].start.offset + ) { + events[index][1].type = 'strikethroughSequence'; + events[open][1].type = 'strikethroughSequence'; + strikethrough = { + type: 'strikethrough', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[index][1].end) + }; + text = { + type: 'strikethroughText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + }; // Opening. + + nextEvents = [ + ['enter', strikethrough, context], + ['enter', events[open][1], context], + ['exit', events[open][1], context], + ['enter', text, context] + ]; // Between. + + splice( + nextEvents, + nextEvents.length, + 0, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ); // Closing. + + splice(nextEvents, nextEvents.length, 0, [ + ['exit', text, context], + ['enter', events[index][1], context], + ['exit', events[index][1], context], + ['exit', strikethrough, context] + ]); + splice(events, open - 1, index - open + 3, nextEvents); + index = open + nextEvents.length - 2; + break + } + } + } + } + + index = -1; + + while (++index < events.length) { + if (events[index][1].type === 'strikethroughSequenceTemporary') { + events[index][1].type = 'data'; + } + } + + return events + } + /** @type {Tokenizer} */ + + function tokenizeStrikethrough(effects, ok, nok) { + const previous = this.previous; + const events = this.events; + let size = 0; + return start + /** @type {State} */ + + function start(code) { + if ( + code !== 126 || + (previous === 126 && + events[events.length - 1][1].type !== 'characterEscape') + ) { + return nok(code) + } + + effects.enter('strikethroughSequenceTemporary'); + return more(code) + } + /** @type {State} */ + + function more(code) { + const before = classifyCharacter(previous); + + if (code === 126) { + // If this is the third marker, exit. + if (size > 1) return nok(code) + effects.consume(code); + size++; + return more + } + + if (size < 2 && !single) return nok(code) + const token = effects.exit('strikethroughSequenceTemporary'); + const after = classifyCharacter(code); + token._open = !after || (after === 2 && Boolean(before)); + token._close = !before || (before === 2 && Boolean(after)); + return ok(code) + } + } +} + /** - * Stop traversing immediately + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ -const EXIT$C = false; /** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false + * @typedef {import('./syntax.js').Align} Align */ -const visitParents$B = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } +const alignment = { + null: '', + left: ' align="left"', + right: ' align="right"', + center: ' align="center"' +}; +/** @type {HtmlExtension} */ - const is = convert$E(test); - const step = reverse ? -1 : 1; +const gfmTableHtml = { + enter: { + table(token) { + this.lineEndingIfNeeded(); + this.tag(''); // @ts-expect-error Custom. - factory(tree, null, [])(); + this.setData('tableAlign', token._align); + }, - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; + tableBody() { + // Clear slurping line ending from the delimiter row. + this.setData('slurpOneLineEnding'); + this.tag(''); + }, - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + tableData() { + /** @type {string|undefined} */ + const align = // @ts-expect-error Custom. + alignment[this.getData('tableAlign')[this.getData('tableColumn')]]; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$C(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + if (align === undefined) { + // Capture results to ignore them. + this.buffer(); + } else { + this.lineEndingIfNeeded(); + this.tag(''); + } + }, - return visit + tableHead() { + this.lineEndingIfNeeded(); + this.tag(''); + }, - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; + tableHeader() { + this.lineEndingIfNeeded(); + this.tag( + '' + ); + }, - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$B(visitor(node, parents)); + tableRow() { + this.setData('tableColumn', 0); + this.lineEndingIfNeeded(); + this.tag(''); + } + }, + exit: { + // Overwrite the default code text data handler to unescape escaped pipes when + // they are in tables. + codeTextData(token) { + let value = this.sliceSerialize(token); - if (result[0] === EXIT$C) { - return result - } - } + if (this.getData('tableAlign')) { + value = value.replace(/\\([\\|])/g, replace$1); + } - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$C) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); + this.raw(this.encode(value)); + }, - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); + table() { + this.setData('tableAlign'); // If there was no table body, make sure the slurping from the delimiter row + // is cleared. - if (subresult[0] === EXIT$C) { - return subresult - } + this.setData('slurpAllLineEndings'); + this.lineEndingIfNeeded(); + this.tag('
'); + }, - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + tableBody() { + this.lineEndingIfNeeded(); + this.tag(''); + }, - return result - } + tableData() { + /** @type {number} */ + // @ts-expect-error Custom. + const column = this.getData('tableColumn'); // @ts-expect-error Custom. + + if (column in this.getData('tableAlign')) { + this.tag(''); + this.setData('tableColumn', column + 1); + } else { + // Stop capturing. + this.resume(); } - } - ); + }, -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$B(value) { - if (Array.isArray(value)) { - return value - } + tableHead() { + this.lineEndingIfNeeded(); + this.tag(''); + this.setData('slurpOneLineEnding', true); // Slurp the line ending from the delimiter row. + }, - if (typeof value === 'number') { - return [CONTINUE$C, value] - } + tableHeader() { + this.tag(''); // @ts-expect-error Custom. - return [value] -} + this.setData('tableColumn', this.getData('tableColumn') + 1); + }, -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ + tableRow() { + /** @type {Align[]} */ + // @ts-expect-error Custom. + const align = this.getData('tableAlign'); + /** @type {number} */ + // @ts-expect-error Custom. -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$B = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } + let column = this.getData('tableColumn'); - visitParents$B(tree, test, overload, reverse); + while (column < align.length) { + this.lineEndingIfNeeded(); // @ts-expect-error `null` is fine as an index. - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) + this.tag(''); + column++; } - } - ); + this.setData('tableColumn', column); + this.lineEndingIfNeeded(); + this.tag(''); + } + } +}; /** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] + * @param {string} $0 + * @param {string} $1 + * @returns {string} */ -var pointStart$q = point$t('start'); +function replace$1($0, $1) { + // Pipes work, backslashes don’t (but can’t escape pipes). + return $1 === '|' ? $1 : $0 +} /** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ +/** + * @param {Effects} effects + * @param {State} ok + * @param {string} type + * @param {number} [max=Infinity] + * @returns {State} */ -function point$t(type) { - return point - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY; + let size = 0; + return start + /** @type {State} */ - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null + function start(code) { + if (markdownSpace(code)) { + effects.enter(type); + return prefix(code) + } + + return ok(code) + } + /** @type {State} */ + + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code); + return prefix } + + effects.exit(type); + return ok(code) } } /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module unordered-list-marker-style - * @fileoverview - * Warn when the list item marker style of unordered lists violate a given - * style. - * - * Options: `'consistent'`, `'-'`, `'*'`, or `'+'`, default: `'consistent'`. - * - * `'consistent'` detects the first used list style and warns when subsequent - * lists use different styles. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats unordered lists using `-` (hyphen-minus) by default. - * Pass - * [`bullet: '*'` or `bullet: '+'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsbullet) - * to use `*` (asterisk) or `+` (plus sign) instead. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * By default (`'consistent'`), if the file uses only one marker, - * that’s OK. - * - * * Foo - * * Bar - * * Baz - * - * Ordered lists are not affected. - * - * 1. Foo - * 2. Bar - * 3. Baz - * - * @example - * {"name": "ok.md", "setting": "*"} - * - * * Foo - * - * @example - * {"name": "ok.md", "setting": "-"} - * - * - Foo - * - * @example - * {"name": "ok.md", "setting": "+"} - * - * + Foo - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * * Foo - * - Bar - * + Baz - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 2:1-2:6: Marker style should be `*` - * 3:1-3:6: Marker style should be `*` - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} - * - * 1:1: Incorrect unordered list item marker style `💩`: use either `'-'`, `'*'`, or `'+'` + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token */ -const markers = new Set(['-', '*', '+']); +/** @type {Extension} */ +const gfmTable = { + flow: { + null: { + tokenize: tokenizeTable, + resolve: resolveTable + } + } +}; +const setextUnderlineMini = { + tokenize: tokenizeSetextUnderlineMini, + partial: true +}; +const nextPrefixedOrBlank = { + tokenize: tokenizeNextPrefixedOrBlank, + partial: true +}; +/** @type {Resolver} */ -const remarkLintUnorderedListMarkerStyle = lintRule$F( - 'remark-lint:unordered-list-marker-style', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); +function resolveTable(events, context) { + let index = -1; + /** @type {Token} */ - if (option !== 'consistent' && !markers.has(option)) { - file.fail( - 'Incorrect unordered list item marker style `' + - option + - "`: use either `'-'`, `'*'`, or `'+'`" - ); - } + let token; + /** @type {boolean|undefined} */ - visit$B(tree, 'list', (node) => { - if (node.ordered) return + let inHead; + /** @type {boolean|undefined} */ - let index = -1; + let inDelimiterRow; + /** @type {boolean|undefined} */ - while (++index < node.children.length) { - const child = node.children[index]; + let inRow; + /** @type {Token} */ - if (!generated(child)) { - const marker = /** @type {Marker} */ ( - value - .slice( - pointStart$q(child).offset, - pointStart$q(child.children[0]).offset - ) - .replace(/\[[x ]?]\s*$/i, '') - .replace(/\s/g, '') - ); + let cell; + /** @type {Token} */ - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Marker style should be `' + option + '`', child); - } - } + let content; + /** @type {Token} */ + + let text; + /** @type {number|undefined} */ + + let contentStart; + /** @type {number|undefined} */ + + let contentEnd; + /** @type {number|undefined} */ + + let cellStart; + + while (++index < events.length) { + token = events[index][1]; + + if (inRow) { + if (token.type === 'temporaryTableCellContent') { + contentStart = contentStart || index; + contentEnd = index; } - }); - } -); -// @see https://github.com/nodejs/node/blob/master/doc/guides/doc-style-guide.md + if ( + // Combine separate content parts into one. + (token.type === 'tableCellDivider' || token.type === 'tableRow') && + contentEnd + ) { + content = { + type: 'tableContent', + // @ts-expect-error `contentStart` is defined if `contentEnd` is too. + start: events[contentStart][1].start, + end: events[contentEnd][1].end + }; + text = { + type: 'chunkText', + start: content.start, + end: content.end, + // @ts-expect-error It’s fine. + contentType: 'text' + }; + events.splice( + // @ts-expect-error `contentStart` is defined if `contentEnd` is too. + contentStart, // @ts-expect-error `contentStart` is defined if `contentEnd` is too. + contentEnd - contentStart + 1, + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ); // @ts-expect-error `contentStart` is defined if `contentEnd` is too. -// Add in rules alphabetically -const remarkPresetLintNode = [ - // Leave preset at the top so it can be overridden - remarkPresetLintRecommended, - [remarkLintBlockquoteIndentation, 2], - [remarkLintCheckboxCharacterStyle, { checked: "x", unchecked: " " }], - remarkLintCheckboxContentIndent, - [remarkLintCodeBlockStyle, "fenced"], - remarkLintDefinitionSpacing, - [ - remarkLintFencedCodeFlag, - { - flags: [ - "bash", - "c", - "cjs", - "coffee", - "console", - "cpp", - "diff", - "http", - "js", - "json", - "markdown", - "mjs", - "powershell", - "r", - "text", - ], - }, - ], - [remarkLintFencedCodeMarker, "`"], - [remarkLintFileExtension, "md"], - remarkLintFinalDefinition, - [remarkLintFirstHeadingLevel, 1], - [remarkLintHeadingStyle, "atx"], - [remarkLintListItemIndent, "space"], - remarkLintMaximumLineLength, - remarkLintNoConsecutiveBlankLines, - remarkLintNoFileNameArticles, - remarkLintNoFileNameConsecutiveDashes, - remarkLintNofileNameOuterDashes, - remarkLintNoHeadingIndent, - remarkLintNoMultipleToplevelHeadings, - remarkLintNoShellDollars, - remarkLintNoTableIndentation, - remarkLintNoTabs, - remarkLintNoTrailingSpaces, - remarkLintNodejsLinks, - remarkLintNodejsYamlComments, - [ - remarkLintProhibitedStrings, - [ - { yes: "End-of-Life" }, - { yes: "GitHub" }, - { no: "hostname", yes: "host name" }, - { yes: "JavaScript" }, - { no: "[Ll]ong[ -][Tt]erm [Ss]upport", yes: "Long Term Support" }, - { no: "Node", yes: "Node.js", ignoreNextTo: "-API" }, - { yes: "Node.js" }, - { no: "Node[Jj][Ss]", yes: "Node.js" }, - { no: "Node\\.js's?", yes: "the Node.js" }, - { no: "[Nn]ote that", yes: "" }, - { yes: "RFC" }, - { no: "[Rr][Ff][Cc]\\d+", yes: "RFC " }, - { yes: "Unix" }, - { yes: "V8" }, - ], - ], - remarkLintRuleStyle, - [remarkLintStrongMarker, "*"], - [remarkLintTableCellPadding, "padded"], - remarkLintTablePipes, - [remarkLintUnorderedListMarkerStyle, "*"], -]; + index -= contentEnd - contentStart - 3; + contentStart = undefined; + contentEnd = undefined; + } + } -var remarkPresetLintNode$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': remarkPresetLintNode -}); + if ( + events[index][0] === 'exit' && + cellStart && + cellStart + 1 < index && + (token.type === 'tableCellDivider' || + (token.type === 'tableRow' && + (cellStart + 3 < index || + events[cellStart][1].type !== 'whitespace'))) + ) { + cell = { + type: inDelimiterRow + ? 'tableDelimiter' + : inHead + ? 'tableHeader' + : 'tableData', + start: events[cellStart][1].start, + end: events[index][1].end + }; + events.splice(index + (token.type === 'tableCellDivider' ? 1 : 0), 0, [ + 'exit', + cell, + context + ]); + events.splice(cellStart, 0, ['enter', cell, context]); + index += 2; + cellStart = index + 1; + } + + if (token.type === 'tableRow') { + inRow = events[index][0] === 'enter'; + + if (inRow) { + cellStart = index + 1; + } + } + + if (token.type === 'tableDelimiterRow') { + inDelimiterRow = events[index][0] === 'enter'; + + if (inDelimiterRow) { + cellStart = index + 1; + } + } + + if (token.type === 'tableHead') { + inHead = events[index][0] === 'enter'; + } + } + + return events +} +/** @type {Tokenizer} */ -var www = {tokenize: tokenizeWww}; -var http = {tokenize: tokenizeHttp}; -var domain = {tokenize: tokenizeDomain}; -var path$1 = {tokenize: tokenizePath}; -var punctuation = {tokenize: tokenizePunctuation}; -var domainPunctuation = {tokenize: tokenizeDomainPunctuation}; -var paren = {tokenize: tokenizeParen}; -var namedCharacterReference = {tokenize: tokenizeNamedCharacterReference}; - -var wwwAutolink = {tokenize: tokenizeWwwAutolink, previous: previous$1}; -var httpAutolink = {tokenize: tokenizeHttpAutolink, previous: previous$1}; -var emailAutolink = {tokenize: tokenizeEmailAutolink, previous: previous$1}; - -var text$4 = {}; - -// Export hooked constructs. -var text_1$3 = text$4; - -// `0` -var code$2 = 48; - -// While the code is smaller than `{`. -while (code$2 < 123) { - text$4[code$2] = emailAutolink; - code$2++; - // Jump from `:` -> `A` - if (code$2 === 58) code$2 = 65; - // Jump from `[` -> `a` - else if (code$2 === 91) code$2 = 97; -} - -// `+` -text$4[43] = emailAutolink; -// `-` -text$4[45] = emailAutolink; -// `.` -text$4[46] = emailAutolink; -// `_` -text$4[95] = emailAutolink; -// `h`. -text$4[72] = [emailAutolink, httpAutolink]; -text$4[104] = [emailAutolink, httpAutolink]; -// `w`. -text$4[87] = [emailAutolink, wwwAutolink]; -text$4[119] = [emailAutolink, wwwAutolink]; +function tokenizeTable(effects, ok, nok) { + const self = this; + /** @type {Align[]} */ -function tokenizeEmailAutolink(effects, ok, nok) { - var self = this; - var hasDot; + const align = []; + let tableHeaderCount = 0; + /** @type {boolean|undefined} */ + let seenDelimiter; + /** @type {boolean|undefined} */ + + let hasDash; return start + /** @type {State} */ function start(code) { - /* istanbul ignore next - hooks. */ - if (!gfmAtext(code) || !previous$1(self.previous)) { - return nok(code) - } - - effects.enter('literalAutolink'); - effects.enter('literalAutolinkEmail'); - return atext(code) - } + // @ts-expect-error Custom. + effects.enter('table')._align = align; + effects.enter('tableHead'); + effects.enter('tableRow'); // If we start with a pipe, we open a cell marker. - function atext(code) { - if (gfmAtext(code)) { - effects.consume(code); - return atext + if (code === 124) { + return cellDividerHead(code) } - // `@` - if (code === 64) { - effects.consume(code); - return label - } + tableHeaderCount++; + effects.enter('temporaryTableCellContent'); // Can’t be space or eols at the start of a construct, so we’re in a cell. - return nok(code) + return inCellContentHead(code) } + /** @type {State} */ - function label(code) { - // `.` - if (code === 46) { - return effects.check(punctuation, done, dotContinuation)(code) - } + function cellDividerHead(code) { + effects.enter('tableCellDivider'); + effects.consume(code); + effects.exit('tableCellDivider'); + seenDelimiter = true; + return cellBreakHead + } + /** @type {State} */ - if ( - // `-` - code === 45 || - // `_` - code === 95 - ) { - return effects.check(punctuation, nok, dashOrUnderscoreContinuation)(code) + function cellBreakHead(code) { + if (code === null || markdownLineEnding(code)) { + return atRowEndHead(code) } - if (asciiAlphanumeric_1(code)) { + if (markdownSpace(code)) { + effects.enter('whitespace'); effects.consume(code); - return label + return inWhitespaceHead } - return done(code) - } + if (seenDelimiter) { + seenDelimiter = undefined; + tableHeaderCount++; + } - function dotContinuation(code) { - effects.consume(code); - hasDot = true; - return label - } + if (code === 124) { + return cellDividerHead(code) + } // Anything else is cell content. - function dashOrUnderscoreContinuation(code) { - effects.consume(code); - return afterDashOrUnderscore + effects.enter('temporaryTableCellContent'); + return inCellContentHead(code) } + /** @type {State} */ - function afterDashOrUnderscore(code) { - // `.` - if (code === 46) { - return effects.check(punctuation, nok, dotContinuation)(code) + function inWhitespaceHead(code) { + if (markdownSpace(code)) { + effects.consume(code); + return inWhitespaceHead } - return label(code) + effects.exit('whitespace'); + return cellBreakHead(code) } + /** @type {State} */ - function done(code) { - if (hasDot) { - effects.exit('literalAutolinkEmail'); - effects.exit('literalAutolink'); - return ok(code) + function inCellContentHead(code) { + // EOF, whitespace, pipe + if (code === null || code === 124 || markdownLineEndingOrSpace(code)) { + effects.exit('temporaryTableCellContent'); + return cellBreakHead(code) } - return nok(code) + effects.consume(code); + return code === 92 ? inCellContentEscapeHead : inCellContentHead } -} + /** @type {State} */ -function tokenizeWwwAutolink(effects, ok, nok) { - var self = this; + function inCellContentEscapeHead(code) { + if (code === 92 || code === 124) { + effects.consume(code); + return inCellContentHead + } // Anything else. - return start + return inCellContentHead(code) + } + /** @type {State} */ - function start(code) { - /* istanbul ignore next - hooks. */ - if ((code !== 87 && code - 32 !== 87) || !previous$1(self.previous)) { + function atRowEndHead(code) { + if (code === null) { return nok(code) } - effects.enter('literalAutolink'); - effects.enter('literalAutolinkWww'); - return effects.check( - www, - effects.attempt(domain, effects.attempt(path$1, done), nok), + effects.exit('tableRow'); + effects.exit('tableHead'); + return effects.attempt( + { + tokenize: tokenizeRowEnd, + partial: true + }, + atDelimiterLineStart, nok )(code) } + /** @type {State} */ - function done(code) { - effects.exit('literalAutolinkWww'); - effects.exit('literalAutolink'); - return ok(code) + function atDelimiterLineStart(code) { + // To do: is the lazy setext thing still needed? + return effects.check( + setextUnderlineMini, + nok, // Support an indent before the delimiter row. + factorySpace(effects, rowStartDelimiter, 'linePrefix', 4) + )(code) } -} - -function tokenizeHttpAutolink(effects, ok, nok) { - var self = this; - - return start + /** @type {State} */ - function start(code) { - /* istanbul ignore next - hooks. */ - if ((code !== 72 && code - 32 !== 72) || !previous$1(self.previous)) { + function rowStartDelimiter(code) { + // If there’s another space, or we’re at the EOL/EOF, exit. + if (code === null || markdownLineEndingOrSpace(code)) { return nok(code) } - effects.enter('literalAutolink'); - effects.enter('literalAutolinkHttp'); - return effects.check( - http, - effects.attempt(domain, effects.attempt(path$1, done), nok), - nok - )(code) - } - - function done(code) { - effects.exit('literalAutolinkHttp'); - effects.exit('literalAutolink'); - return ok(code) + effects.enter('tableDelimiterRow'); + return atDelimiterRowBreak(code) } -} - -function tokenizeHttp(effects, ok, nok) { - return start + /** @type {State} */ - function start(code) { - // Assume a `h`. - effects.consume(code); - return t1 - } + function atDelimiterRowBreak(code) { + if (code === null || markdownLineEnding(code)) { + return rowEndDelimiter(code) + } - function t1(code) { - // `t` - if (code === 84 || code - 32 === 84) { + if (markdownSpace(code)) { + effects.enter('whitespace'); effects.consume(code); - return t2 + return inWhitespaceDelimiter } - return nok(code) - } - - function t2(code) { - // `t` - if (code === 84 || code - 32 === 84) { + if (code === 45) { + effects.enter('tableDelimiterFiller'); effects.consume(code); - return p + hasDash = true; + align.push(null); + return inFillerDelimiter } - return nok(code) - } + if (code === 58) { + effects.enter('tableDelimiterAlignment'); + effects.consume(code); + effects.exit('tableDelimiterAlignment'); + align.push('left'); + return afterLeftAlignment + } // If we start with a pipe, we open a cell marker. - function p(code) { - // `p` - if (code === 80 || code - 32 === 80) { + if (code === 124) { + effects.enter('tableCellDivider'); effects.consume(code); - return s + effects.exit('tableCellDivider'); + return atDelimiterRowBreak } return nok(code) } + /** @type {State} */ - function s(code) { - // `s` - if (code === 83 || code - 32 === 83) { + function inWhitespaceDelimiter(code) { + if (markdownSpace(code)) { effects.consume(code); - return colon + return inWhitespaceDelimiter } - return colon(code) + effects.exit('whitespace'); + return atDelimiterRowBreak(code) } + /** @type {State} */ - function colon(code) { - // `:` - if (code === 58) { + function inFillerDelimiter(code) { + if (code === 45) { effects.consume(code); - return slash1 + return inFillerDelimiter } - return nok(code) - } + effects.exit('tableDelimiterFiller'); - function slash1(code) { - // `/` - if (code === 47) { + if (code === 58) { + effects.enter('tableDelimiterAlignment'); effects.consume(code); - return slash2 + effects.exit('tableDelimiterAlignment'); + align[align.length - 1] = + align[align.length - 1] === 'left' ? 'center' : 'right'; + return afterRightAlignment } - return nok(code) + return atDelimiterRowBreak(code) } + /** @type {State} */ - function slash2(code) { - // `/` - if (code === 47) { + function afterLeftAlignment(code) { + if (code === 45) { + effects.enter('tableDelimiterFiller'); effects.consume(code); - return after - } + hasDash = true; + return inFillerDelimiter + } // Anything else is not ok. return nok(code) } + /** @type {State} */ - function after(code) { - return asciiControl_1(code) || - unicodeWhitespace_1(code) || - unicodePunctuation_1(code) - ? nok(code) - : ok(code) - } -} - -function tokenizeWww(effects, ok, nok) { - return start - - function start(code) { - // Assume a `w`. - effects.consume(code); - return w2 - } - - function w2(code) { - // `w` - if (code === 87 || code - 32 === 87) { - effects.consume(code); - return w3 + function afterRightAlignment(code) { + if (code === null || markdownLineEnding(code)) { + return rowEndDelimiter(code) } - return nok(code) - } - - function w3(code) { - // `w` - if (code === 87 || code - 32 === 87) { + if (markdownSpace(code)) { + effects.enter('whitespace'); effects.consume(code); - return dot - } - - return nok(code) - } + return inWhitespaceDelimiter + } // `|` - function dot(code) { - // `.` - if (code === 46) { + if (code === 124) { + effects.enter('tableCellDivider'); effects.consume(code); - return after + effects.exit('tableCellDivider'); + return atDelimiterRowBreak } return nok(code) } + /** @type {State} */ - function after(code) { - return code === null || markdownLineEnding_1(code) ? nok(code) : ok(code) - } -} - -function tokenizeDomain(effects, ok, nok) { - var opened; - var hasUnderscoreInLastSegment; - var hasUnderscoreInLastLastSegment; - - return domain - - function domain(code) { - if ( - // `/` - code === 47 || - asciiControl_1(code) || - unicodeWhitespace_1(code) - ) { - return done(code) - } + function rowEndDelimiter(code) { + effects.exit('tableDelimiterRow'); // Exit if there was no dash at all, or if the header cell count is not the + // delimiter cell count. - // `&` - if (code === 38) { - return effects.check( - namedCharacterReference, - done, - punctuationContinuation - )(code) + if (!hasDash || tableHeaderCount !== align.length) { + return nok(code) } - if ( - // `.` - code === 46 || - trailingPunctuation(code) - ) { - return effects.check( - domainPunctuation, - done, - punctuationContinuation - )(code) + if (code === null) { + return tableClose(code) } - open(); - effects.consume(code); - return domain + return effects.check( + nextPrefixedOrBlank, + tableClose, + effects.attempt( + { + tokenize: tokenizeRowEnd, + partial: true + }, + factorySpace(effects, bodyStart, 'linePrefix', 4), + tableClose + ) + )(code) } + /** @type {State} */ - function punctuationContinuation(code) { - // `.` - if (code === 46) { - hasUnderscoreInLastLastSegment = hasUnderscoreInLastSegment; - hasUnderscoreInLastSegment = undefined; - open(); - effects.consume(code); - return domain - } - - // `_` - if (code === 95) hasUnderscoreInLastSegment = true; - - open(); - effects.consume(code); - return domain + function tableClose(code) { + effects.exit('table'); + return ok(code) } + /** @type {State} */ - function open() { - if (!opened) { - effects.enter('literalAutolinkDomain'); - opened = true; - } + function bodyStart(code) { + effects.enter('tableBody'); + return rowStartBody(code) } + /** @type {State} */ - function done(code) { - if ( - opened && - !hasUnderscoreInLastLastSegment && - !hasUnderscoreInLastSegment - ) { - effects.exit('literalAutolinkDomain'); - return ok(code) - } - - return nok(code) - } -} + function rowStartBody(code) { + effects.enter('tableRow'); // If we start with a pipe, we open a cell marker. -function tokenizePath(effects, ok) { - var balance = 0; + if (code === 124) { + return cellDividerBody(code) + } - return start + effects.enter('temporaryTableCellContent'); // Can’t be space or eols at the start of a construct, so we’re in a cell. - function start(code) { - // `/` - return code === 47 ? atPathStart(code) : ok(code) + return inCellContentBody(code) } + /** @type {State} */ - function atPathStart(code) { - effects.enter('literalAutolinkPath'); - return inPath(code) + function cellDividerBody(code) { + effects.enter('tableCellDivider'); + effects.consume(code); + effects.exit('tableCellDivider'); + return cellBreakBody } + /** @type {State} */ - function inPath(code) { - // `&` - if (code === 38) { - return effects.check( - namedCharacterReference, - atPathEnd, - continuedPunctuation - )(code) - } - - // `(` - if (code === 40) { - balance++; - } - - // `)` - if (code === 41) { - return effects.check(paren, parenAtPathEnd, continuedPunctuation)(code) - } - - if (pathEnd(code)) { - return atPathEnd(code) + function cellBreakBody(code) { + if (code === null || markdownLineEnding(code)) { + return atRowEndBody(code) } - if (trailingPunctuation(code)) { - return effects.check(punctuation, atPathEnd, continuedPunctuation)(code) - } + if (markdownSpace(code)) { + effects.enter('whitespace'); + effects.consume(code); + return inWhitespaceBody + } // `|` - effects.consume(code); - return inPath - } + if (code === 124) { + return cellDividerBody(code) + } // Anything else is cell content. - function continuedPunctuation(code) { - effects.consume(code); - return inPath + effects.enter('temporaryTableCellContent'); + return inCellContentBody(code) } + /** @type {State} */ - function parenAtPathEnd(code) { - balance--; - return balance < 0 ? atPathEnd(code) : continuedPunctuation(code) - } + function inWhitespaceBody(code) { + if (markdownSpace(code)) { + effects.consume(code); + return inWhitespaceBody + } - function atPathEnd(code) { - effects.exit('literalAutolinkPath'); - return ok(code) + effects.exit('whitespace'); + return cellBreakBody(code) } -} + /** @type {State} */ -function tokenizeNamedCharacterReference(effects, ok, nok) { - return start + function inCellContentBody(code) { + // EOF, whitespace, pipe + if (code === null || code === 124 || markdownLineEndingOrSpace(code)) { + effects.exit('temporaryTableCellContent'); + return cellBreakBody(code) + } - function start(code) { - // Assume an ampersand. - effects.enter('literalAutolinkCharacterReferenceNamed'); effects.consume(code); - return inside + return code === 92 ? inCellContentEscapeBody : inCellContentBody } + /** @type {State} */ - function inside(code) { - if (asciiAlpha_1(code)) { - effects.consume(code); - return inside - } - - // `;` - if (code === 59) { + function inCellContentEscapeBody(code) { + if (code === 92 || code === 124) { effects.consume(code); - return after - } + return inCellContentBody + } // Anything else. - return nok(code) + return inCellContentBody(code) } + /** @type {State} */ - function after(code) { - // If the named character reference is followed by the end of the path, it’s - // not continued punctuation. - effects.exit('literalAutolinkCharacterReferenceNamed'); - return pathEnd(code) ? ok(code) : nok(code) - } -} + function atRowEndBody(code) { + effects.exit('tableRow'); -function tokenizeParen(effects, ok, nok) { - return start + if (code === null) { + return tableBodyClose(code) + } - function start(code) { - // Assume a right paren. - effects.enter('literalAutolinkParen'); - effects.consume(code); - return after + return effects.check( + nextPrefixedOrBlank, + tableBodyClose, + effects.attempt( + { + tokenize: tokenizeRowEnd, + partial: true + }, + factorySpace(effects, rowStartBody, 'linePrefix', 4), + tableBodyClose + ) + )(code) } + /** @type {State} */ - function after(code) { - // If the punctuation marker is followed by the end of the path, it’s not - // continued punctuation. - effects.exit('literalAutolinkParen'); - return pathEnd(code) || - // `)` - code === 41 - ? ok(code) - : nok(code) + function tableBodyClose(code) { + effects.exit('tableBody'); + return tableClose(code) } -} + /** @type {Tokenizer} */ -function tokenizePunctuation(effects, ok, nok) { - return start + function tokenizeRowEnd(effects, ok, nok) { + return start + /** @type {State} */ - function start(code) { - effects.enter('literalAutolinkPunctuation'); - // Always a valid trailing punctuation marker. - effects.consume(code); - return after - } + function start(code) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return lineStart + } + /** @type {State} */ - function after(code) { - // If the punctuation marker is followed by the end of the path, it’s not - // continued punctuation. - effects.exit('literalAutolinkPunctuation'); - return pathEnd(code) ? ok(code) : nok(code) + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } } -} +} // Based on micromark, but that won’t work as we’re in a table, and that expects +// content. +// -function tokenizeDomainPunctuation(effects, ok, nok) { +/** @type {Tokenizer} */ + +function tokenizeSetextUnderlineMini(effects, ok, nok) { return start + /** @type {State} */ function start(code) { - effects.enter('literalAutolinkPunctuation'); - // Always a valid trailing punctuation marker. - effects.consume(code); - return after - } - - function after(code) { - // Check the next. - if (trailingPunctuation(code)) { - effects.consume(code); - return after + if (code !== 45) { + return nok(code) } - // If the punctuation marker is followed by the end of the path, it’s not - // continued punctuation. - effects.exit('literalAutolinkPunctuation'); - return pathEnd(code) ? ok(code) : nok(code) + effects.enter('setextUnderline'); + return sequence(code) } -} - -function trailingPunctuation(code) { - return ( - // `!` - code === 33 || - // `"` - code === 34 || - // `'` - code === 39 || - // `)` - code === 41 || - // `*` - code === 42 || - // `,` - code === 44 || - // `.` - code === 46 || - // `:` - code === 58 || - // `;` - code === 59 || - // `<` - code === 60 || - // `?` - code === 63 || - // `_`. - code === 95 || - // `~` - code === 126 - ) -} - -function pathEnd(code) { - return ( - // EOF. - code === null || - // CR, LF, CRLF, HT, VS. - code < 0 || - // Space. - code === 32 || - // `<` - code === 60 - ) -} - -function gfmAtext(code) { - return ( - // `+` - code === 43 || - // `-` - code === 45 || - // `.` - code === 46 || - // `_` - code === 95 || - asciiAlphanumeric_1(code) - ) -} + /** @type {State} */ -function previous$1(code) { - return ( - // EOF. - code === null || - // CR, LF, CRLF, HT, VS. - code < 0 || - // Space. - code === 32 || - // `(` - code === 40 || - // `*` - code === 42 || - // `_`. - code === 95 || - // `~` - code === 126 - ) -} + function sequence(code) { + if (code === 45) { + effects.consume(code); + return sequence + } -var syntax = { - text: text_1$3 -}; + return whitespace(code) + } + /** @type {State} */ -var micromarkExtensionGfmAutolinkLiteral = syntax; + function whitespace(code) { + if (code === null || markdownLineEnding(code)) { + return ok(code) + } -var micromarkExtensionGfmStrikethrough = create$2; + if (markdownSpace(code)) { + effects.consume(code); + return whitespace + } + return nok(code) + } +} +/** @type {Tokenizer} */ +function tokenizeNextPrefixedOrBlank(effects, ok, nok) { + let size = 0; + return start + /** @type {State} */ + function start(code) { + // This is a check, so we don’t care about tokens, but we open a bogus one + // so we’re valid. + effects.enter('check'); // EOL. + effects.consume(code); + return whitespace + } + /** @type {State} */ + function whitespace(code) { + if (code === -1 || code === 32) { + effects.consume(code); + size++; + return size === 4 ? ok : whitespace + } // EOF or whitespace -function create$2(options) { - var settings = options || {}; - var single = settings.singleTilde; - var tokenizer = { - tokenize: tokenizeStrikethrough, - resolveAll: resolveAllStrikethrough - }; + if (code === null || markdownLineEndingOrSpace(code)) { + return ok(code) + } // Anything else. - if (single === null || single === undefined) { - single = true; + return nok(code) } +} - return {text: {126: tokenizer}, insideSpan: {null: tokenizer}} - - // Take events and resolve strikethrough. - function resolveAllStrikethrough(events, context) { - var index = -1; - var strikethrough; - var text; - var open; - var nextEvents; +/** + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').CompileContext} CompileContext + */ - // Walk through all events. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'strikethroughSequenceTemporary' && - events[index][1]._close - ) { - open = index; +/** + * An opening or closing tag, followed by a case-insensitive specific tag name, + * followed by HTML whitespace, a greater than, or a slash. + */ +const reFlow = + /<(\/?)(iframe|noembed|noframes|plaintext|script|style|title|textarea|xmp)(?=[\t\n\f\r />])/gi; - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'strikethroughSequenceTemporary' && - events[open][1]._open && - // If the sizes are the same: - events[index][1].end.offset - events[index][1].start.offset === - events[open][1].end.offset - events[open][1].start.offset - ) { - events[index][1].type = 'strikethroughSequence'; - events[open][1].type = 'strikethroughSequence'; +/** + * As HTML (text) parses tags separately (and v. strictly), we don’t need to be + * global. + */ +const reText = new RegExp('^' + reFlow.source, 'i'); - strikethrough = { - type: 'strikethrough', - start: shallow_1(events[open][1].start), - end: shallow_1(events[index][1].end) - }; +/** @type {HtmlExtension} */ +const gfmTagfilterHtml = { + exit: { + htmlFlowData(token) { + exitHtmlData.call(this, token, reFlow); + }, + htmlTextData(token) { + exitHtmlData.call(this, token, reText); + } + } +}; - text = { - type: 'strikethroughText', - start: shallow_1(events[open][1].end), - end: shallow_1(events[index][1].start) - }; +/** + * @this {CompileContext} + * @param {Token} token + * @param {RegExp} filter + */ +function exitHtmlData(token, filter) { + let value = this.sliceSerialize(token); - // Opening. - nextEvents = [ - ['enter', strikethrough, context], - ['enter', events[open][1], context], - ['exit', events[open][1], context], - ['enter', text, context] - ]; + if (this.options.allowDangerousHtml) { + value = value.replace(filter, '<$1$2'); + } - // Between. - chunkedSplice_1( - nextEvents, - nextEvents.length, - 0, - resolveAll_1( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ); + this.raw(this.encode(value)); +} - // Closing. - chunkedSplice_1(nextEvents, nextEvents.length, 0, [ - ['exit', text, context], - ['enter', events[index][1], context], - ['exit', events[index][1], context], - ['exit', strikethrough, context] - ]); +/** + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + */ - chunkedSplice_1(events, open - 1, index - open + 3, nextEvents); +/** @type {HtmlExtension} */ +const gfmTaskListItemHtml = { + enter: { + taskListCheck() { + this.tag(''); + }, - index = open + nextEvents.length - 2; - break - } - } - } + taskListCheckValueChecked() { + this.tag('checked="" '); } + } +}; - return removeRemainingSequences(events) +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Code} Code + */ +const tasklistCheck = { + tokenize: tokenizeTasklistCheck +}; +const gfmTaskListItem = { + text: { + [91]: tasklistCheck } +}; +/** @type {Tokenizer} */ - function removeRemainingSequences(events) { - var index = -1; - var length = events.length; +function tokenizeTasklistCheck(effects, ok, nok) { + const self = this; + return open + /** @type {State} */ - while (++index < length) { - if (events[index][1].type === 'strikethroughSequenceTemporary') { - events[index][1].type = 'data'; - } + function open(code) { + if ( + // Exit if there’s stuff before. + self.previous !== null || // Exit if not in the first content that is the first child of a list + // item. + !self._gfmTasklistFirstContentOfListItem + ) { + return nok(code) } - return events + effects.enter('taskListCheck'); + effects.enter('taskListCheckMarker'); + effects.consume(code); + effects.exit('taskListCheckMarker'); + return inside } + /** @type {State} */ - function tokenizeStrikethrough(effects, ok, nok) { - var previous = this.previous; - var events = this.events; - var size = 0; + function inside(code) { + if (markdownSpace(code)) { + effects.enter('taskListCheckValueUnchecked'); + effects.consume(code); + effects.exit('taskListCheckValueUnchecked'); + return close + } - return start + if (code === 88 || code === 120) { + effects.enter('taskListCheckValueChecked'); + effects.consume(code); + effects.exit('taskListCheckValueChecked'); + return close + } - function start(code) { - if ( - code !== 126 || - (previous === 126 && - events[events.length - 1][1].type !== 'characterEscape') - ) { - return nok(code) - } + return nok(code) + } + /** @type {State} */ - effects.enter('strikethroughSequenceTemporary'); - return more(code) + function close(code) { + if (code === 93) { + effects.enter('taskListCheckMarker'); + effects.consume(code); + effects.exit('taskListCheckMarker'); + effects.exit('taskListCheck'); + return effects.check( + { + tokenize: spaceThenNonSpace + }, + ok, + nok + ) } - function more(code) { - var before = classifyCharacter_1(previous); - var token; - var after; + return nok(code) + } +} +/** @type {Tokenizer} */ - if (code === 126) { - // If this is the third marker, exit. - if (size > 1) return nok(code) - effects.consume(code); - size++; - return more - } +function spaceThenNonSpace(effects, ok, nok) { + const self = this; + return factorySpace(effects, after, 'whitespace') + /** @type {State} */ - if (size < 2 && !single) return nok(code) - token = effects.exit('strikethroughSequenceTemporary'); - after = classifyCharacter_1(code); - token._open = !after || (after === 2 && before); - token._close = !before || (before === 2 && after); - return ok(code) - } + function after(code) { + const tail = self.events[self.events.length - 1]; + return tail && + tail[1].type === 'whitespace' && + code !== null && + !markdownLineEndingOrSpace(code) + ? ok(code) + : nok(code) } } -var flow$3 = { - null: {tokenize: tokenizeTable, resolve: resolveTable, interruptible: true} -}; +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options + */ +/** + * Support GFM or markdown on github.com. + * + * @param {Options} [options] + * @returns {Extension} + */ +function gfm$1(options) { + return combineExtensions([ + gfmAutolinkLiteral, + gfmStrikethrough(options), + gfmTable, + gfmTaskListItem + ]) +} + +/** @type {HtmlExtension} */ +combineHtmlExtensions([ + gfmAutolinkLiteralHtml, + gfmStrikethroughHtml, + gfmTableHtml, + gfmTagfilterHtml, + gfmTaskListItemHtml +]); +/** + * Get the total count of `character` in `value`. + * + * @param {any} value Content, coerced to string + * @param {string} character Single character to look for + * @return {number} Number of times `character` occurred in `value`. + */ +function ccount(value, character) { + var source = String(value); + var count = 0; + var index; -var setextUnderlineMini = {tokenize: tokenizeSetextUnderlineMini, partial: true}; -var nextPrefixedOrBlank = {tokenize: tokenizeNextPrefixedOrBlank, partial: true}; + if (typeof character !== 'string') { + throw new Error('Expected character') + } -function resolveTable(events, context) { - var length = events.length; - var index = -1; - var token; - var inHead; - var inDelimiterRow; - var inRow; - var cell; - var content; - var text; - var contentStart; - var contentEnd; - var cellStart; + index = source.indexOf(character); - while (++index < length) { - token = events[index][1]; + while (index !== -1) { + count++; + index = source.indexOf(character, index + character.length); + } - if (inRow) { - if (token.type === 'temporaryTableCellContent') { - contentStart = contentStart || index; - contentEnd = index; - } + return count +} - if ( - // Combine separate content parts into one. - (token.type === 'tableCellDivider' || token.type === 'tableRow') && - contentEnd - ) { - content = { - type: 'tableContent', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - }; - text = { - type: 'chunkText', - start: content.start, - end: content.end, - contentType: 'text' - }; +function escapeStringRegexp(string) { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } - events.splice( - contentStart, - contentEnd - contentStart + 1, - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ); - index -= contentEnd - contentStart - 3; - length = events.length; - contentStart = undefined; - contentEnd = undefined; - } - } + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a `\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); +} - if ( - events[index][0] === 'exit' && - (token.type === 'tableCellDivider' || token.type === 'tableRow') && - cellStart && - cellStart + 1 < index - ) { - cell = { - type: inDelimiterRow - ? 'tableDelimiter' - : inHead - ? 'tableHeader' - : 'tableData', - start: events[cellStart][1].start, - end: events[index][1].end - }; - events.splice(index + (token.type === 'tableCellDivider' ? 1 : 0), 0, [ - 'exit', - cell, - context - ]); - events.splice(cellStart, 0, ['enter', cell, context]); - index += 2; - length = events.length; - cellStart = index + 1; - } +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * + * @typedef {string} Type + * @typedef {Object} Props + * + * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + */ - if (token.type === 'tableRow') { - inRow = events[index][0] === 'enter'; +const convert = + /** + * @type {( + * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & + * ((test?: Test) => AssertAnything) + * )} + */ + ( + /** + * Generate an assertion from a check. + * @param {Test} [test] + * When nullish, checks if `node` is a `Node`. + * When `string`, works like passing `function (node) {return node.type === test}`. + * When `function` checks if function passed the node is true. + * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. + * When `array`, checks any one of the subtests pass. + * @returns {AssertAnything} + */ + function (test) { + if (test === undefined || test === null) { + return ok + } - if (inRow) { - cellStart = index + 1; + if (typeof test === 'string') { + return typeFactory(test) } - } - if (token.type === 'tableDelimiterRow') { - inDelimiterRow = events[index][0] === 'enter'; + if (typeof test === 'object') { + return Array.isArray(test) ? anyFactory(test) : propsFactory(test) + } - if (inDelimiterRow) { - cellStart = index + 1; + if (typeof test === 'function') { + return castFactory(test) } - } - if (token.type === 'tableHead') { - inHead = events[index][0] === 'enter'; + throw new Error('Expected function, string, or object as test') } - } - - return events -} - -function tokenizeTable(effects, ok, nok) { - var align = []; - var tableHeaderCount = 0; - var seenDelimiter; - var hasDash; + ); +/** + * @param {Array.} tests + * @returns {AssertAnything} + */ +function anyFactory(tests) { + /** @type {Array.} */ + const checks = []; + let index = -1; - return start + while (++index < tests.length) { + checks[index] = convert(tests[index]); + } - function start(code) { - /* istanbul ignore if - used to be passed in beta micromark versions. */ - if (code === null || code === -5 || code === -4 || code === -3) { - return nok(code) - } + return castFactory(any) - effects.enter('table')._align = align; - effects.enter('tableHead'); - effects.enter('tableRow'); + /** + * @this {unknown} + * @param {unknown[]} parameters + * @returns {boolean} + */ + function any(...parameters) { + let index = -1; - // If we start with a pipe, we open a cell marker. - if (code === 124) { - return cellDividerHead(code) + while (++index < checks.length) { + if (checks[index].call(this, ...parameters)) return true } - tableHeaderCount++; - effects.enter('temporaryTableCellContent'); - // Can’t be space or eols at the start of a construct, so we’re in a cell. - return inCellContentHead(code) + return false } +} - function cellDividerHead(code) { - // Always a pipe. - effects.enter('tableCellDivider'); - effects.consume(code); - effects.exit('tableCellDivider'); - seenDelimiter = true; - return cellBreakHead - } +/** + * Utility to assert each property in `test` is represented in `node`, and each + * values are strictly equal. + * + * @param {Props} check + * @returns {AssertAnything} + */ +function propsFactory(check) { + return castFactory(all) - function cellBreakHead(code) { - // EOF, CR, LF, CRLF. - if (code === null || code === -5 || code === -4 || code === -3) { - return atRowEndHead(code) - } + /** + * @param {Node} node + * @returns {boolean} + */ + function all(node) { + /** @type {string} */ + let key; - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.enter('whitespace'); - effects.consume(code); - return inWhitespaceHead + for (key in check) { + // @ts-expect-error: hush, it sure works as an index. + if (node[key] !== check[key]) return false } - if (seenDelimiter) { - seenDelimiter = undefined; - tableHeaderCount++; - } + return true + } +} - // `|` - if (code === 124) { - return cellDividerHead(code) - } +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * + * @param {Type} check + * @returns {AssertAnything} + */ +function typeFactory(check) { + return castFactory(type) - // Anything else is cell content. - effects.enter('temporaryTableCellContent'); - return inCellContentHead(code) + /** + * @param {Node} node + */ + function type(node) { + return node && node.type === check } +} - function inWhitespaceHead(code) { - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.consume(code); - return inWhitespaceHead - } +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * @param {TestFunctionAnything} check + * @returns {AssertAnything} + */ +function castFactory(check) { + return assertion - effects.exit('whitespace'); - return cellBreakHead(code) + /** + * @this {unknown} + * @param {Array.} parameters + * @returns {boolean} + */ + function assertion(...parameters) { + // @ts-expect-error: spreading is fine. + return Boolean(check.call(this, ...parameters)) } +} - function inCellContentHead(code) { - // EOF, whitespace, pipe - if (code === null || code < 0 || code === 32 || code === 124) { - effects.exit('temporaryTableCellContent'); - return cellBreakHead(code) - } +// Utility to return true. +function ok() { + return true +} - effects.consume(code); - // `\` - return code === 92 ? inCellContentEscapeHead : inCellContentHead - } +/** + * @param {string} d + * @returns {string} + */ +function color(d) { + return '\u001B[33m' + d + '\u001B[39m' +} - function inCellContentEscapeHead(code) { - // `\` or `|` - if (code === 92 || code === 124) { - effects.consume(code); - return inCellContentHead - } +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ + +/** + * Continue traversing as normal + */ +const CONTINUE = true; +/** + * Do not traverse this node’s children + */ +const SKIP = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT = false; + +const visitParents = + /** + * @type {( + * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) + * )} + */ + ( + /** + * Visit children of tree which pass a test + * + * @param {Node} tree Abstract syntax tree to walk + * @param {Test} test test Test node + * @param {Visitor} visitor Function to run for each node + * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-ignore no visitor given, so `visitor` is test. + visitor = test; + test = null; + } + + var is = convert(test); + var step = reverse ? -1 : 1; - // Anything else. - return inCellContentHead(code) - } + factory(tree, null, [])(); - function atRowEndHead(code) { - if (code === null) { - return nok(code) - } + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + var value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string} */ + var name; - effects.exit('tableRow'); - effects.exit('tableHead'); + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; - // Always a line ending. - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } - // If a setext heading, exit. - return effects.check( - setextUnderlineMini, - nok, - // Support an indent before the delimiter row. - factorySpace(effects, rowStartDelimiter, 'linePrefix', 4) - ) - } + return visit - function rowStartDelimiter(code) { - // If there’s another space, or we’re at the EOL/EOF, exit. - if (code === null || code < 0 || code === 32) { - return nok(code) - } + function visit() { + /** @type {ActionTuple} */ + var result = []; + /** @type {ActionTuple} */ + var subresult; + /** @type {number} */ + var offset; + /** @type {Array.} */ + var grandparents; - effects.enter('tableDelimiterRow'); - return atDelimiterRowBreak(code) - } + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult(visitor(node, parents)); - function atDelimiterRowBreak(code) { - // EOF, CR, LF, CRLF. - if (code === null || code === -5 || code === -4 || code === -3) { - return rowEndDelimiter(code) - } + if (result[0] === EXIT) { + return result + } + } - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.enter('whitespace'); - effects.consume(code); - return inWhitespaceDelimiter - } + if (node.children && result[0] !== SKIP) { + // @ts-ignore looks like a parent. + offset = (reverse ? node.children.length : -1) + step; + // @ts-ignore looks like a parent. + grandparents = parents.concat(node); - // `-` - if (code === 45) { - effects.enter('tableDelimiterFiller'); - effects.consume(code); - hasDash = true; - align.push(null); - return inFillerDelimiter - } + // @ts-ignore looks like a parent. + while (offset > -1 && offset < node.children.length) { + subresult = factory(node.children[offset], offset, grandparents)(); - // `:` - if (code === 58) { - effects.enter('tableDelimiterAlignment'); - effects.consume(code); - effects.exit('tableDelimiterAlignment'); - align.push('left'); - return afterLeftAlignment - } + if (subresult[0] === EXIT) { + return subresult + } - // If we start with a pipe, we open a cell marker. - if (code === 124) { - effects.enter('tableCellDivider'); - effects.consume(code); - effects.exit('tableCellDivider'); - return atDelimiterRowBreak + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } + + return result + } + } } + ); - return nok(code) +/** + * @param {VisitorResult} value + * @returns {ActionTuple} + */ +function toResult(value) { + if (Array.isArray(value)) { + return value } - function inWhitespaceDelimiter(code) { - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.consume(code); - return inWhitespaceDelimiter - } - - effects.exit('whitespace'); - return atDelimiterRowBreak(code) + if (typeof value === 'number') { + return [CONTINUE, value] } - function inFillerDelimiter(code) { - // `-` - if (code === 45) { - effects.consume(code); - return inFillerDelimiter - } + return [value] +} - effects.exit('tableDelimiterFiller'); +/** + * @typedef Options Configuration. + * @property {Test} [ignore] `unist-util-is` test used to assert parents + * + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').Text} Text + * @typedef {Content|Root} Node + * @typedef {Extract} Parent + * + * @typedef {import('unist-util-visit-parents').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + * + * @typedef RegExpMatchObject + * @property {number} index + * @property {string} input + * + * @typedef {string|RegExp} Find + * @typedef {string|ReplaceFunction} Replace + * + * @typedef {[Find, Replace]} FindAndReplaceTuple + * @typedef {Object.} FindAndReplaceSchema + * @typedef {Array.} FindAndReplaceList + * + * @typedef {[RegExp, ReplaceFunction]} Pair + * @typedef {Array.} Pairs + */ - // `:` - if (code === 58) { - effects.enter('tableDelimiterAlignment'); - effects.consume(code); - effects.exit('tableDelimiterAlignment'); +const own = {}.hasOwnProperty; - align[align.length - 1] = - align[align.length - 1] === 'left' ? 'center' : 'right'; +/** + * @param tree mdast tree + * @param find Value to find and remove. When `string`, escaped and made into a global `RegExp` + * @param [replace] Value to insert. + * * When `string`, turned into a Text node. + * * When `Function`, called with the results of calling `RegExp.exec` as + * arguments, in which case it can return a single or a list of `Node`, + * a `string` (which is wrapped in a `Text` node), or `false` to not replace + * @param [options] Configuration. + */ +const findAndReplace = + /** + * @type {( + * ((tree: Node, find: Find, replace?: Replace, options?: Options) => Node) & + * ((tree: Node, schema: FindAndReplaceSchema|FindAndReplaceList, options?: Options) => Node) + * )} + **/ + ( + /** + * @param {Node} tree + * @param {Find|FindAndReplaceSchema|FindAndReplaceList} find + * @param {Replace|Options} [replace] + * @param {Options} [options] + */ + function (tree, find, replace, options) { + /** @type {Options|undefined} */ + let settings; + /** @type {FindAndReplaceSchema|FindAndReplaceList} */ + let schema; + + if (typeof find === 'string' || find instanceof RegExp) { + // @ts-expect-error don’t expect options twice. + schema = [[find, replace]]; + settings = options; + } else { + schema = find; + // @ts-expect-error don’t expect replace twice. + settings = replace; + } - return afterRightAlignment - } + if (!settings) { + settings = {}; + } - return atDelimiterRowBreak(code) - } + const ignored = convert(settings.ignore || []); + const pairs = toPairs(schema); + let pairIndex = -1; - function afterLeftAlignment(code) { - // `-` - if (code === 45) { - effects.enter('tableDelimiterFiller'); - effects.consume(code); - hasDash = true; - return inFillerDelimiter - } + while (++pairIndex < pairs.length) { + visitParents(tree, 'text', visitor); + } - // Anything else is not ok. - return nok(code) - } + return tree - function afterRightAlignment(code) { - // EOF, CR, LF, CRLF. - if (code === null || code === -5 || code === -4 || code === -3) { - return rowEndDelimiter(code) - } + /** @type {import('unist-util-visit-parents').Visitor} */ + function visitor(node, parents) { + let index = -1; + /** @type {Parent|undefined} */ + let grandparent; - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.enter('whitespace'); - effects.consume(code); - return inWhitespaceDelimiter - } + while (++index < parents.length) { + const parent = /** @type {Parent} */ (parents[index]); - // `|` - if (code === 124) { - effects.enter('tableCellDivider'); - effects.consume(code); - effects.exit('tableCellDivider'); - return atDelimiterRowBreak - } + if ( + ignored( + parent, + // @ts-expect-error mdast vs. unist parent. + grandparent ? grandparent.children.indexOf(parent) : undefined, + grandparent + ) + ) { + return + } - return nok(code) - } + grandparent = parent; + } - function rowEndDelimiter(code) { - effects.exit('tableDelimiterRow'); + if (grandparent) { + return handler(node, grandparent) + } + } - // Exit if there was no dash at all, or if the header cell count is not the - // delimiter cell count. - if (!hasDash || tableHeaderCount !== align.length) { - return nok(code) - } + /** + * @param {Text} node + * @param {Parent} parent + * @returns {VisitorResult} + */ + function handler(node, parent) { + const find = pairs[pairIndex][0]; + const replace = pairs[pairIndex][1]; + let start = 0; + // @ts-expect-error: TS is wrong, some of these children can be text. + let index = parent.children.indexOf(node); + /** @type {Array.} */ + let nodes = []; + /** @type {number|undefined} */ + let position; - if (code === null) { - return tableClose(code) - } + find.lastIndex = 0; - return effects.check(nextPrefixedOrBlank, tableClose, tableContinue)(code) - } + let match = find.exec(node.value); - function tableClose(code) { - effects.exit('table'); - return ok(code) - } + while (match) { + position = match.index; + // @ts-expect-error this is perfectly fine, typescript. + let value = replace(...match, { + index: match.index, + input: match.input + }); - function tableContinue(code) { - // Always a line ending. - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - // We checked that it’s not a prefixed or blank line, so we’re certain a - // body is coming, though it may be indented. - return factorySpace(effects, bodyStart, 'linePrefix', 4) - } + if (typeof value === 'string') { + value = value.length > 0 ? {type: 'text', value} : undefined; + } - function bodyStart(code) { - effects.enter('tableBody'); - return rowStartBody(code) - } + if (value !== false) { + if (start !== position) { + nodes.push({ + type: 'text', + value: node.value.slice(start, position) + }); + } - function rowStartBody(code) { - effects.enter('tableRow'); + if (Array.isArray(value)) { + nodes.push(...value); + } else if (value) { + nodes.push(value); + } - // If we start with a pipe, we open a cell marker. - if (code === 124) { - return cellDividerBody(code) - } + start = position + match[0].length; + } - effects.enter('temporaryTableCellContent'); - // Can’t be space or eols at the start of a construct, so we’re in a cell. - return inCellContentBody(code) - } + if (!find.global) { + break + } - function cellDividerBody(code) { - // Always a pipe. - effects.enter('tableCellDivider'); - effects.consume(code); - effects.exit('tableCellDivider'); - return cellBreakBody - } + match = find.exec(node.value); + } - function cellBreakBody(code) { - // EOF, CR, LF, CRLF. - if (code === null || code === -5 || code === -4 || code === -3) { - return atRowEndBody(code) - } + if (position === undefined) { + nodes = [node]; + index--; + } else { + if (start < node.value.length) { + nodes.push({type: 'text', value: node.value.slice(start)}); + } - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.enter('whitespace'); - effects.consume(code); - return inWhitespaceBody - } + parent.children.splice(index, 1, ...nodes); + } - // `|` - if (code === 124) { - return cellDividerBody(code) + return index + nodes.length + 1 + } } + ); - // Anything else is cell content. - effects.enter('temporaryTableCellContent'); - return inCellContentBody(code) - } - - function inWhitespaceBody(code) { - // HT, VS, SP. - if (code === -2 || code === -1 || code === 32) { - effects.consume(code); - return inWhitespaceBody - } +/** + * @param {FindAndReplaceSchema|FindAndReplaceList} schema + * @returns {Pairs} + */ +function toPairs(schema) { + /** @type {Pairs} */ + const result = []; - effects.exit('whitespace'); - return cellBreakBody(code) + if (typeof schema !== 'object') { + throw new TypeError('Expected array or object as schema') } - function inCellContentBody(code) { - // EOF, whitespace, pipe - if (code === null || code < 0 || code === 32 || code === 124) { - effects.exit('temporaryTableCellContent'); - return cellBreakBody(code) - } - - effects.consume(code); - // `\` - return code === 92 ? inCellContentEscapeBody : inCellContentBody - } + if (Array.isArray(schema)) { + let index = -1; - function inCellContentEscapeBody(code) { - // `\` or `|` - if (code === 92 || code === 124) { - effects.consume(code); - return inCellContentBody + while (++index < schema.length) { + result.push([ + toExpression(schema[index][0]), + toFunction(schema[index][1]) + ]); } + } else { + /** @type {string} */ + let key; - // Anything else. - return inCellContentBody(code) - } - - function atRowEndBody(code) { - effects.exit('tableRow'); - - if (code === null) { - return tableBodyClose(code) + for (key in schema) { + if (own.call(schema, key)) { + result.push([toExpression(key), toFunction(schema[key])]); + } } - - return effects.check( - nextPrefixedOrBlank, - tableBodyClose, - tableBodyContinue - )(code) - } - - function tableBodyClose(code) { - effects.exit('tableBody'); - return tableClose(code) } - function tableBodyContinue(code) { - // Always a line ending. - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - // Support an optional prefix, then start a body row. - return factorySpace(effects, rowStartBody, 'linePrefix', 4) - } + return result } -// Based on micromark, but that won’t work as we’re in a table, and that expects -// content. -// -function tokenizeSetextUnderlineMini(effects, ok, nok) { - return start +/** + * @param {Find} find + * @returns {RegExp} + */ +function toExpression(find) { + return typeof find === 'string' ? new RegExp(escapeStringRegexp(find), 'g') : find +} - function start(code) { - // `-` - if (code !== 45) { - return nok(code) - } +/** + * @param {Replace} replace + * @returns {ReplaceFunction} + */ +function toFunction(replace) { + return typeof replace === 'function' ? replace : () => replace +} - effects.enter('setextUnderline'); - return sequence(code) - } +/** + * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension + * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform + * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle + * @typedef {import('mdast-util-to-markdown/lib/types.js').Options} ToMarkdownExtension + * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction + * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject + * @typedef {import('mdast-util-find-and-replace').PhrasingContent} PhrasingContent + */ - function sequence(code) { - if (code === 45) { - effects.consume(code); - return sequence - } +const inConstruct = 'phrasing'; +const notInConstruct = ['autolink', 'link', 'image', 'label']; - return whitespace(code) +/** @type {FromMarkdownExtension} */ +const gfmAutolinkLiteralFromMarkdown = { + transforms: [transformGfmAutolinkLiterals], + enter: { + literalAutolink: enterLiteralAutolink, + literalAutolinkEmail: enterLiteralAutolinkValue, + literalAutolinkHttp: enterLiteralAutolinkValue, + literalAutolinkWww: enterLiteralAutolinkValue + }, + exit: { + literalAutolink: exitLiteralAutolink, + literalAutolinkEmail: exitLiteralAutolinkEmail, + literalAutolinkHttp: exitLiteralAutolinkHttp, + literalAutolinkWww: exitLiteralAutolinkWww } +}; - function whitespace(code) { - if (code === -2 || code === -1 || code === 32) { - effects.consume(code); - return whitespace - } - - if (code === null || code === -5 || code === -4 || code === -3) { - return ok(code) - } +/** @type {ToMarkdownExtension} */ +const gfmAutolinkLiteralToMarkdown = { + unsafe: [ + { + character: '@', + before: '[+\\-.\\w]', + after: '[\\-.\\w]', + inConstruct, + notInConstruct + }, + { + character: '.', + before: '[Ww]', + after: '[\\-.\\w]', + inConstruct, + notInConstruct + }, + {character: ':', before: '[ps]', after: '\\/', inConstruct, notInConstruct} + ] +}; - return nok(code) - } +/** @type {FromMarkdownHandle} */ +function enterLiteralAutolink(token) { + // @ts-expect-error: `null` is fine. + this.enter({type: 'link', title: null, url: '', children: []}, token); } -function tokenizeNextPrefixedOrBlank(effects, ok, nok) { - var size = 0; +/** @type {FromMarkdownHandle} */ +function enterLiteralAutolinkValue(token) { + this.config.enter.autolinkProtocol.call(this, token); +} - return start +/** @type {FromMarkdownHandle} */ +function exitLiteralAutolinkHttp(token) { + this.config.exit.autolinkProtocol.call(this, token); +} - function start(code) { - // This is a check, so we don’t care about tokens, but we open a bogus one - // so we’re valid. - effects.enter('check'); - // EOL. - effects.consume(code); - return whitespace - } +/** @type {FromMarkdownHandle} */ +function exitLiteralAutolinkWww(token) { + this.config.exit.data.call(this, token); + this.stack[this.stack.length - 1].url = 'http://' + this.sliceSerialize(token); +} - function whitespace(code) { - // VS or SP. - if (code === -1 || code === 32) { - effects.consume(code); - size++; - return size === 4 ? ok : whitespace - } +/** @type {FromMarkdownHandle} */ +function exitLiteralAutolinkEmail(token) { + this.config.exit.autolinkEmail.call(this, token); +} - // EOF or whitespace - if (code === null || code < 0) { - return ok(code) - } +/** @type {FromMarkdownHandle} */ +function exitLiteralAutolink(token) { + this.exit(token); +} - // Anything else. - return nok(code) - } +/** @type {FromMarkdownTransform} */ +function transformGfmAutolinkLiterals(tree) { + findAndReplace( + tree, + [ + [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i, findUrl], + [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/, findEmail] + ], + {ignore: ['link', 'linkReference']} + ); } -var syntax$1 = { - flow: flow$3 -}; +/** + * @type {ReplaceFunction} + * @param {string} _ + * @param {string} protocol + * @param {string} domain + * @param {string} path + * @param {RegExpMatchObject} match + */ +// eslint-disable-next-line max-params +function findUrl(_, protocol, domain, path, match) { + let prefix = ''; -var micromarkExtensionGfmTable = syntax$1; + // Not an expected previous character. + if (!previous(match)) { + return false + } -var tasklistCheck = {tokenize: tokenizeTasklistCheck}; + // Treat `www` as part of the domain. + if (/^w/i.test(protocol)) { + domain = protocol + domain; + protocol = ''; + prefix = 'http://'; + } -var text$5 = {91: tasklistCheck}; + if (!isCorrectDomain(domain)) { + return false + } -function tokenizeTasklistCheck(effects, ok, nok) { - var self = this; + const parts = splitUrl(domain + path); - return open + if (!parts[0]) return false - function open(code) { - if ( - // Exit if not `[`. - code !== 91 || - // Exit if there’s stuff before. - self.previous !== null || - // Exit if not in the first content that is the first child of a list - // item. - !self._gfmTasklistFirstContentOfListItem - ) { - return nok(code) - } + /** @type {PhrasingContent} */ + // @ts-expect-error: `null` is fine. + const result = { + type: 'link', + title: null, + url: prefix + protocol + parts[0], + children: [{type: 'text', value: protocol + parts[0]}] + }; - effects.enter('taskListCheck'); - effects.enter('taskListCheckMarker'); - effects.consume(code); - effects.exit('taskListCheckMarker'); - return inside + if (parts[1]) { + return [result, {type: 'text', value: parts[1]}] } - function inside(code) { - // Tab or space. - if (code === -2 || code === 32) { - effects.enter('taskListCheckValueUnchecked'); - effects.consume(code); - effects.exit('taskListCheckValueUnchecked'); - return close - } + return result +} - // Upper- and lower `x`. - if (code === 88 || code === 120) { - effects.enter('taskListCheckValueChecked'); - effects.consume(code); - effects.exit('taskListCheckValueChecked'); - return close - } +/** + * @type {ReplaceFunction} + * @param {string} _ + * @param {string} atext + * @param {string} label + * @param {RegExpMatchObject} match + */ +function findEmail(_, atext, label, match) { + // Not an expected previous character. + if (!previous(match, true) || /[_-]$/.test(label)) { + return false + } - return nok(code) + return { + type: 'link', + // @ts-expect-error: `null` is fine. + title: null, + url: 'mailto:' + atext + '@' + label, + children: [{type: 'text', value: atext + '@' + label}] } +} - function close(code) { - // `]` - if (code === 93) { - effects.enter('taskListCheckMarker'); - effects.consume(code); - effects.exit('taskListCheckMarker'); - effects.exit('taskListCheck'); - return effects.check({tokenize: spaceThenNonSpace}, ok, nok) - } +/** + * @param {string} domain + * @returns {boolean} + */ +function isCorrectDomain(domain) { + const parts = domain.split('.'); - return nok(code) + if ( + parts.length < 2 || + (parts[parts.length - 1] && + (/_/.test(parts[parts.length - 1]) || + !/[a-zA-Z\d]/.test(parts[parts.length - 1]))) || + (parts[parts.length - 2] && + (/_/.test(parts[parts.length - 2]) || + !/[a-zA-Z\d]/.test(parts[parts.length - 2]))) + ) { + return false } + + return true } -function spaceThenNonSpace(effects, ok, nok) { - var self = this; +/** + * @param {string} url + * @returns {[string, string|undefined]} + */ +function splitUrl(url) { + const trailExec = /[!"&'),.:;<>?\]}]+$/.exec(url); + /** @type {number} */ + let closingParenIndex; + /** @type {number} */ + let openingParens; + /** @type {number} */ + let closingParens; + /** @type {string|undefined} */ + let trail; - return factorySpace(effects, after, 'whitespace') + if (trailExec) { + url = url.slice(0, trailExec.index); + trail = trailExec[0]; + closingParenIndex = trail.indexOf(')'); + openingParens = ccount(url, '('); + closingParens = ccount(url, ')'); - function after(code) { - return prefixSize_1(self.events, 'whitespace') && - code !== null && - !markdownLineEndingOrSpace_1(code) - ? ok(code) - : nok(code) + while (closingParenIndex !== -1 && openingParens > closingParens) { + url += trail.slice(0, closingParenIndex + 1); + trail = trail.slice(closingParenIndex + 1); + closingParenIndex = trail.indexOf(')'); + closingParens++; + } } + + return [url, trail] } -var syntax$2 = { - text: text$5 -}; +/** + * @param {RegExpMatchObject} match + * @param {boolean} [email=false] + * @returns {boolean} + */ +function previous(match, email) { + const code = match.input.charCodeAt(match.index - 1); -var micromarkExtensionGfmTaskListItem = syntax$2; + return ( + (match.index === 0 || + unicodeWhitespace(code) || + unicodePunctuation(code)) && + (!email || code !== 47) + ) +} -var syntax$3 = create$3; +/** + * @typedef {import('../types.js').Node} Node + * @typedef {import('../types.js').Parent} Parent + * @typedef {import('../types.js').SafeOptions} SafeOptions + * @typedef {import('../types.js').Context} Context + */ -function create$3(options) { - return combineExtensions_1([micromarkExtensionGfmAutolinkLiteral, micromarkExtensionGfmStrikethrough(options), micromarkExtensionGfmTable, micromarkExtensionGfmTaskListItem]) -} +/** + * @param {Parent} parent + * @param {Context} context + * @param {SafeOptions} safeOptions + * @returns {string} + */ +function containerPhrasing(parent, context, safeOptions) { + const children = parent.children || []; + /** @type {Array.} */ + const results = []; + let index = -1; + let before = safeOptions.before; -var micromarkExtensionGfm = syntax$3; + while (++index < children.length) { + const child = children[index]; + /** @type {string} */ + let after; -var enter = { - literalAutolink: enterLiteralAutolink, - literalAutolinkEmail: enterLiteralAutolinkValue, - literalAutolinkHttp: enterLiteralAutolinkValue, - literalAutolinkWww: enterLiteralAutolinkValue -}; -var exit$1 = { - literalAutolink: exitLiteralAutolink, - literalAutolinkEmail: exitLiteralAutolinkEmail, - literalAutolinkHttp: exitLiteralAutolinkHttp, - literalAutolinkWww: exitLiteralAutolinkWww -}; + if (index + 1 < children.length) { + // @ts-expect-error: hush, it’s actually a `zwitch`. + let handle = context.handle.handlers[children[index + 1].type]; + if (handle && handle.peek) handle = handle.peek; + after = handle + ? handle(children[index + 1], parent, context, { + before: '', + after: '' + }).charAt(0) + : ''; + } else { + after = safeOptions.after; + } -function enterLiteralAutolink(token) { - this.enter({type: 'link', title: null, url: '', children: []}, token); -} + // In some cases, html (text) can be found in phrasing right after an eol. + // When we’d serialize that, in most cases that would be seen as html + // (flow). + // As we can’t escape or so to prevent it from happening, we take a somewhat + // reasonable approach: replace that eol with a space. + // See: + if ( + results.length > 0 && + (before === '\r' || before === '\n') && + child.type === 'html' + ) { + results[results.length - 1] = results[results.length - 1].replace( + /(\r?\n|\r)$/, + ' ' + ); + before = ' '; + } -function enterLiteralAutolinkValue(token) { - this.config.enter.autolinkProtocol.call(this, token); -} + results.push(context.handle(child, parent, context, {before, after})); -function exitLiteralAutolinkHttp(token) { - this.config.exit.autolinkProtocol.call(this, token); -} + before = results[results.length - 1].slice(-1); + } -function exitLiteralAutolinkWww(token) { - this.config.exit.data.call(this, token); - this.stack[this.stack.length - 1].url = 'http://' + this.sliceSerialize(token); + return results.join('') } -function exitLiteralAutolinkEmail(token) { - this.config.exit.autolinkEmail.call(this, token); -} +/** + * @typedef {import('mdast').Delete} Delete + * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension + * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle + * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension + * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle + */ -function exitLiteralAutolink(token) { - this.exit(token); -} +/** @type {FromMarkdownExtension} */ +const gfmStrikethroughFromMarkdown = { + canContainEols: ['delete'], + enter: {strikethrough: enterStrikethrough}, + exit: {strikethrough: exitStrikethrough} +}; -var fromMarkdown$1 = { - enter: enter, - exit: exit$1 +/** @type {ToMarkdownExtension} */ +const gfmStrikethroughToMarkdown = { + unsafe: [{character: '~', inConstruct: 'phrasing'}], + handlers: {delete: handleDelete} }; -var canContainEols = ['delete']; -var enter$1 = {strikethrough: enterStrikethrough}; -var exit$2 = {strikethrough: exitStrikethrough}; +handleDelete.peek = peekDelete; +/** @type {FromMarkdownHandle} */ function enterStrikethrough(token) { this.enter({type: 'delete', children: []}, token); } +/** @type {FromMarkdownHandle} */ function exitStrikethrough(token) { this.exit(token); } -var fromMarkdown$2 = { - canContainEols: canContainEols, - enter: enter$1, - exit: exit$2 -}; - -var enter$2 = { - table: enterTable, - tableData: enterCell, - tableHeader: enterCell, - tableRow: enterRow -}; -var exit_1 = { - codeText: exitCodeText, - table: exitTable, - tableData: exit$3, - tableHeader: exit$3, - tableRow: exit$3 -}; - -function enterTable(token) { - this.enter({type: 'table', align: token._align, children: []}, token); - this.setData('inTable', true); -} - -function exitTable(token) { - this.exit(token); - this.setData('inTable'); -} - -function enterRow(token) { - this.enter({type: 'tableRow', children: []}, token); +/** + * @type {ToMarkdownHandle} + * @param {Delete} node + */ +function handleDelete(node, _, context) { + const exit = context.enter('emphasis'); + const value = containerPhrasing(node, context, {before: '~', after: '~'}); + exit(); + return '~~' + value + '~~' } -function exit$3(token) { - this.exit(token); +/** @type {ToMarkdownHandle} */ +function peekDelete() { + return '~' } -function enterCell(token) { - this.enter({type: 'tableCell', children: []}, token); -} +/** + * @typedef {import('../types.js').Unsafe} Unsafe + */ -// Overwrite the default code text data handler to unescape escaped pipes when -// they are in tables. -function exitCodeText(token) { - var value = this.resume(); +/** + * @param {Unsafe} pattern + * @returns {RegExp} + */ +function patternCompile(pattern) { + if (!pattern._compiled) { + const before = + (pattern.atBreak ? '[\\r\\n][\\t ]*' : '') + + (pattern.before ? '(?:' + pattern.before + ')' : ''); - if (this.getData('inTable')) { - value = value.replace(/\\([\\|])/g, replace); + pattern._compiled = new RegExp( + (before ? '(' + before + ')' : '') + + (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') + + pattern.character + + (pattern.after ? '(?:' + pattern.after + ')' : ''), + 'g' + ); } - this.stack[this.stack.length - 1].value = value; - this.exit(token); -} - -function replace($0, $1) { - // Pipes work, backslashes don’t (but can’t escape pipes). - return $1 === '|' ? $1 : $0 + return pattern._compiled } -var fromMarkdown$3 = { - enter: enter$2, - exit: exit_1 -}; +/** + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('../types.js').Handle} Handle + */ -var exit$4 = { - taskListCheckValueChecked: exitCheck, - taskListCheckValueUnchecked: exitCheck, - paragraph: exitParagraphWithTaskListItem -}; +inlineCode.peek = inlineCodePeek; -function exitCheck(token) { - // We’re always in a paragraph, in a list item. - this.stack[this.stack.length - 2].checked = - token.type === 'taskListCheckValueChecked'; -} +/** + * @type {Handle} + * @param {InlineCode} node + */ +function inlineCode(node, _, context) { + let value = node.value || ''; + let sequence = '`'; + let index = -1; -function exitParagraphWithTaskListItem(token) { - var parent = this.stack[this.stack.length - 2]; - var node = this.stack[this.stack.length - 1]; - var siblings = parent.children; - var head = node.children[0]; - var index = -1; - var firstParaghraph; + // If there is a single grave accent on its own in the code, use a fence of + // two. + // If there are two in a row, use one. + while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) { + sequence += '`'; + } + // If this is not just spaces or eols (tabs don’t count), and either the + // first or last character are a space, eol, or tick, then pad with spaces. if ( - parent && - parent.type === 'listItem' && - typeof parent.checked === 'boolean' && - head && - head.type === 'text' + /[^ \r\n]/.test(value) && + ((/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value)) || /^`|`$/.test(value)) ) { - while (++index < siblings.length) { - if (siblings[index].type === 'paragraph') { - firstParaghraph = siblings[index]; - break - } - } - - if (firstParaghraph === node) { - // Must start with a space or a tab. - head.value = head.value.slice(1); - - if (head.value.length === 0) { - node.children.shift(); - } else { - head.position.start.column++; - head.position.start.offset++; - node.position.start = Object.assign({}, head.position.start); - } - } + value = ' ' + value + ' '; } - this.exit(token); -} - -var fromMarkdown$4 = { - exit: exit$4 -}; - -var own$a = {}.hasOwnProperty; - -var fromMarkdown$5 = configure$4([ - fromMarkdown$1, - fromMarkdown$2, - fromMarkdown$3, - fromMarkdown$4 -]); - -function configure$4(extensions) { - var config = {canContainEols: []}; - var length = extensions.length; - var index = -1; - - while (++index < length) { - extension$3(config, extensions[index]); - } + // We have a potential problem: certain characters after eols could result in + // blocks being seen. + // For example, if someone injected the string `'\n# b'`, then that would + // result in an ATX heading. + // We can’t escape characters in `inlineCode`, but because eols are + // transformed to spaces when going from markdown to HTML anyway, we can swap + // them out. + while (++index < context.unsafe.length) { + const pattern = context.unsafe[index]; + const expression = patternCompile(pattern); + /** @type {RegExpExecArray|null} */ + let match; - return config -} + // Only look for `atBreak`s. + // Btw: note that `atBreak` patterns will always start the regex at LF or + // CR. + if (!pattern.atBreak) continue -function extension$3(config, extension) { - var key; - var left; - var right; + while ((match = expression.exec(value))) { + let position = match.index; - for (key in extension) { - left = own$a.call(config, key) ? config[key] : (config[key] = {}); - right = extension[key]; + // Support CRLF (patterns only look for one of the characters). + if ( + value.charCodeAt(position) === 10 /* `\n` */ && + value.charCodeAt(position - 1) === 13 /* `\r` */ + ) { + position--; + } - if (key === 'canContainEols') { - config[key] = [].concat(left, right); - } else { - Object.assign(left, right); + value = value.slice(0, position) + ' ' + value.slice(match.index + 1); } } -} - -var inConstruct = 'phrasing'; -var notInConstruct = ['autolink', 'link', 'image', 'label']; - -var unsafe$1 = [ - { - character: '@', - before: '[+\\-.\\w]', - after: '[\\-.\\w]', - inConstruct: inConstruct, - notInConstruct: notInConstruct - }, - { - character: '.', - before: '[Ww]', - after: '[\\-.\\w]', - inConstruct: inConstruct, - notInConstruct: notInConstruct - }, - { - character: ':', - before: '[ps]', - after: '\\/', - inConstruct: inConstruct, - notInConstruct: notInConstruct - } -]; - -var toMarkdown$1 = { - unsafe: unsafe$1 -}; - -var unsafe$2 = [{character: '~', inConstruct: 'phrasing'}]; -var handlers = {delete: handleDelete}; - -handleDelete.peek = peekDelete; -function handleDelete(node, _, context) { - var exit = context.enter('emphasis'); - var value = containerPhrasing(node, context, {before: '~', after: '~'}); - exit(); - return '~~' + value + '~~' + return sequence + value + sequence } -function peekDelete() { - return '~' +/** + * @type {Handle} + */ +function inlineCodePeek() { + return '`' } -var toMarkdown$2 = { - unsafe: unsafe$2, - handlers: handlers -}; - -var markdownTable_1 = markdownTable; - -var trailingWhitespace = / +$/; - -// Characters. -var space = ' '; -var lineFeed = '\n'; -var dash$1 = '-'; -var colon$1 = ':'; -var verticalBar = '|'; - -var x = 0; -var C = 67; -var L$1 = 76; -var R = 82; -var c$1 = 99; -var l$1 = 108; -var r = 114; +/** + * @typedef MarkdownTableOptions + * @property {string|null|Array.} [align] + * @property {boolean} [padding=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterEnd=true] + * @property {boolean} [alignDelimiters=true] + * @property {(value: string) => number} [stringLength] + */ -// Create a table from a matrix of strings. +/** + * Create a table from a matrix of strings. + * + * @param {Array.>} table + * @param {MarkdownTableOptions} [options] + * @returns {string} + */ function markdownTable(table, options) { - var settings = options || {}; - var padding = settings.padding !== false; - var start = settings.delimiterStart !== false; - var end = settings.delimiterEnd !== false; - var align = (settings.align || []).concat(); - var alignDelimiters = settings.alignDelimiters !== false; - var alignments = []; - var stringLength = settings.stringLength || defaultStringLength; - var rowIndex = -1; - var rowLength = table.length; - var cellMatrix = []; - var sizeMatrix = []; - var row = []; - var sizes = []; - var longestCellByColumn = []; - var mostCellsPerRow = 0; - var cells; - var columnIndex; - var columnLength; - var largest; - var size; - var cell; - var lines; - var line; - var before; - var after; - var code; + const settings = options || {}; + const align = (settings.align || []).concat(); + const stringLength = settings.stringLength || defaultStringLength; + /** @type {number[]} Character codes as symbols for alignment per column. */ + const alignments = []; + let rowIndex = -1; + /** @type {string[][]} Cells per row. */ + const cellMatrix = []; + /** @type {number[][]} Sizes of each cell per row. */ + const sizeMatrix = []; + /** @type {number[]} */ + const longestCellByColumn = []; + let mostCellsPerRow = 0; + /** @type {number} */ + let columnIndex; + /** @type {string[]} Cells of current row */ + let row; + /** @type {number[]} Sizes of current row */ + let sizes; + /** @type {number} Sizes of current cell */ + let size; + /** @type {string} Current cell */ + let cell; + /** @type {string[]} Chunks of current line. */ + let line; + /** @type {string} */ + let before; + /** @type {string} */ + let after; + /** @type {number} */ + let code; // This is a superfluous loop if we don’t align delimiters, but otherwise we’d // do superfluous work when aligning, so optimize for aligning. - while (++rowIndex < rowLength) { - cells = table[rowIndex]; + while (++rowIndex < table.length) { columnIndex = -1; - columnLength = cells.length; row = []; sizes = []; - if (columnLength > mostCellsPerRow) { - mostCellsPerRow = columnLength; + if (table[rowIndex].length > mostCellsPerRow) { + mostCellsPerRow = table[rowIndex].length; } - while (++columnIndex < columnLength) { - cell = serialize(cells[columnIndex]); + while (++columnIndex < table[rowIndex].length) { + cell = serialize(table[rowIndex][columnIndex]); - if (alignDelimiters === true) { + if (settings.alignDelimiters !== false) { size = stringLength(cell); sizes[columnIndex] = size; - largest = longestCellByColumn[columnIndex]; - - if (largest === undefined || size > largest) { + if ( + longestCellByColumn[columnIndex] === undefined || + size > longestCellByColumn[columnIndex] + ) { longestCellByColumn[columnIndex] = size; } } @@ -76543,51 +84725,50 @@ function markdownTable(table, options) { // Figure out which alignments to use. columnIndex = -1; - columnLength = mostCellsPerRow; if (typeof align === 'object' && 'length' in align) { - while (++columnIndex < columnLength) { + while (++columnIndex < mostCellsPerRow) { alignments[columnIndex] = toAlignment(align[columnIndex]); } } else { code = toAlignment(align); - while (++columnIndex < columnLength) { + while (++columnIndex < mostCellsPerRow) { alignments[columnIndex] = code; } } // Inject the alignment row. columnIndex = -1; - columnLength = mostCellsPerRow; row = []; sizes = []; - while (++columnIndex < columnLength) { + while (++columnIndex < mostCellsPerRow) { code = alignments[columnIndex]; before = ''; after = ''; - if (code === l$1) { - before = colon$1; - } else if (code === r) { - after = colon$1; - } else if (code === c$1) { - before = colon$1; - after = colon$1; + if (code === 99 /* `c` */) { + before = ':'; + after = ':'; + } else if (code === 108 /* `l` */) { + before = ':'; + } else if (code === 114 /* `r` */) { + after = ':'; } // There *must* be at least one hyphen-minus in each alignment cell. - size = alignDelimiters - ? Math.max( - 1, - longestCellByColumn[columnIndex] - before.length - after.length - ) - : 1; + size = + settings.alignDelimiters === false + ? 1 + : Math.max( + 1, + longestCellByColumn[columnIndex] - before.length - after.length + ); - cell = before + repeatString(dash$1, size) + after; + cell = before + '-'.repeat(size) + after; - if (alignDelimiters === true) { + if (settings.alignDelimiters !== false) { size = before.length + size + after.length; if (size > longestCellByColumn[columnIndex]) { @@ -76605,113 +84786,218 @@ function markdownTable(table, options) { sizeMatrix.splice(1, 0, sizes); rowIndex = -1; - rowLength = cellMatrix.length; - lines = []; + /** @type {string[]} */ + const lines = []; - while (++rowIndex < rowLength) { + while (++rowIndex < cellMatrix.length) { row = cellMatrix[rowIndex]; sizes = sizeMatrix[rowIndex]; columnIndex = -1; - columnLength = mostCellsPerRow; line = []; - while (++columnIndex < columnLength) { + while (++columnIndex < mostCellsPerRow) { cell = row[columnIndex] || ''; before = ''; after = ''; - if (alignDelimiters === true) { + if (settings.alignDelimiters !== false) { size = longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0); code = alignments[columnIndex]; - if (code === r) { - before = repeatString(space, size); - } else if (code === c$1) { - if (size % 2 === 0) { - before = repeatString(space, size / 2); - after = before; + if (code === 114 /* `r` */) { + before = ' '.repeat(size); + } else if (code === 99 /* `c` */) { + if (size % 2) { + before = ' '.repeat(size / 2 + 0.5); + after = ' '.repeat(size / 2 - 0.5); } else { - before = repeatString(space, size / 2 + 0.5); - after = repeatString(space, size / 2 - 0.5); + before = ' '.repeat(size / 2); + after = before; } } else { - after = repeatString(space, size); + after = ' '.repeat(size); } } - if (start === true && columnIndex === 0) { - line.push(verticalBar); + if (settings.delimiterStart !== false && !columnIndex) { + line.push('|'); } if ( - padding === true && + settings.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is // empty: there will be a closing space. - !(alignDelimiters === false && cell === '') && - (start === true || columnIndex !== 0) + !(settings.alignDelimiters === false && cell === '') && + (settings.delimiterStart !== false || columnIndex) ) { - line.push(space); + line.push(' '); } - if (alignDelimiters === true) { + if (settings.alignDelimiters !== false) { line.push(before); } line.push(cell); - if (alignDelimiters === true) { + if (settings.alignDelimiters !== false) { line.push(after); } - if (padding === true) { - line.push(space); + if (settings.padding !== false) { + line.push(' '); } - if (end === true || columnIndex !== columnLength - 1) { - line.push(verticalBar); + if ( + settings.delimiterEnd !== false || + columnIndex !== mostCellsPerRow - 1 + ) { + line.push('|'); } } - line = line.join(''); - - if (end === false) { - line = line.replace(trailingWhitespace, ''); - } - - lines.push(line); + lines.push( + settings.delimiterEnd === false + ? line.join('').replace(/ +$/, '') + : line.join('') + ); } - return lines.join(lineFeed) + return lines.join('\n') } +/** + * @param {string|null|undefined} [value] + * @returns {string} + */ function serialize(value) { return value === null || value === undefined ? '' : String(value) } +/** + * @param {string} value + * @returns {number} + */ function defaultStringLength(value) { return value.length } +/** + * @param {string|null|undefined} value + * @returns {number} + */ function toAlignment(value) { - var code = typeof value === 'string' ? value.charCodeAt(0) : x; + const code = typeof value === 'string' ? value.charCodeAt(0) : 0; + + return code === 67 /* `C` */ || code === 99 /* `c` */ + ? 99 /* `c` */ + : code === 76 /* `L` */ || code === 108 /* `l` */ + ? 108 /* `l` */ + : code === 82 /* `R` */ || code === 114 /* `r` */ + ? 114 /* `r` */ + : 0 +} + +/** + * @typedef {import('mdast').AlignType} AlignType + * @typedef {import('mdast').Table} Table + * @typedef {import('mdast').TableRow} TableRow + * @typedef {import('mdast').TableCell} TableCell + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('markdown-table').MarkdownTableOptions} MarkdownTableOptions + * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension + * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle + * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension + * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle + * @typedef {import('mdast-util-to-markdown').Context} ToMarkdownContext + * + * @typedef Options + * @property {boolean} [tableCellPadding=true] + * @property {boolean} [tablePipeAlign=true] + * @property {MarkdownTableOptions['stringLength']} [stringLength] + */ + +/** @type {FromMarkdownExtension} */ +const gfmTableFromMarkdown = { + enter: { + table: enterTable, + tableData: enterCell, + tableHeader: enterCell, + tableRow: enterRow + }, + exit: { + codeText: exitCodeText, + table: exitTable, + tableData: exit, + tableHeader: exit, + tableRow: exit + } +}; + +/** @type {FromMarkdownHandle} */ +function enterTable(token) { + /** @type {AlignType[]} */ + // @ts-expect-error: `align` is custom. + const align = token._align; + this.enter({type: 'table', align, children: []}, token); + this.setData('inTable', true); +} - return code === L$1 || code === l$1 - ? l$1 - : code === R || code === r - ? r - : code === C || code === c$1 - ? c$1 - : x +/** @type {FromMarkdownHandle} */ +function exitTable(token) { + this.exit(token); + this.setData('inTable'); } -var toMarkdown_1 = toMarkdown$3; +/** @type {FromMarkdownHandle} */ +function enterRow(token) { + this.enter({type: 'tableRow', children: []}, token); +} -function toMarkdown$3(options) { - var settings = options || {}; - var padding = settings.tableCellPadding; - var alignDelimiters = settings.tablePipeAlign; - var stringLength = settings.stringLength; - var around = padding ? ' ' : '|'; +/** @type {FromMarkdownHandle} */ +function exit(token) { + this.exit(token); +} + +/** @type {FromMarkdownHandle} */ +function enterCell(token) { + this.enter({type: 'tableCell', children: []}, token); +} + +// Overwrite the default code text data handler to unescape escaped pipes when +// they are in tables. +/** @type {FromMarkdownHandle} */ +function exitCodeText(token) { + let value = this.resume(); + + if (this.getData('inTable')) { + value = value.replace(/\\([\\|])/g, replace); + } + + const node = /** @type {InlineCode} */ (this.stack[this.stack.length - 1]); + node.value = value; + this.exit(token); +} + +/** + * @param {string} $0 + * @param {string} $1 + * @returns {string} + */ +function replace($0, $1) { + // Pipes work, backslashes don’t (but can’t escape pipes). + return $1 === '|' ? $1 : $0 +} + +/** + * @param {Options} [options] + * @returns {ToMarkdownExtension} + */ +function gfmTableToMarkdown(options) { + const settings = options || {}; + const padding = settings.tableCellPadding; + const alignDelimiters = settings.tablePipeAlign; + const stringLength = settings.stringLength; + const around = padding ? ' ' : '|'; return { unsafe: [ @@ -76740,44 +85026,71 @@ function toMarkdown$3(options) { } } + /** + * @type {ToMarkdownHandle} + * @param {Table} node + */ function handleTable(node, _, context) { + // @ts-expect-error: fixed in `markdown-table@3.0.1`. return serializeData(handleTableAsData(node, context), node.align) } - // This function isn’t really used normally, because we handle rows at the - // table level. - // But, if someone passes in a table row, this ensures we make somewhat sense. + /** + * This function isn’t really used normally, because we handle rows at the + * table level. + * But, if someone passes in a table row, this ensures we make somewhat sense. + * + * @type {ToMarkdownHandle} + * @param {TableRow} node + */ function handleTableRow(node, _, context) { - var row = handleTableRowAsData(node, context); + const row = handleTableRowAsData(node, context); // `markdown-table` will always add an align row - var value = serializeData([row]); + const value = serializeData([row]); return value.slice(0, value.indexOf('\n')) } + /** + * @type {ToMarkdownHandle} + * @param {TableCell} node + */ function handleTableCell(node, _, context) { - var exit = context.enter('tableCell'); - var value = containerPhrasing(node, context, {before: around, after: around}); + const exit = context.enter('tableCell'); + const subexit = context.enter('phrasing'); + const value = containerPhrasing(node, context, { + before: around, + after: around + }); + subexit(); exit(); return value } + /** + * @param {Array.>} matrix + * @param {Array.} [align] + */ function serializeData(matrix, align) { - return markdownTable_1(matrix, { - align: align, - alignDelimiters: alignDelimiters, - padding: padding, - stringLength: stringLength + return markdownTable(matrix, { + align, + alignDelimiters, + padding, + stringLength }) } + /** + * @param {Table} node + * @param {ToMarkdownContext} context + */ function handleTableAsData(node, context) { - var children = node.children; - var index = -1; - var length = children.length; - var result = []; - var subexit = context.enter('table'); + const children = node.children; + let index = -1; + /** @type {Array.>} */ + const result = []; + const subexit = context.enter('table'); - while (++index < length) { + while (++index < children.length) { result[index] = handleTableRowAsData(children[index], context); } @@ -76786,14 +85099,18 @@ function toMarkdown$3(options) { return result } + /** + * @param {TableRow} node + * @param {ToMarkdownContext} context + */ function handleTableRowAsData(node, context) { - var children = node.children; - var index = -1; - var length = children.length; - var result = []; - var subexit = context.enter('tableRow'); + const children = node.children; + let index = -1; + /** @type {Array.} */ + const result = []; + const subexit = context.enter('tableRow'); - while (++index < length) { + while (++index < children.length) { result[index] = handleTableCell(children[index], node, context); } @@ -76802,10 +85119,14 @@ function toMarkdown$3(options) { return result } + /** + * @type {ToMarkdownHandle} + * @param {InlineCode} node + */ function inlineCodeWithTable(node, parent, context) { - var value = inlineCode_1(node); + let value = inlineCode(node, parent, context); - if (context.stack.indexOf('tableCell') !== -1) { + if (context.stack.includes('tableCell')) { value = value.replace(/\|/g, '\\$&'); } @@ -76813,98 +85134,404 @@ function toMarkdown$3(options) { } } -var unsafe$3 = [{atBreak: true, character: '-', after: '[:|-]'}]; +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ -var handlers$1 = { - listItem: listItemWithTaskListItem -}; +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkBullet(context) { + const marker = context.options.bullet || '*'; -function listItemWithTaskListItem(node, parent, context) { - var value = listItem_1(node, parent, context); - var head = node.children[0]; + if (marker !== '*' && marker !== '+' && marker !== '-') { + throw new Error( + 'Cannot serialize items with `' + + marker + + '` for `options.bullet`, expected `*`, `+`, or `-`' + ) + } - if (typeof node.checked === 'boolean' && head && head.type === 'paragraph') { - value = value.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/, check); + return marker +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkListItemIndent(context) { + const style = context.options.listItemIndent || 'tab'; + + // To do: remove in a major. + // @ts-expect-error: deprecated. + if (style === 1 || style === '1') { + return 'one' } - return value + if (style !== 'tab' && style !== 'one' && style !== 'mixed') { + throw new Error( + 'Cannot serialize items with `' + + style + + '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`' + ) + } - function check($0) { - return $0 + '[' + (node.checked ? 'x' : ' ') + '] ' + return style +} + +/** + * @typedef {import('../types.js').Node} Node + * @typedef {import('../types.js').Parent} Parent + * @typedef {import('../types.js').Join} Join + * @typedef {import('../types.js').Context} Context + */ + +/** + * @param {Parent} parent + * @param {Context} context + * @returns {string} + */ +function containerFlow(parent, context) { + const children = parent.children || []; + /** @type {Array.} */ + const results = []; + let index = -1; + + while (++index < children.length) { + const child = children[index]; + + results.push( + context.handle(child, parent, context, {before: '\n', after: '\n'}) + ); + + if (index < children.length - 1) { + results.push(between(child, children[index + 1])); + } + } + + return results.join('') + + /** + * @param {Node} left + * @param {Node} right + * @returns {string} + */ + function between(left, right) { + let index = context.join.length; + /** @type {ReturnType} */ + let result; + + while (index--) { + result = context.join[index](left, right, parent, context); + + if (result === true || result === 1) { + break + } + + if (typeof result === 'number') { + return '\n'.repeat(1 + result) + } + + if (result === false) { + return '\n\n\n\n' + } + } + + return '\n\n' } } -var toMarkdown$4 = { - unsafe: unsafe$3, - handlers: handlers$1 -}; +/** + * @callback Map + * @param {string} value + * @param {number} line + * @param {boolean} blank + * @returns {string} + */ -var toMarkdown_1$1 = toMarkdown$5; +const eol = /\r?\n|\r/g; -function toMarkdown$5(options) { - var config = configure_1$2( - {handlers: {}, join: [], unsafe: [], options: {}}, - { - extensions: [toMarkdown$1, toMarkdown$2, toMarkdown_1(options), toMarkdown$4] +/** + * @param {string} value + * @param {Map} map + * @returns {string} + */ +function indentLines(value, map) { + /** @type {Array.} */ + const result = []; + let start = 0; + let line = 0; + /** @type {RegExpExecArray|null} */ + let match; + + while ((match = eol.exec(value))) { + one(value.slice(start, match.index)); + result.push(match[0]); + start = match.index + match[0].length; + line++; + } + + one(value.slice(start)); + + return result.join('') + + /** + * @param {string} value + */ + function one(value) { + result.push(map(value, line, !value)); + } +} + +/** + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').List} List + * @typedef {import('../util/indent-lines.js').Map} Map + * @typedef {import('../types.js').Options} Options + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {ListItem} node + */ +function listItem(node, parent, context) { + const listItemIndent = checkListItemIndent(context); + /** @type {string} */ + let bullet = checkBullet(context); + + if (parent && parent.type === 'list' && parent.ordered) { + bullet = + (typeof parent.start === 'number' && parent.start > -1 + ? parent.start + : 1) + + (context.options.incrementListMarker === false + ? 0 + : parent.children.indexOf(node)) + + '.'; + } + + let size = bullet.length + 1; + + if ( + listItemIndent === 'tab' || + (listItemIndent === 'mixed' && + ((parent && 'spread' in parent && parent.spread) || node.spread)) + ) { + size = Math.ceil(size / 4) * 4; + } + + const exit = context.enter('listItem'); + const value = indentLines(containerFlow(node, context), map); + exit(); + + return value + + /** @type {Map} */ + function map(line, index, blank) { + if (index) { + return (blank ? '' : ' '.repeat(size)) + line } - ); - return Object.assign(config.options, { - handlers: config.handlers, - join: config.join, - unsafe: config.unsafe - }) + return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line + } } -var warningIssued; +/** + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').BlockContent} BlockContent + * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension + * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle + * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension + * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle + */ + +/** @type {FromMarkdownExtension} */ +const gfmTaskListItemFromMarkdown = { + exit: { + taskListCheckValueChecked: exitCheck, + taskListCheckValueUnchecked: exitCheck, + paragraph: exitParagraphWithTaskListItem + } +}; + +/** @type {ToMarkdownExtension} */ +const gfmTaskListItemToMarkdown = { + unsafe: [{atBreak: true, character: '-', after: '[:|-]'}], + handlers: {listItem: listItemWithTaskListItem} +}; -var remarkGfm = gfm; +/** @type {FromMarkdownHandle} */ +function exitCheck(token) { + // We’re always in a paragraph, in a list item. + this.stack[this.stack.length - 2].checked = + token.type === 'taskListCheckValueChecked'; +} -function gfm(options) { - var data = this.data(); +/** @type {FromMarkdownHandle} */ +function exitParagraphWithTaskListItem(token) { + const parent = this.stack[this.stack.length - 2]; + /** @type {Paragraph} */ + // @ts-expect-error: must be true. + const node = this.stack[this.stack.length - 1]; + /** @type {BlockContent[]} */ + // @ts-expect-error: check whether `parent` is a `listItem` later. + const siblings = parent.children; + const head = node.children[0]; + let index = -1; + /** @type {Paragraph|undefined} */ + let firstParaghraph; - /* istanbul ignore next - old remark. */ if ( - !warningIssued && - ((this.Parser && - this.Parser.prototype && - this.Parser.prototype.blockTokenizers) || - (this.Compiler && - this.Compiler.prototype && - this.Compiler.prototype.visitors)) + parent && + parent.type === 'listItem' && + typeof parent.checked === 'boolean' && + head && + head.type === 'text' ) { - warningIssued = true; - console.warn( - '[remark-gfm] Warning: please upgrade to remark 13 to use this plugin' - ); + while (++index < siblings.length) { + const sibling = siblings[index]; + if (sibling.type === 'paragraph') { + firstParaghraph = sibling; + break + } + } + + if (firstParaghraph === node) { + // Must start with a space or a tab. + head.value = head.value.slice(1); + + if (head.value.length === 0) { + node.children.shift(); + } else { + // @ts-expect-error: must be true. + head.position.start.column++; + // @ts-expect-error: must be true. + head.position.start.offset++; + // @ts-expect-error: must be true. + node.position.start = Object.assign({}, head.position.start); + } + } } - add('micromarkExtensions', micromarkExtensionGfm(options)); - add('fromMarkdownExtensions', fromMarkdown$5); - add('toMarkdownExtensions', toMarkdown_1$1(options)); + this.exit(token); +} - function add(field, value) { - /* istanbul ignore if - other extensions. */ - if (data[field]) data[field].push(value); - else data[field] = [value]; +/** + * @type {ToMarkdownHandle} + * @param {ListItem} node + */ +function listItemWithTaskListItem(node, parent, context) { + const head = node.children[0]; + let value = listItem(node, parent, context); + + if (typeof node.checked === 'boolean' && head && head.type === 'paragraph') { + value = value.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/, check); + } + + return value + + /** + * @param {string} $0 + * @returns {string} + */ + function check($0) { + return $0 + '[' + (node.checked ? 'x' : ' ') + '] ' } } -var lintNode = /*@__PURE__*/getAugmentedNamespace(remarkPresetLintNode$1); +/** + * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension + * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension + * + * @typedef {import('mdast-util-gfm-table').Options} Options + */ + +/** + * @type {Array.} + */ +const gfmFromMarkdown = [ + gfmAutolinkLiteralFromMarkdown, + gfmStrikethroughFromMarkdown, + gfmTableFromMarkdown, + gfmTaskListItemFromMarkdown +]; -// To aid in future maintenance, this layout closely matches remark-cli/cli.js. -// https://github.com/remarkjs/remark/blob/master/packages/remark-cli/cli.js +/** + * @param {Options} [options] + * @returns {ToMarkdownExtension} + */ +function gfmToMarkdown(options) { + return { + extensions: [ + gfmAutolinkLiteralToMarkdown, + gfmStrikethroughToMarkdown, + gfmTableToMarkdown(options), + gfmTaskListItemToMarkdown + ] + } +} + +/** + * @typedef {import('mdast').Root} Root + * @typedef {import('micromark-extension-gfm').Options & import('mdast-util-gfm').Options} Options + */ +/** + * Plugin to support GitHub Flavored Markdown (GFM). + * + * @type {import('unified').Plugin<[Options?]|void[], Root>} + */ +function remarkGfm(options = {}) { + const data = this.data(); + add('micromarkExtensions', gfm$1(options)); + add('fromMarkdownExtensions', gfmFromMarkdown); + add('toMarkdownExtensions', gfmToMarkdown(options)); + /** + * @param {string} field + * @param {unknown} value + */ + function add(field, value) { + const list = /** @type {unknown[]} */ ( + // Other extensions + /* c8 ignore next 2 */ + data[field] ? data[field] : (data[field] = []) + ); + list.push(value); + } +} +var remarkGfm$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': remarkGfm +}); +var require$$6 = /*@__PURE__*/getAugmentedNamespace(remarkGfm$1); +// To aid in future maintenance, this layout closely matches remark-cli/cli.js. +// https://github.com/remarkjs/remark/blob/master/packages/remark-cli/cli.js +const start = unifiedArgs; +const extensions = markdownExtensions; +const processor = remark; +const proc = require$$3; +const cli = require$$4; +const lintNode = require$$5; +const gfm = require$$6; -unifiedArgs({ - processor: remark().use(remarkGfm).use(lintNode), +start({ + processor: processor().use(gfm).use(lintNode), name: proc.name, description: cli.description, version: [ @@ -76916,12 +85543,8 @@ unifiedArgs({ packageField: proc.name + 'Config', rcName: '.' + proc.name + 'rc', ignoreName: '.' + proc.name + 'ignore', - extensions: markdownExtensions, + extensions: extensions, detectConfig: false, }); -var cliEntry = { - -}; - module.exports = cliEntry; diff --git a/tools/node-lint-md-cli-rollup/package-lock.json b/tools/node-lint-md-cli-rollup/package-lock.json index d402d31acd58f0..38dc0793812599 100644 --- a/tools/node-lint-md-cli-rollup/package-lock.json +++ b/tools/node-lint-md-cli-rollup/package-lock.json @@ -10,40 +10,48 @@ "dependencies": { "markdown-extensions": "^1.1.1", "remark": "^13.0.0", - "remark-gfm": "^1.0.0", - "remark-lint": "^8.0.0", + "remark-gfm": "^2.0.0", "remark-preset-lint-node": "^3.0.0", "unified-args": "^8.1.0" }, "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^11.0.1", - "rollup": "^2.36.1", + "@rollup/plugin-node-resolve": "^13.0.4", + "rollup": "^2.52.7", "shx": "^0.3.3" } }, "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { @@ -111,9 +119,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -128,7 +136,7 @@ "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^2.30.0" + "rollup": "^2.38.3" } }, "node_modules/@rollup/plugin-json": { @@ -144,9 +152,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz", - "integrity": "sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", + "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -160,7 +168,7 @@ "node": ">= 10.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^2.42.0" } }, "node_modules/@rollup/pluginutils": { @@ -209,9 +217,9 @@ } }, "node_modules/@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", "dev": true }, "node_modules/@types/parse5": { @@ -256,9 +264,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -268,17 +276,14 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -290,9 +295,9 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "engines": { "node": ">=8" } @@ -318,9 +323,9 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtin-modules": { "version": "3.2.0", @@ -364,9 +369,9 @@ } }, "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", + "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -382,54 +387,41 @@ } }, "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", + "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", + "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chokidar": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz", - "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "fsevents": "~2.3.2" } }, "node_modules/co": { @@ -488,9 +480,9 @@ } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, @@ -634,11 +626,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "optional": true, "os": [ @@ -723,33 +713,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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/hast-util-from-parse5/node_modules/vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -763,19 +726,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-is-element": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", @@ -902,21 +852,21 @@ } }, "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", + "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", + "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, "funding": { "type": "github", @@ -974,9 +924,9 @@ } }, "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", + "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1015,9 +965,9 @@ } }, "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", + "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1038,11 +988,14 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-reference": { @@ -1060,12 +1013,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -1077,9 +1029,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { "minimist": "^1.2.5" }, @@ -1131,9 +1083,9 @@ } }, "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", + "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1168,134 +1120,145 @@ } }, "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dependencies": { - "repeat-string": "^1.0.0" - }, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", + "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-comment-marker": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", - "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz", - "integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==", + "node_modules/mdast-util-find-and-replace": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", + "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "escape-string-regexp": "^5.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/mdast-util-gfm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.1.tgz", - "integrity": "sha512-oE1W1zSXU2L2LHg91V22HC3Z1fbsOZTBYUQq+kpM29f9297TbRm0C1l3bQ88RREl0WaUQaB49G7trvwy5utUKQ==", - "dependencies": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" + "node_modules/mdast-util-find-and-replace/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==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.2.tgz", - "integrity": "sha512-WFeIrcNNsfBety0gyWuiBIPing9UkVcl/m2iZOyW1uHEH2evjFocet2h77M24ub0WyZ4ucnQn/jWhO5Ozl6j4g==", + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "node_modules/mdast-util-find-and-replace/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": { - "mdast-util-to-markdown": "^0.6.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dependencies": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "dependencies": { - "mdast-util-to-markdown": "~0.6.0" - }, + "node_modules/mdast-util-from-markdown/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-heading-style": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", - "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, + "node_modules/mdast-util-from-markdown/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-to-markdown": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.2.tgz", - "integrity": "sha512-iRczns6WMvu0hUw02LXsPDJshBIwtUPbvHBWo19IQeU0YqmzlA8Pd30U8V7uiI0VPkxzS7A/NXBXH6u+HS87Zg==", + "node_modules/mdast-util-from-markdown/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-to-string": { + "node_modules/mdast-util-from-markdown/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", @@ -1304,14 +1267,149 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/micromark": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz", - "integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "node_modules/mdast-util-from-markdown/node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", + "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==", + "dependencies": { + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", + "dependencies": { + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz", + "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==", + "dependencies": { + "@types/mdast": "^3.0.3", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz", + "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==", + "dependencies": { + "markdown-table": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz", + "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==", + "dependencies": { + "@types/mdast": "^3.0.3", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-heading-style": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", + "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.1.1.tgz", + "integrity": "sha512-4puev/CxuxVdlsx5lVmuzgdqfjkkJJLS1Zm/MnejQ8I7BLeeBlbkwp6WOGJypEcN8g56LbVbhNmn84MvvcAvSQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "parse-entities": "^3.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { "type": "OpenCollective", @@ -1324,16 +1422,17 @@ } }, "node_modules/micromark-extension-gfm": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.2.tgz", - "integrity": "sha512-ToQEpLkRgg7Tp8D3GM/SjZFPV0cCwWNxZmoEVIOQivOswRtPg7gg2WlCrtHhUWFNX+DgDjbq0iLOPGp4Y15oug==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz", + "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==", "dependencies": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.0", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -1341,11 +1440,14 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.4.tgz", - "integrity": "sha512-471VKd4k3SiX7vx9fC+IYeGQL0RnxwBBXeEc5WConb7naJDG5m16guA+VoFzyXchrvmU08t0dUWWPZ0mkJSXVw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==", "dependencies": { - "micromark": "~2.11.0" + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -1353,11 +1455,15 @@ } }, "node_modules/micromark-extension-gfm-strikethrough": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.3.tgz", - "integrity": "sha512-MKMoP9x2dsr1aeX46ibBwVf4Q6nJsi5aaUFTOMOID5VOLSxwl4CrqUV4OGFQd6AqhtzBJAxaV+N2trlTBtZDNQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.0.tgz", + "integrity": "sha512-5PhVJVK8zRsrc+A715NBPMY5iOQwtkMfL/8XURAPeU5fPC0S5dm4qjpoA6fGy4B9MHm+6WNs3xZDxF1ZGTtGDw==", "dependencies": { - "micromark": "~2.11.0" + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -1365,11 +1471,14 @@ } }, "node_modules/micromark-extension-gfm-table": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.2.tgz", - "integrity": "sha512-AAzmj85XO1ydHYX0Lz52HGhcH2sZLm2AVvkwzELXWgZF6vGdq5yZ3CTByFRsqNUPyQBSIYFKLDAtc6KlnO42aw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz", + "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==", "dependencies": { - "micromark": "~2.11.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", @@ -1377,30 +1486,36 @@ } }, "node_modules/micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz", + "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz", + "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==", "dependencies": { - "micromark": "~2.11.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-normalize-identifier": { + "node_modules/micromark-factory-space": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", "funding": [ { "type": "GitHub Sponsors", @@ -1412,13 +1527,14 @@ } ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/micromark-util-symbol": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", - "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", + "node_modules/micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", "funding": [ { "type": "GitHub Sponsors", @@ -1428,79 +1544,238 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + ], "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "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/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "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/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" + "node_modules/micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "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" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "wrappy": "1" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/micromark-util-encode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", + "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" + "node_modules/micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "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-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/parse-entities": { + "node_modules/micromark-util-symbol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", + "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz", + "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/micromark/node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", @@ -1517,10 +1792,97 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "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/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", + "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", + "dependencies": { + "character-entities": "^2.0.0", + "character-entities-legacy": "^2.0.0", + "character-reference-invalid": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -1603,9 +1965,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -1655,3415 +2017,68 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-parse/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/rehype-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", + "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-gfm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", "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": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/unist-util-stringify-position": { + "node_modules/remark-lint-blockquote-indentation": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", + "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", "dependencies": { - "@types/unist": "^2.0.0" + "@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/rehype-parse/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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/rehype-parse/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", - "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-to-html": "^8.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-stringify/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype-stringify/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-stringify/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/rehype-stringify/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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/rehype-stringify/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/rehype/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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/rehype/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "dependencies": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-8.0.0.tgz", - "integrity": "sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg==", - "dependencies": { - "remark-message-control": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", - "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-blockquote-indentation/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-blockquote-indentation/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", - "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-checkbox-character-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-checkbox-character-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", - "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-checkbox-content-indent/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", - "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-code-block-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-code-block-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", - "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-definition-spacing/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-definition-spacing/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", - "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-fenced-code-flag/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-fenced-code-flag/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", - "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-fenced-code-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-fenced-code-marker/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-file-extension": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", - "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-file-extension/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-file-extension/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-file-extension/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-file-extension/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-file-extension/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-file-extension/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-file-extension/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", - "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-final-definition/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-final-definition/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-final-definition/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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-definition/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-final-definition/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", - "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-final-newline/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-final-newline/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-final-newline/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-newline/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-final-newline/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-newline/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-final-newline/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", - "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-first-heading-level/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-first-heading-level/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", - "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-hard-break-spaces/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-hard-break-spaces/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", - "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-heading-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-heading-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-heading-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-heading-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", - "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-list-item-bullet-indent/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", - "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-list-item-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-list-item-indent/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", - "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-maximum-line-length/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-maximum-line-length/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", - "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", - "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-auto-link-without-protocol/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-auto-link-without-protocol/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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-auto-link-without-protocol/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-no-auto-link-without-protocol/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", - "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-no-blockquote-without-marker/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^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/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", - "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-no-consecutive-blank-lines/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", - "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { + "node_modules/remark-lint-blockquote-indentation/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5078,7 +2093,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -5087,7 +2102,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-position": { + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -5096,135 +2111,50 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-no-duplicate-definitions/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", - "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@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/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/is-plain-obj": { + "node_modules/remark-lint-checkbox-character-style": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", + "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", "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": "^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-no-file-name-articles/node_modules/unified-lint-rule": { + "node_modules/remark-lint-checkbox-character-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5239,108 +2169,69 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", - "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@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-consecutive-dashes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/is-plain-obj": { + "node_modules/remark-lint-checkbox-content-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", + "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", "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": "^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-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { + "node_modules/remark-lint-checkbox-content-indent/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5355,108 +2246,82 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", - "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@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-outer-dashes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-code-block-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", "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": "^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-file-name-outer-dashes/node_modules/unified-lint-rule": { + "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5471,57 +2336,59 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", - "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", + "node_modules/remark-lint-definition-spacing": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "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" }, @@ -5530,54 +2397,84 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/is-plain-obj": { + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-fenced-code-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", + "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", "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": "^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-heading-content-indent/node_modules/unified-lint-rule": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5592,7 +2489,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -5601,7 +2498,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -5610,19 +2507,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -5636,7 +2521,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -5649,92 +2534,104 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-no-heading-content-indent/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", - "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", - "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" - }, + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/is-plain-obj": { + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-file-extension": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", + "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", + "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-heading-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-file-extension/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -5742,7 +2639,24 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { + "node_modules/remark-lint-final-definition": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", + "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", + "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/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5757,7 +2671,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-is": { + "node_modules/remark-lint-final-definition/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -5766,7 +2680,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { + "node_modules/remark-lint-final-definition/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -5775,19 +2689,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-final-definition/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -5801,7 +2703,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -5814,41 +2716,41 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-heading-indent/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-final-newline/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", - "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", + "node_modules/remark-lint-first-heading-level": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", + "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", "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", @@ -5859,63 +2761,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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/unified-lint-rule": { + "node_modules/remark-lint-first-heading-level/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -5930,7 +2776,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-is": { + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -5939,19 +2785,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -5965,7 +2799,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -5978,109 +2812,101 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-no-inline-padding/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", - "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", - "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" - }, + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/is-plain-obj": { + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-heading-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "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-no-literal-urls/node_modules/unified-lint-rule": { + "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6095,7 +2921,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-is": { + "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6104,28 +2930,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6139,7 +2944,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6152,100 +2957,92 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-list-item-bullet-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-no-literal-urls/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", - "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", - "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" - }, + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/is-plain-obj": { + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-list-item-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", "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": "^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-multiple-toplevel-headings/node_modules/unified-lint-rule": { + "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6260,7 +3057,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6269,7 +3066,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-position": { + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -6278,19 +3075,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6304,7 +3089,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6317,98 +3102,102 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-maximum-line-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-no-multiple-toplevel-headings/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", - "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", - "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" - }, + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/is-plain-obj": { + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-auto-link-without-protocol": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", + "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-shell-dollars/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6423,7 +3212,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6432,19 +3221,16 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6458,7 +3244,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6471,98 +3257,25 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-no-shell-dollars/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", - "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-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-shortcut-reference-image/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6577,7 +3290,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6586,19 +3299,16 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6612,7 +3322,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6625,98 +3335,117 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", "dependencies": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^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-shortcut-reference-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", - "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "trough": "^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" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "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": "^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-shortcut-reference-link/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6731,7 +3460,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6740,19 +3469,16 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6766,7 +3492,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6779,91 +3505,86 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-file-name-articles": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", + "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-shortcut-reference-link/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-file-name-articles/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", - "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", + "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", "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" + "unified-lint-rule": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", + "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -6871,7 +3592,26 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-heading-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", + "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/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -6886,7 +3626,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -6895,7 +3635,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -6904,19 +3644,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -6930,7 +3658,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -6943,27 +3671,32 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-heading-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", + "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-table-indentation/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -6971,82 +3704,69 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", - "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" - }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-tabs/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-inline-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", "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": "^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-tabs/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-inline-padding/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7061,134 +3781,139 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-literal-urls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@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-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-undefined-references": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", - "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", + "node_modules/remark-lint-no-literal-urls/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/mdast": "^3.0.0", - "micromark-util-normalize-identifier": "^1.0.0", + "@types/unist": "^2.0.0", + "trough": "^2.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" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-multiple-toplevel-headings": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", + "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", "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": "^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-undefined-references/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7203,7 +3928,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-is": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -7212,7 +3937,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -7221,19 +3946,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -7247,7 +3960,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -7260,27 +3973,30 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-shell-dollars": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", + "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-undefined-references/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -7288,83 +4004,59 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", - "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "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": "^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-unused-definitions/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7379,7 +4071,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -7388,19 +4080,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -7414,7 +4094,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -7427,99 +4107,91 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-shortcut-reference-link": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@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-unused-definitions/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", - "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" - }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-table-indentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", "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": "^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-ordered-list-marker-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7534,7 +4206,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -7543,7 +4215,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -7552,19 +4224,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -7578,7 +4238,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -7591,110 +4251,90 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-table-indentation/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-tabs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", + "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "vfile-location": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings": { + "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", - "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", - "dependencies": { - "escape-string-regexp": "^4.0.0", - "unified-lint-rule": "^1.0.2", - "unist-util-position": "^3.1.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.1" - } - }, - "node_modules/remark-lint-rule-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", - "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "trough": "^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" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-rule-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-no-tabs/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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-rule-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-undefined-references": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", "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": "^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" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7709,7 +4349,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -7718,7 +4358,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -7727,19 +4367,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -7753,7 +4381,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -7766,98 +4394,104 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-no-undefined-references/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "dependencies": { "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-no-unused-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@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-strong-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", - "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "trough": "^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" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", "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": "^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-strong-marker/node_modules/unified-lint-rule": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -7872,7 +4506,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -7881,7 +4515,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-position": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -7890,19 +4524,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -7916,7 +4538,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -7929,99 +4551,111 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-prohibited-strings": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", + "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "escape-string-regexp": "^4.0.0", + "unified-lint-rule": "^1.0.2", + "unist-util-position": "^3.1.0", + "unist-util-visit": "^2.0.0", + "vfile-location": "^3.0.1" + } + }, + "node_modules/remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", + "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-strong-marker/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-rule-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "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-cell-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", - "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", - "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" - }, + "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/is-plain-obj": { + "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "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": "^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-table-cell-padding/node_modules/unified-lint-rule": { + "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -8036,7 +4670,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { + "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", @@ -8045,7 +4679,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-position": { + "node_modules/remark-lint-strong-marker/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", @@ -8054,19 +4688,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { + "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", @@ -8080,7 +4702,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit-parents": { + "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", @@ -8093,91 +4715,93 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark-lint-table-cell-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "dependencies": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^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-table-cell-padding/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "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": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", - "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", - "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" - }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/is-plain-obj": { + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-table-pipes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", "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": "^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", @@ -8217,18 +4841,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "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.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -8256,34 +4868,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-table-pipes/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.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": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", @@ -8301,53 +4885,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-unordered-list-marker-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -8375,86 +4912,33 @@ "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -8517,69 +5001,6 @@ "node": ">=12.0.0" } }, - "node_modules/remark-preset-lint-node/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==" - }, - "node_modules/remark-preset-lint-node/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-preset-lint-node/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-preset-lint-node/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/remark-preset-lint-node/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-preset-lint-node/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-preset-lint-node/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -8604,18 +5025,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-preset-lint-node/node_modules/unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -8643,34 +5052,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-node/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "dependencies": { - "@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-preset-lint-node/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-preset-lint-recommended": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", @@ -8700,26 +5081,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-preset-lint-recommended/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/remark-preset-lint-recommended/node_modules/mdast-comment-marker": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", @@ -8760,145 +5121,289 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-preset-lint-recommended/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/remark-preset-lint-recommended/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended/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/remark-preset-lint-recommended/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/remark-preset-lint-recommended/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-stringify/node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-stringify/node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/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==", + "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "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" + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-stringify/node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/remark-stringify/node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { - "@types/unist": "^2.0.0" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/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" - }, + "node_modules/remark-stringify/node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/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" - }, + "node_modules/remark/node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/node_modules/vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "node_modules/remark/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/remark/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { - "@types/unist": "^2.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "^2.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "node_modules/remark/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "node_modules/remark/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { - "mdast-util-to-markdown": "^0.6.0" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", @@ -8935,9 +5440,9 @@ } }, "node_modules/rollup": { - "version": "2.36.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", - "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", + "version": "2.52.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", + "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -8946,7 +5451,7 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" } }, "node_modules/safe-buffer": { @@ -9049,9 +5554,9 @@ } }, "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9074,15 +5579,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", - "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -9134,10 +5630,50 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/to-vfile/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/to-vfile/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/to-vfile/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9149,16 +5685,17 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -9185,9 +5722,9 @@ } }, "node_modules/unified-engine": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.0.0.tgz", - "integrity": "sha512-vLUezxCnjzz+ya4pYouRQVMT8k82Rk4fIj406UidRnSFJdGXFaQyQklAnalsQHJrLqAlaYPkXPUa1upfVSHGCA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.2.0.tgz", + "integrity": "sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA==", "dependencies": { "concat-stream": "^2.0.0", "debug": "^4.0.0", @@ -9212,25 +5749,49 @@ "url": "https://opencollective.com/unified" } }, - "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/unified-engine/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "wrapped": "^1.0.1" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/unified-engine/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/unified-engine/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/unified-engine/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unified-message-control": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.2.tgz", - "integrity": "sha512-lhF8fKjDo2cIPx1re5X1QinqUonl+AN6F0XfEaab8w/hjqX7FZAhzu4P8g6pmYp09ld+HSWFwdRJj+Y8xD0q7Q==", + "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==", "dependencies": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", @@ -9277,11 +5838,11 @@ } }, "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dependencies": { - "@types/unist": "^2.0.2" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -9321,14 +5882,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", @@ -9345,12 +5906,12 @@ } }, "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", + "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "unist-util-stringify-position": "^3.0.0" }, "funding": { "type": "opencollective", @@ -9393,6 +5954,18 @@ "node": ">=6" } }, + "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vfile-sort": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", @@ -9440,9 +6013,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9451,24 +6024,24 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -9525,9 +6098,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -9549,9 +6122,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz", - "integrity": "sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", + "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -9604,9 +6177,9 @@ } }, "@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", "dev": true }, "@types/parse5": { @@ -9642,26 +6215,23 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, "balanced-match": { "version": "1.0.0", @@ -9669,9 +6239,9 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "brace-expansion": { "version": "1.1.11", @@ -9691,9 +6261,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtin-modules": { "version": "3.2.0", @@ -9721,9 +6291,9 @@ } }, "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz", + "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==" }, "character-entities-html4": { "version": "2.0.0", @@ -9731,36 +6301,28 @@ "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA==" }, "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", + "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==" }, "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz", + "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==" }, "chokidar": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz", - "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", - "optional": true - } + "readdirp": "~3.6.0" } }, "co": { @@ -9809,9 +6371,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -9911,10 +6473,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { @@ -9973,25 +6534,6 @@ "web-namespaces": "^2.0.0" }, "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -10000,15 +6542,6 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -10106,17 +6639,17 @@ "dev": true }, "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz", + "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==" }, "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz", + "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==", "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" } }, "is-arrayish": { @@ -10147,9 +6680,9 @@ } }, "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz", + "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==" }, "is-empty": { "version": "1.2.0", @@ -10175,9 +6708,9 @@ } }, "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz", + "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==" }, "is-module": { "version": "1.0.0", @@ -10191,9 +6724,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, "is-reference": { "version": "1.2.1", @@ -10210,12 +6743,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "json-parse-even-better-errors": { @@ -10224,9 +6756,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" } @@ -10265,9 +6797,9 @@ } }, "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz", + "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==" }, "lru-cache": { "version": "6.0.0", @@ -10292,70 +6824,166 @@ "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" }, "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", + "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==" + }, + "mdast-util-find-and-replace": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", + "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==", "requires": { - "repeat-string": "^1.0.0" + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "dependencies": { + "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==" + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "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==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } } }, - "mdast-comment-marker": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz", - "integrity": "sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==" - }, "mdast-util-from-markdown": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz", - "integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", "micromark": "~2.11.0", "parse-entities": "^2.0.0", "unist-util-stringify-position": "^2.0.0" + }, + "dependencies": { + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + } } }, "mdast-util-gfm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.1.tgz", - "integrity": "sha512-oE1W1zSXU2L2LHg91V22HC3Z1fbsOZTBYUQq+kpM29f9297TbRm0C1l3bQ88RREl0WaUQaB49G7trvwy5utUKQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", + "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==", "requires": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0" } }, "mdast-util-gfm-autolink-literal": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.2.tgz", - "integrity": "sha512-WFeIrcNNsfBety0gyWuiBIPing9UkVcl/m2iZOyW1uHEH2evjFocet2h77M24ub0WyZ4ucnQn/jWhO5Ozl6j4g==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", + "requires": { + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + } }, "mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz", + "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==", "requires": { - "mdast-util-to-markdown": "^0.6.0" + "@types/mdast": "^3.0.3", + "mdast-util-to-markdown": "^1.0.0" } }, "mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz", + "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==", "requires": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" + "markdown-table": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0" } }, "mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz", + "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==", "requires": { - "mdast-util-to-markdown": "~0.6.0" + "@types/mdast": "^3.0.3", + "mdast-util-to-markdown": "^1.0.0" } }, "mdast-util-heading-style": { @@ -10367,87 +6995,226 @@ } }, "mdast-util-to-markdown": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.2.tgz", - "integrity": "sha512-iRczns6WMvu0hUw02LXsPDJshBIwtUPbvHBWo19IQeU0YqmzlA8Pd30U8V7uiI0VPkxzS7A/NXBXH6u+HS87Zg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.1.1.tgz", + "integrity": "sha512-4puev/CxuxVdlsx5lVmuzgdqfjkkJJLS1Zm/MnejQ8I7BLeeBlbkwp6WOGJypEcN8g56LbVbhNmn84MvvcAvSQ==", "requires": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "parse-entities": "^3.0.0", + "zwitch": "^2.0.0" } }, "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" }, "micromark": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz", - "integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==", + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "requires": { "debug": "^4.0.0", "parse-entities": "^2.0.0" + }, + "dependencies": { + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + } } }, "micromark-extension-gfm": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.2.tgz", - "integrity": "sha512-ToQEpLkRgg7Tp8D3GM/SjZFPV0cCwWNxZmoEVIOQivOswRtPg7gg2WlCrtHhUWFNX+DgDjbq0iLOPGp4Y15oug==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz", + "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==", "requires": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.0", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, "micromark-extension-gfm-autolink-literal": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.4.tgz", - "integrity": "sha512-471VKd4k3SiX7vx9fC+IYeGQL0RnxwBBXeEc5WConb7naJDG5m16guA+VoFzyXchrvmU08t0dUWWPZ0mkJSXVw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==", "requires": { - "micromark": "~2.11.0" + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, "micromark-extension-gfm-strikethrough": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.3.tgz", - "integrity": "sha512-MKMoP9x2dsr1aeX46ibBwVf4Q6nJsi5aaUFTOMOID5VOLSxwl4CrqUV4OGFQd6AqhtzBJAxaV+N2trlTBtZDNQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.0.tgz", + "integrity": "sha512-5PhVJVK8zRsrc+A715NBPMY5iOQwtkMfL/8XURAPeU5fPC0S5dm4qjpoA6fGy4B9MHm+6WNs3xZDxF1ZGTtGDw==", "requires": { - "micromark": "~2.11.0" + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, "micromark-extension-gfm-table": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.2.tgz", - "integrity": "sha512-AAzmj85XO1ydHYX0Lz52HGhcH2sZLm2AVvkwzELXWgZF6vGdq5yZ3CTByFRsqNUPyQBSIYFKLDAtc6KlnO42aw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz", + "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==", "requires": { - "micromark": "~2.11.0" + "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-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz", + "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==", + "requires": { + "micromark-util-types": "^1.0.0" + } }, "micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz", + "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==", + "requires": { + "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-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", + "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==" + }, + "micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", "requires": { - "micromark": "~2.11.0" + "micromark-util-types": "^1.0.0" } }, - "micromark-util-normalize-identifier": { + "micromark-util-sanitize-uri": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", "micromark-util-symbol": "^1.0.0" } }, @@ -10456,6 +7223,11 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==" }, + "micromark-util-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.0.tgz", + "integrity": "sha512-psf1WAaP1B77WpW4mBGDkTr+3RsPuDAgsvlP47GJzbH1jmjH8xjOx7Z6kp84L8oqHmy5pYO3Ev46odosZV+3AA==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -10509,22 +7281,22 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz", + "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==", "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "character-entities": "^2.0.0", + "character-entities-legacy": "^2.0.0", + "character-reference-invalid": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" } }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -10579,9 +7351,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -10604,65 +7376,6 @@ "rehype-parse": "^8.0.0", "rehype-stringify": "^9.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "rehype-parse": { @@ -10674,65 +7387,6 @@ "hast-util-from-parse5": "^7.0.0", "parse5": "^6.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "rehype-stringify": { @@ -10743,92 +7397,85 @@ "@types/hast": "^2.0.0", "hast-util-to-html": "^8.0.0", "unified": "^10.0.0" + } + }, + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" }, "dependencies": { "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" }, "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", + "bail": "^1.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" + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" } }, "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "requires": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.2" } }, "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "unist-util-stringify-position": "^2.0.0" } } } }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - } - }, "remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "requires": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - } - }, - "remark-lint": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-8.0.0.tgz", - "integrity": "sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", "requires": { - "remark-message-control": "^6.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" } }, "remark-lint-blockquote-indentation": { @@ -10845,35 +7492,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -10895,14 +7513,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -10921,26 +7531,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -10956,35 +7546,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11006,14 +7567,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11032,26 +7585,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11068,35 +7601,6 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11118,14 +7622,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11145,17 +7641,6 @@ "unist-util-is": "^5.0.0" } }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -11164,15 +7649,6 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11189,35 +7665,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11239,14 +7686,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11265,26 +7704,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11300,35 +7719,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11350,14 +7740,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11376,26 +7758,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11412,35 +7774,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11462,14 +7795,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11488,26 +7813,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11523,35 +7828,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11573,14 +7849,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11599,26 +7867,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11632,35 +7880,6 @@ "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11671,34 +7890,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11715,35 +7906,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11765,14 +7927,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11791,26 +7945,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11824,35 +7958,6 @@ "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11863,34 +7968,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -11906,35 +7983,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -11951,14 +7999,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -11977,26 +8017,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12004,44 +8024,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", - "requires": { - "@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" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, + "requires": { + "@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" + }, + "dependencies": { "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12063,14 +8054,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12089,26 +8072,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12125,35 +8088,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12170,14 +8104,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12196,26 +8122,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12231,35 +8137,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12276,14 +8153,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12302,26 +8171,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12339,35 +8188,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12389,14 +8209,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12415,26 +8227,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12451,35 +8243,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12501,14 +8264,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12527,26 +8282,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12564,40 +8299,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12619,14 +8320,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12645,26 +8338,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12682,35 +8355,6 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12732,14 +8376,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12759,17 +8395,6 @@ "unist-util-is": "^5.0.0" } }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -12778,62 +8403,24 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, "remark-lint-no-consecutive-blank-lines": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", - "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", - "requires": { - "@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" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", + "requires": { + "@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" + }, + "dependencies": { "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12855,14 +8442,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12881,26 +8460,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -12918,35 +8477,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -12968,14 +8498,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -12994,26 +8516,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13027,35 +8529,6 @@ "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13066,34 +8539,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13107,35 +8552,6 @@ "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13146,34 +8562,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13187,35 +8575,6 @@ "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13226,34 +8585,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13272,35 +8603,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13322,14 +8624,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13348,26 +8642,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13385,35 +8659,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13435,14 +8680,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13461,26 +8698,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13488,49 +8705,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", - "requires": { - "@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" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, + "requires": { + "@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" + }, + "dependencies": { "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13547,14 +8730,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13573,26 +8748,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13610,40 +8765,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13665,14 +8786,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13691,26 +8804,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13728,35 +8821,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13778,14 +8842,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13804,26 +8860,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13839,35 +8875,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13884,14 +8891,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -13910,26 +8909,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -13945,35 +8924,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -13990,14 +8940,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14016,26 +8958,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14051,35 +8973,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14096,14 +8989,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14122,26 +9007,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14158,35 +9023,6 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14208,14 +9044,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14235,17 +9063,6 @@ "unist-util-is": "^5.0.0" } }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -14254,58 +9071,20 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } - } - }, - "remark-lint-no-tabs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", - "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, + } + } + }, + "remark-lint-no-tabs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", + "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", + "requires": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "vfile-location": "^4.0.0" + }, + "dependencies": { "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14317,25 +9096,6 @@ "vfile": "^5.0.0" } }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -14344,15 +9104,6 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14379,35 +9130,6 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14429,14 +9151,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14456,17 +9170,6 @@ "unist-util-is": "^5.0.0" } }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -14475,15 +9178,6 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14499,35 +9193,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14544,14 +9209,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14570,26 +9227,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14606,35 +9243,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14656,14 +9264,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14682,26 +9282,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14729,35 +9309,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14779,14 +9330,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14805,26 +9348,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14840,35 +9363,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -14890,14 +9384,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -14916,26 +9402,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -14952,35 +9418,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -15002,14 +9439,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -15028,70 +9457,21 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, "remark-lint-table-pipes": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", - "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", - "requires": { - "@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" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", + "requires": { + "@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" + }, + "dependencies": { "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -15113,14 +9493,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -15139,26 +9511,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -15175,35 +9527,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -15225,14 +9548,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -15251,38 +9566,9 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, - "remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", - "requires": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" - } - }, "remark-parse": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", @@ -15332,48 +9618,6 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "requires": { - "argparse": "^2.0.1" - } - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", @@ -15390,14 +9634,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", @@ -15416,26 +9652,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -15464,16 +9680,6 @@ "unified": "^10.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, "mdast-comment-marker": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", @@ -15502,25 +9708,6 @@ "vfile": "^5.0.0" } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - }, "unified-message-control": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", @@ -15539,14 +9726,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, "unist-util-visit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", @@ -15566,17 +9745,6 @@ "unist-util-is": "^5.0.0" } }, - "vfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", - "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, "vfile-location": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", @@ -15585,15 +9753,6 @@ "@types/unist": "^2.0.0", "vfile": "^5.0.0" } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -15603,6 +9762,88 @@ "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "requires": { "mdast-util-to-markdown": "^0.6.0" + }, + "dependencies": { + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } } }, "repeat-string": { @@ -15626,12 +9867,12 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "rollup": { - "version": "2.36.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", - "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", + "version": "2.52.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", + "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" } }, "safe-buffer": { @@ -15698,9 +9939,9 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15714,13 +9955,6 @@ "requires": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^2.0.0" - }, - "dependencies": { - "character-entities-legacy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz", - "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==" - } } }, "strip-ansi": { @@ -15759,12 +9993,42 @@ "requires": { "is-buffer": "^2.0.0", "vfile": "^4.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } } }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, "typedarray": { "version": "0.0.6", @@ -15772,16 +10036,17 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" } }, "unified-args": { @@ -15800,9 +10065,9 @@ } }, "unified-engine": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.0.0.tgz", - "integrity": "sha512-vLUezxCnjzz+ya4pYouRQVMT8k82Rk4fIj406UidRnSFJdGXFaQyQklAnalsQHJrLqAlaYPkXPUa1upfVSHGCA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.2.0.tgz", + "integrity": "sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA==", "requires": { "concat-stream": "^2.0.0", "debug": "^4.0.0", @@ -15821,6 +10086,35 @@ "unist-util-inspect": "^5.0.0", "vfile-reporter": "^6.0.0", "vfile-statistics": "^1.1.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + } } }, "unified-lint-rule": { @@ -15831,15 +10125,6 @@ "wrapped": "^1.0.1" } }, - "unified-message-control": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.2.tgz", - "integrity": "sha512-lhF8fKjDo2cIPx1re5X1QinqUonl+AN6F0XfEaab8w/hjqX7FZAhzu4P8g6pmYp09ld+HSWFwdRJj+Y8xD0q7Q==", - "requires": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" - } - }, "unist-util-generated": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", @@ -15864,11 +10149,11 @@ "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "requires": { - "@types/unist": "^2.0.2" + "@types/unist": "^2.0.0" } }, "unist-util-visit": { @@ -15896,14 +10181,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.0.2.tgz", + "integrity": "sha512-5cV+K7tX83MT3bievROc+7AvHv0GXDB0zqbrTjbOe+HRbkzvY4EP+wS3IR77kUBCoWFMdG9py18t0sesPtQ1Rw==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" } }, "vfile-location": { @@ -15912,12 +10197,12 @@ "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" }, "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", + "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", "requires": { "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "unist-util-stringify-position": "^3.0.0" } }, "vfile-reporter": { @@ -15945,6 +10230,14 @@ "requires": { "has-flag": "^3.0.0" } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } } } }, @@ -15983,9 +10276,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==" } } } diff --git a/tools/node-lint-md-cli-rollup/package.json b/tools/node-lint-md-cli-rollup/package.json index 6357c6210d4127..0ce68f4a8a0906 100644 --- a/tools/node-lint-md-cli-rollup/package.json +++ b/tools/node-lint-md-cli-rollup/package.json @@ -3,17 +3,16 @@ "description": "remark packaged for Node.js Markdown linting", "version": "2.0.2", "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-commonjs": "^20.0.0", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^11.0.1", - "rollup": "^2.36.1", + "@rollup/plugin-node-resolve": "^13.0.4", + "rollup": "^2.52.7", "shx": "^0.3.3" }, "dependencies": { "markdown-extensions": "^1.1.1", "remark": "^13.0.0", - "remark-gfm": "^1.0.0", - "remark-lint": "^8.0.0", + "remark-gfm": "^2.0.0", "remark-preset-lint-node": "^3.0.0", "unified-args": "^8.1.0" }, From 2b02f747c3a278d45ad474aef100d4c3f4419da8 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 17 Aug 2021 06:39:38 -0700 Subject: [PATCH 04/33] doc: fix lint errors in packages.md Code samples that use CJS-only syntax need to use the cjs markdown identifiers. PR-URL: https://github.com/nodejs/node/pull/39792 Reviewed-By: Richard Lau Reviewed-By: Myles Borins Reviewed-By: Antoine du Hamel Reviewed-By: Robert Nagy --- doc/api/packages.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/packages.md b/doc/api/packages.md index 02884be862759c..0278b649087661 100644 --- a/doc/api/packages.md +++ b/doc/api/packages.md @@ -720,12 +720,12 @@ code will also work: } ``` -```js +```cjs // ./index.js module.exports = 42; ``` -```js +```cjs // ./other.js console.log(require('@my/package')); ``` From 3041d572019c7d75cd32bca11c818e6ab1065d73 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 13 Aug 2021 10:50:14 -0700 Subject: [PATCH 05/33] doc: fix malformed changelog entries PR-URL: https://github.com/nodejs/node/pull/39791 Reviewed-By: Antoine du Hamel Reviewed-By: Gireesh Punathil --- doc/changelogs/CHANGELOG_V012.md | 238 +++++++++++++------------------ 1 file changed, 97 insertions(+), 141 deletions(-) diff --git a/doc/changelogs/CHANGELOG_V012.md b/doc/changelogs/CHANGELOG_V012.md index 3b2d19692ca8ce..8cfe45a7d48a33 100644 --- a/doc/changelogs/CHANGELOG_V012.md +++ b/doc/changelogs/CHANGELOG_V012.md @@ -65,13 +65,13 @@ will be maintained until December 31st, 2016. ### Commits: -* [[`a47fd4549d`](https://github.com/nodejs/node/commit/a47fd4549d) - build: add working lint-ci make target (Rod Vagg) https://github.com/nodejs/node/pull/9151 -* [[`830584ca59`](https://github.com/nodejs/node/commit/830584ca59) - deps: define missing operator delete functions (John Barboza) https://github.com/nodejs/node/pull/10356 -* [[`c130b31cba`](https://github.com/nodejs/node/commit/c130b31cba) - deps: upgrade npm to 2.15.11 (Jeremiah Senkpiel) https://github.com/nodejs/node/pull/9619 -* [[`bc6766d847`](https://github.com/nodejs/node/commit/bc6766d847) - doc: update npm license in main LICENSE file (Rod Vagg) https://github.com/nodejs/node/pull/10352 -* [[`0cdf344c80`](https://github.com/nodejs/node/commit/0cdf344c80) - (SEMVER-MINOR) process: reintroduce ares to versions (Johan Bergström) https://github.com/nodejs/node/pull/9191 -* [[`d8e27ec30a`](https://github.com/nodejs/node/commit/d8e27ec30a) - test: mark dgram-multicast-multi-process as flaky (Rod Vagg) https://github.com/nodejs/node/pull/9150 -* [[`c722335ead`](https://github.com/nodejs/node/commit/c722335ead) - tls: fix minor jslint failure (Rod Vagg) https://github.com/nodejs/node/pull/9107 +* [[`a47fd4549d`](https://github.com/nodejs/node/commit/a47fd4549d)] - build: add working lint-ci make target (Rod Vagg) https://github.com/nodejs/node/pull/9151 +* [[`830584ca59`](https://github.com/nodejs/node/commit/830584ca59)] - deps: define missing operator delete functions (John Barboza) https://github.com/nodejs/node/pull/10356 +* [[`c130b31cba`](https://github.com/nodejs/node/commit/c130b31cba)] - deps: upgrade npm to 2.15.11 (Jeremiah Senkpiel) https://github.com/nodejs/node/pull/9619 +* [[`bc6766d847`](https://github.com/nodejs/node/commit/bc6766d847)] - doc: update npm license in main LICENSE file (Rod Vagg) https://github.com/nodejs/node/pull/10352 +* [[`0cdf344c80`](https://github.com/nodejs/node/commit/0cdf344c80)] - (SEMVER-MINOR) process: reintroduce ares to versions (Johan Bergström) https://github.com/nodejs/node/pull/9191 +* [[`d8e27ec30a`](https://github.com/nodejs/node/commit/d8e27ec30a)] - test: mark dgram-multicast-multi-process as flaky (Rod Vagg) https://github.com/nodejs/node/pull/9150 +* [[`c722335ead`](https://github.com/nodejs/node/commit/c722335ead)] - tls: fix minor jslint failure (Rod Vagg) https://github.com/nodejs/node/pull/9107 ## 2016-10-18, Version 0.12.17 (Maintenance), @rvagg @@ -84,7 +84,7 @@ This is a security release. All Node.js users should consult the security releas ### Commits: -* [[`c5b095ecf8`](https://github.com/nodejs/node/commit/c5b095ecf8) - deps: avoid single-byte buffer overwrite (Daniel Stenberg) https://github.com/nodejs/node/pull/8849 +* [[`c5b095ecf8`](https://github.com/nodejs/node/commit/c5b095ecf8)] - deps: avoid single-byte buffer overwrite (Daniel Stenberg) https://github.com/nodejs/node/pull/8849 ## 2016-09-27, Version 0.12.16 (Maintenance), @rvagg @@ -104,18 +104,18 @@ This is a security release. All Node.js users should consult the security releas ### Commits: -* [[`38d7258d89`](https://github.com/nodejs/node/commit/38d7258d89) - buffer: zero-fill uninitialized bytes in .concat() (Сковорода Никита Андреевич) https://github.com/nodejs/node-private/pull/66 -* [[`1ba6d16786`](https://github.com/nodejs/node/commit/1ba6d16786) - build: turn on -fno-delete-null-pointer-checks (Ben Noordhuis) https://github.com/nodejs/node/pull/6737 -* [[`71e4285e27`](https://github.com/nodejs/node/commit/71e4285e27) - crypto: don't build hardware engines (Rod Vagg) https://github.com/nodejs/node-private/pull/69 -* [[`b6e0105a66`](https://github.com/nodejs/node/commit/b6e0105a66) - deps: add -no_rand_screen to openssl s_client (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25368 -* [[`1caec97eab`](https://github.com/nodejs/node/commit/1caec97eab) - deps: fix openssl assembly error on ia32 win32 (Fedor Indutny) https://github.com/nodejs/node-v0.x-archive/pull/25654 -* [[`734bc6938b`](https://github.com/nodejs/node/commit/734bc6938b) - deps: separate sha256/sha512-x86_64.pl for openssl (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25654 -* [[`7cc6d4eb5c`](https://github.com/nodejs/node/commit/7cc6d4eb5c) - deps: copy all openssl header files to include dir (Shigeki Ohtsu) https://github.com/nodejs/node/pull/8718 -* [[`4a9da21217`](https://github.com/nodejs/node/commit/4a9da21217) - deps: upgrade openssl sources to 1.0.1u (Shigeki Ohtsu) https://github.com/nodejs/node/pull/8718 -* [[`6d977902bd`](https://github.com/nodejs/node/commit/6d977902bd) - http: check reason chars in writeHead (Evan Lucas) https://github.com/nodejs/node-private/pull/47 -* [[`ad470e496b`](https://github.com/nodejs/node/commit/ad470e496b) - http: disallow sending obviously invalid status codes (Evan Lucas) https://github.com/nodejs/node-private/pull/47 -* [[`9dbde2fc88`](https://github.com/nodejs/node/commit/9dbde2fc88) - lib: make tls.checkServerIdentity() more strict (Ben Noordhuis) https://github.com/nodejs/node-private/pull/61 -* [[`db80592071`](https://github.com/nodejs/node/commit/db80592071) - openssl: fix keypress requirement in apps on win32 (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25654 +* [[`38d7258d89`](https://github.com/nodejs/node/commit/38d7258d89)] - buffer: zero-fill uninitialized bytes in .concat() (Сковорода Никита Андреевич) https://github.com/nodejs/node-private/pull/66 +* [[`1ba6d16786`](https://github.com/nodejs/node/commit/1ba6d16786)] - build: turn on -fno-delete-null-pointer-checks (Ben Noordhuis) https://github.com/nodejs/node/pull/6737 +* [[`71e4285e27`](https://github.com/nodejs/node/commit/71e4285e27)] - crypto: don't build hardware engines (Rod Vagg) https://github.com/nodejs/node-private/pull/69 +* [[`b6e0105a66`](https://github.com/nodejs/node/commit/b6e0105a66)] - deps: add -no_rand_screen to openssl s_client (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25368 +* [[`1caec97eab`](https://github.com/nodejs/node/commit/1caec97eab)] - deps: fix openssl assembly error on ia32 win32 (Fedor Indutny) https://github.com/nodejs/node-v0.x-archive/pull/25654 +* [[`734bc6938b`](https://github.com/nodejs/node/commit/734bc6938b)] - deps: separate sha256/sha512-x86_64.pl for openssl (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25654 +* [[`7cc6d4eb5c`](https://github.com/nodejs/node/commit/7cc6d4eb5c)] - deps: copy all openssl header files to include dir (Shigeki Ohtsu) https://github.com/nodejs/node/pull/8718 +* [[`4a9da21217`](https://github.com/nodejs/node/commit/4a9da21217)] - deps: upgrade openssl sources to 1.0.1u (Shigeki Ohtsu) https://github.com/nodejs/node/pull/8718 +* [[`6d977902bd`](https://github.com/nodejs/node/commit/6d977902bd)] - http: check reason chars in writeHead (Evan Lucas) https://github.com/nodejs/node-private/pull/47 +* [[`ad470e496b`](https://github.com/nodejs/node/commit/ad470e496b)] - http: disallow sending obviously invalid status codes (Evan Lucas) https://github.com/nodejs/node-private/pull/47 +* [[`9dbde2fc88`](https://github.com/nodejs/node/commit/9dbde2fc88)] - lib: make tls.checkServerIdentity() more strict (Ben Noordhuis) https://github.com/nodejs/node-private/pull/61 +* [[`db80592071`](https://github.com/nodejs/node/commit/db80592071)] - openssl: fix keypress requirement in apps on win32 (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25654 ## 2016-06-23, Version 0.12.15 (Maintenance), @rvagg @@ -129,13 +129,13 @@ This is a security release. All Node.js users should consult the security releas ### Commits: -* [[`da8501edf6`](https://github.com/nodejs/node/commit/da8501edf6) - deps: backport bd1777fd from libuv upstream (Rod Vagg) -* [[`9207a00f8e`](https://github.com/nodejs/node/commit/9207a00f8e) - deps: backport 85adf43e from libuv upstream (Rod Vagg) -* [[`9627f34230`](https://github.com/nodejs/node/commit/9627f34230) - deps: backport 98239224 from libuv upstream (Rod Vagg) -* [[`5df21b2e36`](https://github.com/nodejs/node/commit/5df21b2e36) - deps: backport 9a4fd268 from libuv upstream (Rod Vagg) -* [[`e75de35057`](https://github.com/nodejs/node/commit/e75de35057) - deps: backport 3eb6764a from libuv upstream (Rod Vagg) -* [[`a113e02f16`](https://github.com/nodejs/node/commit/a113e02f16) - deps: backport 3a9bfec from v8 upstream (Ben Noordhuis) -* [[`8138055c88`](https://github.com/nodejs/node/commit/8138055c88) - test: fix test failure due to expired certificates (Ben Noordhuis) https://github.com/nodejs/node/pull/7195 +* [[`da8501edf6`](https://github.com/nodejs/node/commit/da8501edf6)] - deps: backport bd1777fd from libuv upstream (Rod Vagg) +* [[`9207a00f8e`](https://github.com/nodejs/node/commit/9207a00f8e)] - deps: backport 85adf43e from libuv upstream (Rod Vagg) +* [[`9627f34230`](https://github.com/nodejs/node/commit/9627f34230)] - deps: backport 98239224 from libuv upstream (Rod Vagg) +* [[`5df21b2e36`](https://github.com/nodejs/node/commit/5df21b2e36)] - deps: backport 9a4fd268 from libuv upstream (Rod Vagg) +* [[`e75de35057`](https://github.com/nodejs/node/commit/e75de35057)] - deps: backport 3eb6764a from libuv upstream (Rod Vagg) +* [[`a113e02f16`](https://github.com/nodejs/node/commit/a113e02f16)] - deps: backport 3a9bfec from v8 upstream (Ben Noordhuis) +* [[`8138055c88`](https://github.com/nodejs/node/commit/8138055c88)] - test: fix test failure due to expired certificates (Ben Noordhuis) https://github.com/nodejs/node/pull/7195 ## 2016-05-06, Version 0.12.14 (Maintenance), @rvagg @@ -150,15 +150,15 @@ This is a security release. All Node.js users should consult the security releas ### Commits: -* [[`3e99ee1b47`](https://github.com/nodejs/node/commit/3e99ee1b47) - deps: completely upgrade npm in LTS to 2.15.1 (Forrest L Norvell) https://github.com/nodejs/node/pull/5988 -* [[`2b63396e1f`](https://github.com/nodejs/node/commit/2b63396e1f) - deps: add -no_rand_screen to openssl s_client (Shigeki Ohtsu) https://github.com/joyent/node/pull/25368 -* [[`f21705df58`](https://github.com/nodejs/node/commit/f21705df58) - deps: update openssl asm files (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 -* [[`02b6a6bc27`](https://github.com/nodejs/node/commit/02b6a6bc27) - deps: fix openssl assembly error on ia32 win32 (Fedor Indutny) https://github.com/joyent/node/pull/25654 -* [[`1aecc668b0`](https://github.com/nodejs/node/commit/1aecc668b0) - deps: separate sha256/sha512-x86_64.pl for openssl (Shigeki Ohtsu) https://github.com/joyent/node/pull/25654 -* [[`39380836a0`](https://github.com/nodejs/node/commit/39380836a0) - deps: copy all openssl header files to include dir (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 -* [[`08c8ae44a8`](https://github.com/nodejs/node/commit/08c8ae44a8) - deps: upgrade openssl sources to 1.0.1t (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 -* [[`f5a961ab13`](https://github.com/nodejs/node/commit/f5a961ab13) - openssl: fix keypress requirement in apps on win32 (Shigeki Ohtsu) https://github.com/joyent/node/pull/25654 -* [[`810fb211a7`](https://github.com/nodejs/node/commit/810fb211a7) - tools: remove obsolete npm test-legacy command (Kat Marchán) https://github.com/nodejs/node/pull/5988 +* [[`3e99ee1b47`](https://github.com/nodejs/node/commit/3e99ee1b47)] - deps: completely upgrade npm in LTS to 2.15.1 (Forrest L Norvell) https://github.com/nodejs/node/pull/5988 +* [[`2b63396e1f`](https://github.com/nodejs/node/commit/2b63396e1f)] - deps: add -no_rand_screen to openssl s_client (Shigeki Ohtsu) https://github.com/joyent/node/pull/25368 +* [[`f21705df58`](https://github.com/nodejs/node/commit/f21705df58)] - deps: update openssl asm files (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 +* [[`02b6a6bc27`](https://github.com/nodejs/node/commit/02b6a6bc27)] - deps: fix openssl assembly error on ia32 win32 (Fedor Indutny) https://github.com/joyent/node/pull/25654 +* [[`1aecc668b0`](https://github.com/nodejs/node/commit/1aecc668b0)] - deps: separate sha256/sha512-x86_64.pl for openssl (Shigeki Ohtsu) https://github.com/joyent/node/pull/25654 +* [[`39380836a0`](https://github.com/nodejs/node/commit/39380836a0)] - deps: copy all openssl header files to include dir (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 +* [[`08c8ae44a8`](https://github.com/nodejs/node/commit/08c8ae44a8)] - deps: upgrade openssl sources to 1.0.1t (Shigeki Ohtsu) https://github.com/nodejs/node/pull/6553 +* [[`f5a961ab13`](https://github.com/nodejs/node/commit/f5a961ab13)] - openssl: fix keypress requirement in apps on win32 (Shigeki Ohtsu) https://github.com/joyent/node/pull/25654 +* [[`810fb211a7`](https://github.com/nodejs/node/commit/810fb211a7)] - tools: remove obsolete npm test-legacy command (Kat Marchán) https://github.com/nodejs/node/pull/5988 ## 2016-03-31, Version 0.12.13 (LTS), @rvagg @@ -170,12 +170,12 @@ This is a security release. All Node.js users should consult the security releas ### Commits -* [[`4041ea6bc5`](https://github.com/nodejs/node/commit/4041ea6bc5) - deps: upgrade npm in LTS to 2.15.1 (Forrest L Norvell) -* [[`a115779026`](https://github.com/nodejs/node/commit/a115779026) - deps: Disable EXPORT and LOW ciphers in openssl (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5712 -* [[`ab907eb5a8`](https://github.com/nodejs/node/commit/ab907eb5a8) - test: skip cluster-disconnect-race on Windows (Gibson Fahnestock) https://github.com/nodejs/node/pull/5621 -* [[`9c06db7444`](https://github.com/nodejs/node/commit/9c06db7444) - test: change tls tests not to use LOW cipher (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5712 -* [[`154098a3dc`](https://github.com/nodejs/node/commit/154098a3dc) - test: bp fix for test-http-get-pipeline-problem.js (Michael Dawson) https://github.com/nodejs/node/pull/3013 -* [[`ff2bed6e86`](https://github.com/nodejs/node/commit/ff2bed6e86) - win,build: support Visual C++ Build Tools 2015 (João Reis) https://github.com/nodejs/node/pull/5627 +* [[`4041ea6bc5`](https://github.com/nodejs/node/commit/4041ea6bc5)] - deps: upgrade npm in LTS to 2.15.1 (Forrest L Norvell) +* [[`a115779026`](https://github.com/nodejs/node/commit/a115779026)] - deps: Disable EXPORT and LOW ciphers in openssl (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5712 +* [[`ab907eb5a8`](https://github.com/nodejs/node/commit/ab907eb5a8)] - test: skip cluster-disconnect-race on Windows (Gibson Fahnestock) https://github.com/nodejs/node/pull/5621 +* [[`9c06db7444`](https://github.com/nodejs/node/commit/9c06db7444)] - test: change tls tests not to use LOW cipher (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5712 +* [[`154098a3dc`](https://github.com/nodejs/node/commit/154098a3dc)] - test: bp fix for test-http-get-pipeline-problem.js (Michael Dawson) https://github.com/nodejs/node/pull/3013 +* [[`ff2bed6e86`](https://github.com/nodejs/node/commit/ff2bed6e86)] - win,build: support Visual C++ Build Tools 2015 (João Reis) https://github.com/nodejs/node/pull/5627 ## 2016-03-08, Version 0.12.12 (LTS), @rvagg @@ -188,7 +188,7 @@ Note that the upgrade to OpenSSL 1.0.1s in Node.js v0.12.11 removed internal SSL ### Commits: -* [[`dbfc9d9241`](https://github.com/nodejs/node/commit/dbfc9d9241) - crypto,tls: remove SSLv2 support (Ben Noordhuis) https://github.com/nodejs/node/pull/5536 +* [[`dbfc9d9241`](https://github.com/nodejs/node/commit/dbfc9d9241)] - crypto,tls: remove SSLv2 support (Ben Noordhuis) https://github.com/nodejs/node/pull/5536 ## 2016-03-03, Version 0.12.11 (LTS), @rvagg @@ -206,20 +206,20 @@ Note that the upgrade to OpenSSL 1.0.1s in Node.js v0.12.11 removed internal SSL ### Commits: -* [[`1ab6653db9`](https://github.com/nodejs/node/commit/1ab6653db9) - build: update Node.js logo on OSX installer (Rod Vagg) https://github.com/nodejs/node/pull/5401 -* [[`fcc64792ae`](https://github.com/nodejs/node/commit/fcc64792ae) - child_process: guard against race condition (Rich Trott) https://github.com/nodejs/node/pull/5153 -* [[`6c468df9af`](https://github.com/nodejs/node/commit/6c468df9af) - child_process: fix data loss with readable event (Brian White) https://github.com/nodejs/node/pull/5037 -* [[`61a22019c2`](https://github.com/nodejs/node/commit/61a22019c2) - deps: upgrade openssl to 1.0.1s (Ben Noordhuis) https://github.com/nodejs/node/pull/5509 -* [[`fa26b13df7`](https://github.com/nodejs/node/commit/fa26b13df7) - deps: update to http-parser 2.3.2 (James M Snell) https://github.com/nodejs/node/pull/5241 -* [[`46c8e2165f`](https://github.com/nodejs/node/commit/46c8e2165f) - deps: backport 1f8555 from v8's upstream (Trevor Norris) https://github.com/nodejs/node/pull/3945 -* [[`ce58c2c31a`](https://github.com/nodejs/node/commit/ce58c2c31a) - doc: remove SSLv2 descriptions (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5541 -* [[`018e4e0b1a`](https://github.com/nodejs/node/commit/018e4e0b1a) - domains: fix handling of uncaught exceptions (Julien Gilli) https://github.com/nodejs/node/pull/3885 -* [[`d421e85dc9`](https://github.com/nodejs/node/commit/d421e85dc9) - lib: fix cluster handle leak (Rich Trott) https://github.com/nodejs/node/pull/5152 -* [[`3a48f0022f`](https://github.com/nodejs/node/commit/3a48f0022f) - node: fix leaking Context handle (Trevor Norris) https://github.com/nodejs/node/pull/3945 -* [[`28dddabf6a`](https://github.com/nodejs/node/commit/28dddabf6a) - src: fix build error without OpenSSL support (Jörg Krause) https://github.com/nodejs/node/pull/4201 -* [[`a79baf03cd`](https://github.com/nodejs/node/commit/a79baf03cd) - src: use global SealHandleScope (Trevor Norris) https://github.com/nodejs/node/pull/3945 -* [[`be39f30447`](https://github.com/nodejs/node/commit/be39f30447) - test: add test-domain-exit-dispose-again back (Julien Gilli) https://github.com/nodejs/node/pull/4278 -* [[`da66166b9a`](https://github.com/nodejs/node/commit/da66166b9a) - test: fix test-domain-exit-dispose-again (Julien Gilli) https://github.com/nodejs/node/pull/3991 +* [[`1ab6653db9`](https://github.com/nodejs/node/commit/1ab6653db9)] - build: update Node.js logo on OSX installer (Rod Vagg) https://github.com/nodejs/node/pull/5401 +* [[`fcc64792ae`](https://github.com/nodejs/node/commit/fcc64792ae)] - child_process: guard against race condition (Rich Trott) https://github.com/nodejs/node/pull/5153 +* [[`6c468df9af`](https://github.com/nodejs/node/commit/6c468df9af)] - child_process: fix data loss with readable event (Brian White) https://github.com/nodejs/node/pull/5037 +* [[`61a22019c2`](https://github.com/nodejs/node/commit/61a22019c2)] - deps: upgrade openssl to 1.0.1s (Ben Noordhuis) https://github.com/nodejs/node/pull/5509 +* [[`fa26b13df7`](https://github.com/nodejs/node/commit/fa26b13df7)] - deps: update to http-parser 2.3.2 (James M Snell) https://github.com/nodejs/node/pull/5241 +* [[`46c8e2165f`](https://github.com/nodejs/node/commit/46c8e2165f)] - deps: backport 1f8555 from v8's upstream (Trevor Norris) https://github.com/nodejs/node/pull/3945 +* [[`ce58c2c31a`](https://github.com/nodejs/node/commit/ce58c2c31a)] - doc: remove SSLv2 descriptions (Shigeki Ohtsu) https://github.com/nodejs/node/pull/5541 +* [[`018e4e0b1a`](https://github.com/nodejs/node/commit/018e4e0b1a)] - domains: fix handling of uncaught exceptions (Julien Gilli) https://github.com/nodejs/node/pull/3885 +* [[`d421e85dc9`](https://github.com/nodejs/node/commit/d421e85dc9)] - lib: fix cluster handle leak (Rich Trott) https://github.com/nodejs/node/pull/5152 +* [[`3a48f0022f`](https://github.com/nodejs/node/commit/3a48f0022f)] - node: fix leaking Context handle (Trevor Norris) https://github.com/nodejs/node/pull/3945 +* [[`28dddabf6a`](https://github.com/nodejs/node/commit/28dddabf6a)] - src: fix build error without OpenSSL support (Jörg Krause) https://github.com/nodejs/node/pull/4201 +* [[`a79baf03cd`](https://github.com/nodejs/node/commit/a79baf03cd)] - src: use global SealHandleScope (Trevor Norris) https://github.com/nodejs/node/pull/3945 +* [[`be39f30447`](https://github.com/nodejs/node/commit/be39f30447)] - test: add test-domain-exit-dispose-again back (Julien Gilli) https://github.com/nodejs/node/pull/4278 +* [[`da66166b9a`](https://github.com/nodejs/node/commit/da66166b9a)] - test: fix test-domain-exit-dispose-again (Julien Gilli) https://github.com/nodejs/node/pull/3991 ## 2016-02-09, Version 0.12.10 (LTS), @jasnell @@ -240,14 +240,14 @@ This is an important security release. All Node.js users should consult the secu ### Commits -* [[`4312848bff`](https://github.com/nodejs/node/commit/4312848bff) - build: enable xz compressed tarballs where possible (Rod Vagg) https://github.com/nodejs/node/pull/4894 -* [[`247626245c`](https://github.com/nodejs/node/commit/247626245c) - deps: upgrade openssl sources to 1.0.1r (Shigeki Ohtsu) https://github.com/joyent/node/pull/25368 -* [[`744c9749fc`](https://github.com/nodejs/node/commit/744c9749fc) - deps: update http-parser to version 2.3.1 (James M Snell) -* [[`d1c56ec7d1`](https://github.com/nodejs/node/commit/d1c56ec7d1) - doc: clarify v0.12.9 notable items (Rod Vagg) https://github.com/nodejs/node/pull/4154 -* [[`e128d9a5b4`](https://github.com/nodejs/node/commit/e128d9a5b4) - http: strictly forbid invalid characters from headers (James M Snell) -* [[`bdb9f2cf89`](https://github.com/nodejs/node/commit/bdb9f2cf89) - src: avoiding compiler warnings in node_revert.cc (James M Snell) -* [[`23bced1fb3`](https://github.com/nodejs/node/commit/23bced1fb3) - src: add --security-revert command line flag (James M Snell) -* [[`f41a3c73e7`](https://github.com/nodejs/node/commit/f41a3c73e7) - tools: backport tools/install.py for headers (Richard Lau) https://github.com/nodejs/node/pull/4149 +* [[`4312848bff`](https://github.com/nodejs/node/commit/4312848bff)] - build: enable xz compressed tarballs where possible (Rod Vagg) https://github.com/nodejs/node/pull/4894 +* [[`247626245c`](https://github.com/nodejs/node/commit/247626245c)] - deps: upgrade openssl sources to 1.0.1r (Shigeki Ohtsu) https://github.com/joyent/node/pull/25368 +* [[`744c9749fc`](https://github.com/nodejs/node/commit/744c9749fc)] - deps: update http-parser to version 2.3.1 (James M Snell) +* [[`d1c56ec7d1`](https://github.com/nodejs/node/commit/d1c56ec7d1)] - doc: clarify v0.12.9 notable items (Rod Vagg) https://github.com/nodejs/node/pull/4154 +* [[`e128d9a5b4`](https://github.com/nodejs/node/commit/e128d9a5b4)] - http: strictly forbid invalid characters from headers (James M Snell) +* [[`bdb9f2cf89`](https://github.com/nodejs/node/commit/bdb9f2cf89)] - src: avoiding compiler warnings in node_revert.cc (James M Snell) +* [[`23bced1fb3`](https://github.com/nodejs/node/commit/23bced1fb3)] - src: add --security-revert command line flag (James M Snell) +* [[`f41a3c73e7`](https://github.com/nodejs/node/commit/f41a3c73e7)] - tools: backport tools/install.py for headers (Richard Lau) https://github.com/nodejs/node/pull/4149 ## 2015-12-04, Version 0.12.9 (LTS), @rvagg @@ -261,86 +261,42 @@ Security Update ### Commits -* [[`8d24a14f2c`](https://github.com/nodejs/node/commit/8d24a14f2c) - deps: upgrade to openssl 1.0.1q (Ben Noordhuis) https://github.com/nodejs/node/pull/4133 -* [[`dfc6f4a9af`](https://github.com/nodejs/node/commit/dfc6f4a9af) - http: fix pipeline regression (Fedor Indutny) +* [[`8d24a14f2c`](https://github.com/nodejs/node/commit/8d24a14f2c)] - deps: upgrade to openssl 1.0.1q (Ben Noordhuis) https://github.com/nodejs/node/pull/4133 +* [[`dfc6f4a9af`](https://github.com/nodejs/node/commit/dfc6f4a9af)] - http: fix pipeline regression (Fedor Indutny) ## 2015.11.25, Version 0.12.8 (LTS), @rvagg -* [[`d9399569bd`](https://github.com/nodejs/node/commit/d9399569bd) - build: backport tools/release.sh (Rod Vagg) https://github.com/nodejs/node/pull/3642 -* [[`78c5b4c8bd`](https://github.com/nodejs/node/commit/78c5b4c8bd) - build: backport config for new CI infrastructure (Rod Vagg) https://github.com/nodejs/node/pull/3642 -* [[`83441616a5`](https://github.com/nodejs/node/commit/83441616a5) - build: fix --without-ssl compile time error (Ben Noordhuis) https://github.com/nodejs/node/pull/3825 -* [[`8887666b0b`](https://github.com/nodejs/node/commit/8887666b0b) - build: update manifest to include Windows 10 (Lucien Greathouse) https://github.com/nodejs/node/pull/2843 -* [[`08afe4ec8e`](https://github.com/nodejs/node/commit/08afe4ec8e) - build: add MSVS 2015 support (Rod Vagg) https://github.com/nodejs/node/pull/2843 -* [[`4f2456369c`](https://github.com/nodejs/node/commit/4f2456369c) - build: work around VS2015 issue in ICU <56 (Steven R. Loomis) https://github.com/nodejs/node-v0.x-archive/pull/25804 -* [[`15030f26fd`](https://github.com/nodejs/node/commit/15030f26fd) - build: Intl: bump ICU4C from 54 to 55 (backport) (Steven R. Loomis) https://github.com/nodejs/node-v0.x-archive/pull/25856 -* [[`1083fa70f0`](https://github.com/nodejs/node/commit/1083fa70f0) - build: run-ci makefile rule (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`2d2494cf14`](https://github.com/nodejs/node/commit/2d2494cf14) - build: support flaky tests in test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`b25d26f2ef`](https://github.com/nodejs/node/commit/b25d26f2ef) - build: support Jenkins via test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`7e4b47f38a`](https://github.com/nodejs/node/commit/7e4b47f38a) - build,win: fix node.exe resource version (João Reis) https://github.com/nodejs/node/pull/3053 -* [[`e07c86e240`](https://github.com/nodejs/node/commit/e07c86e240) - build,win: try next MSVS version on failure (João Reis) https://github.com/nodejs/node/pull/2843 -* [[`b5a0abcfdf`](https://github.com/nodejs/node/commit/b5a0abcfdf) - child_process: clone spawn options argument (cjihrig) https://github.com/nodejs/node-v0.x-archive/pull/9159 -* [[`8b81f98c41`](https://github.com/nodejs/node/commit/8b81f98c41) - configure: add --without-mdb flag (cgalibern) https://github.com/nodejs/node-v0.x-archive/pull/25707 -* [[`071c860c2b`](https://github.com/nodejs/node/commit/071c860c2b) - crypto: replace rwlocks with simple mutexes (Ben Noordhuis) https://github.com/nodejs/node/pull/2723 -* [[`ca97fb6be3`](https://github.com/nodejs/node/commit/ca97fb6be3) - deps: upgrade npm to 2.14.9 (Forrest L Norvell) https://github.com/nodejs/node/pull/3684 -* [[`583734342e`](https://github.com/nodejs/node/commit/583734342e) - deps: fix openssl for MSVS 2015 (Andy Polyakov) https://github.com/nodejs/node/pull/2843 -* [[`02c262a4c6`](https://github.com/nodejs/node/commit/02c262a4c6) - deps: fix gyp to work on MacOSX without XCode (Shigeki Ohtsu) https://github.com/nodejs/node/pull/2843 -* [[`f0fba0bce8`](https://github.com/nodejs/node/commit/f0fba0bce8) - deps: update gyp to 25ed9ac (João Reis) https://github.com/nodejs/node/pull/2843 -* [[`f693565813`](https://github.com/nodejs/node/commit/f693565813) - deps: upgrade to npm 2.13.4 (Kat Marchán) https://github.com/nodejs/node-v0.x-archive/pull/25825 -* [[`618b142679`](https://github.com/nodejs/node/commit/618b142679) - deps,v8: fix compilation in VS2015 (João Reis) https://github.com/nodejs/node/pull/2843 -* [[`49b4f0d54e`](https://github.com/nodejs/node/commit/49b4f0d54e) - doc: backport README.md (Rod Vagg) https://github.com/nodejs/node/pull/3642 -* [[`2860c53562`](https://github.com/nodejs/node/commit/2860c53562) - doc: fixed child_process.exec doc (Tyler Anton) https://github.com/nodejs/node-v0.x-archive/pull/14088 -* [[`4a91fa11a3`](https://github.com/nodejs/node/commit/4a91fa11a3) - doc: Update docs for os.platform() (George Kotchlamazashvili) https://github.com/nodejs/node-v0.x-archive/pull/25777 -* [[`b03ab02fe8`](https://github.com/nodejs/node/commit/b03ab02fe8) - doc: Change the link for v8 docs to v8dox.com (Chad Walker) https://github.com/nodejs/node-v0.x-archive/pull/25811 -* [[`1fd8f37efd`](https://github.com/nodejs/node/commit/1fd8f37efd) - doc: buffer, adding missing backtick (Dyana Rose) https://github.com/nodejs/node-v0.x-archive/pull/25811 -* [[`162d0db3bb`](https://github.com/nodejs/node/commit/162d0db3bb) - doc: tls.markdown, adjust version from v0.10.39 to v0.10.x (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`eda2560cdc`](https://github.com/nodejs/node/commit/eda2560cdc) - doc: additional refinement to readable event (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`881d9bea01`](https://github.com/nodejs/node/commit/881d9bea01) - doc: readable event clarification (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`b6378f0c75`](https://github.com/nodejs/node/commit/b6378f0c75) - doc: stream.unshift does not reset reading state (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`4952e2b4d2`](https://github.com/nodejs/node/commit/4952e2b4d2) - doc: clarify Readable._read and Readable.push (fresheneesz) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`14000b97d4`](https://github.com/nodejs/node/commit/14000b97d4) - doc: two minor stream doc improvements (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`6b6bd21497`](https://github.com/nodejs/node/commit/6b6bd21497) - doc: Clarified read method with specified size argument. (Philippe Laferriere) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`16f547600a`](https://github.com/nodejs/node/commit/16f547600a) - doc: Document http.request protocol option (Ville Skyttä) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`618e4ecda9`](https://github.com/nodejs/node/commit/618e4ecda9) - doc: add a note about readable in flowing mode (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`0b165be37b`](https://github.com/nodejs/node/commit/0b165be37b) - doc: fix line wrapping in buffer.markdown (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`70dd13f88d`](https://github.com/nodejs/node/commit/70dd13f88d) - doc: add CleartextStream deprecation notice (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`418cde0765`](https://github.com/nodejs/node/commit/418cde0765) - doc: mention that mode is ignored if file exists (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`85bcb281e4`](https://github.com/nodejs/node/commit/85bcb281e4) - doc: improve http.abort description (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`5ccb429ee8`](https://github.com/nodejs/node/commit/5ccb429ee8) - doc, comments: Grammar and spelling fixes (Ville Skyttä) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`a24db43101`](https://github.com/nodejs/node/commit/a24db43101) - docs: event emitter behavior notice (Samuel Mills (Henchman)) https://github.com/nodejs/node-v0.x-archive/pull/25467 -* [[`8cbf7cb021`](https://github.com/nodejs/node/commit/8cbf7cb021) - docs: events clarify emitter.listener() behavior (Benjamin Steephenson) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`b7229debbe`](https://github.com/nodejs/node/commit/b7229debbe) - docs: Fix default options for fs.createWriteStream() (Chris Neave) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`f0453caea2`](https://github.com/nodejs/node/commit/f0453caea2) - domains: port caeb677 from v0.10 to v0.12 (Jeremy Whitlock) https://github.com/nodejs/node-v0.x-archive/pull/25835 -* [[`261fa3620f`](https://github.com/nodejs/node/commit/261fa3620f) - src: fix intermittent SIGSEGV in resolveTxt (Evan Lucas) https://github.com/nodejs/node-v0.x-archive/pull/9300 -* [[`1f7257b02d`](https://github.com/nodejs/node/commit/1f7257b02d) - test: mark test-https-aws-ssl flaky on linux (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25893 -* [[`cf435d55db`](https://github.com/nodejs/node/commit/cf435d55db) - test: mark test-signal-unregister as flaky (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25750 -* [[`ceb6a8c131`](https://github.com/nodejs/node/commit/ceb6a8c131) - test: fix test-debug-port-from-cmdline (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25748 -* [[`22997731e6`](https://github.com/nodejs/node/commit/22997731e6) - test: add regression test for #25735 (Fedor Indutny) https://github.com/nodejs/node-v0.x-archive/pull/25739 -* [[`39e05639f4`](https://github.com/nodejs/node/commit/39e05639f4) - test: mark http-pipeline-flood flaky on win32 (Julien Gilli) https://github.com/nodejs/node-v0.x-archive/pull/25707 -* [[`78d256e7f5`](https://github.com/nodejs/node/commit/78d256e7f5) - test: unmark tests that are no longer flaky (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25676 -* [[`a9b642cf5b`](https://github.com/nodejs/node/commit/a9b642cf5b) - test: runner should return 0 on flaky tests (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`b48639befd`](https://github.com/nodejs/node/commit/b48639befd) - test: support writing test output to file (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`caa16b41d6`](https://github.com/nodejs/node/commit/caa16b41d6) - (SEMVER-MINOR) tls: prevent server from using dhe keys < 768 (Michael Dawson) https://github.com/nodejs/node/pull/3890 -* [[`0363cf4a80`](https://github.com/nodejs/node/commit/0363cf4a80) - tls: Closing parent socket also closes the tls sock (Devin Nakamura) https://github.com/nodejs/node-v0.x-archive/pull/25642 -* [[`75697112e8`](https://github.com/nodejs/node/commit/75697112e8) - tls: do not hang without `newSession` handler (Fedor Indutny) https://github.com/nodejs/node-v0.x-archive/pull/25739 -* [[`d998a65058`](https://github.com/nodejs/node/commit/d998a65058) - tools: pass constant to logger instead of string (Johan Bergström) https://github.com/nodejs/node-v0.x-archive/pull/25653 -* [[`1982ed6e63`](https://github.com/nodejs/node/commit/1982ed6e63) - v8: port fbff705 from v0.10 to v0.12 (Jeremy Whitlock) https://github.com/nodejs/node-v0.x-archive/pull/25835 -* [[`44d7054252`](https://github.com/nodejs/node/commit/44d7054252) - win: fix custom actions for WiX older than 3.9 (João Reis) https://github.com/nodejs/node/pull/2843 -* [[`586c4d8b8e`](https://github.com/nodejs/node/commit/586c4d8b8e) - win: fix custom actions on Visual Studio != 2013 (Julien Gilli) https://github.com/nodejs/node/pull/2843 -* [[`14db629497`](https://github.com/nodejs/node/commit/14db629497) - win,msi: correct installation path registry keys (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25640 -* [[`8e80528453`](https://github.com/nodejs/node/commit/8e80528453) - win,msi: change InstallScope to perMachine (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25640 -* [[`35bbe98401`](https://github.com/nodejs/node/commit/35bbe98401) - Update addons.markdown (Max Deepfield) https://github.com/nodejs/node-v0.x-archive/pull/25885 -* [[`9a6f1ce416`](https://github.com/nodejs/node/commit/9a6f1ce416) - comma (Julien Valéry) https://github.com/nodejs/node-v0.x-archive/pull/25811 -* [[`d384bf8f84`](https://github.com/nodejs/node/commit/d384bf8f84) - Update assert.markdown (daveboivin) https://github.com/nodejs/node-v0.x-archive/pull/25811 -* [[`89b22ccbe1`](https://github.com/nodejs/node/commit/89b22ccbe1) - Fixed typo (Andrew Murray) https://github.com/nodejs/node-v0.x-archive/pull/25811 -* [[`5ad05af380`](https://github.com/nodejs/node/commit/5ad05af380) - Update util.markdown (Daniel Rentz) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`cb660ab3d3`](https://github.com/nodejs/node/commit/cb660ab3d3) - Update child_process.markdown, spelling (Jared Fox) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`59c67fe3cd`](https://github.com/nodejs/node/commit/59c67fe3cd) - updated documentation for fs.createReadStream (Michele Caini) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`53b6a615a5`](https://github.com/nodejs/node/commit/53b6a615a5) - Documentation update about Buffer initialization (Sarath) https://github.com/nodejs/node-v0.x-archive/pull/25591 -* [[`b8d47a7b6f`](https://github.com/nodejs/node/commit/b8d47a7b6f) - fix (Fedor Indutny) https://github.com/nodejs/node-v0.x-archive/pull/25739 - - -## 2015-07-09, Version 0.12.7 (Stable) +* [[`d9399569bd`](https://github.com/nodejs/node/commit/d9399569bd)] - build: backport tools/release.sh (Rod Vagg) https://github.com/nodejs/node/pull/3642 +* [[`78c5b4c8bd`](https://github.com/nodejs/node/commit/78c5b4c8bd)] - build: backport config for new CI infrastructure (Rod Vagg) https://github.com/nodejs/node/pull/3642 +* [[`83441616a5`](https://github.com/nodejs/node/commit/83441616a5)] - build: fix --without-ssl compile time error (Ben Noordhuis) https://github.com/nodejs/node/pull/3825 +* [[`8887666b0b`](https://github.com/nodejs/node/commit/8887666b0b)] - build: update manifest to include Windows 10 (Lucien Greathouse) https://github.com/nodejs/node/pull/2843 +* [[`08afe4ec8e`](https://github.com/nodejs/node/commit/08afe4ec8e)] - build: add MSVS 2015 support (Rod Vagg) https://github.com/nodejs/node/pull/2843 +* [[`4f2456369c`](https://github.com/nodejs/node/commit/4f2456369c)] - build: work around VS2015 issue in ICU <56 (Steven R. Loomis) https://github.com/nodejs/node-v0.x-archive/pull/25804 +* [[`15030f26fd`](https://github.com/nodejs/node/commit/15030f26fd)] - build: Intl: bump ICU4C from 54 to 55 (backport) (Steven R. Loomis) https://github.com/nodejs/node-v0.x-archive/pull/25856 +* [[`1083fa70f0`](https://github.com/nodejs/node/commit/1083fa70f0)] - build: run-ci makefile rule (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 +* [[`2d2494cf14`](https://github.com/nodejs/node/commit/2d2494cf14)] - build: support flaky tests in test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 +* [[`b25d26f2ef`](https://github.com/nodejs/node/commit/b25d26f2ef)] - build: support Jenkins via test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25653 +* [[`7e4b47f38a`](https://github.com/nodejs/node/commit/7e4b47f38a)] - build,win: fix node.exe resource version (João Reis) https://github.com/nodejs/node/pull/3053 +* [[`e07c86e240`](https://github.com/nodejs/node/commit/e07c86e240)] - build,win: try next MSVS version on failure (João Reis) https://github.com/nodejs/node/pull/2843 +* [[`b5a0abcfdf`](https://github.com/nodejs/node/commit/b5a0abcfdf)] - child_process: clone spawn options argument (cjihrig) https://github.com/nodejs/node-v0.x-archive/pull/9159 +* [[`8b81f98c41`](https://github.com/nodejs/node/commit/8b81f98c41)] - configure: add --without-mdb flag (cgalibern) https://github.com/nodejs/node-v0.x-archive/pull/25707 +* [[`071c860c2b`](https://github.com/nodejs/node/commit/071c860c2b)] - crypto: replace rwlocks with simple mutexes (Ben Noordhuis) https://github.com/nodejs/node/pull/2723 +* [[`ca97fb6be3`](https://github.com/nodejs/node/commit/ca97fb6be3)] - deps: upgrade npm to 2.14.9 (Forrest L Norvell) https://github.com/nodejs/node/pull/3684 +* [[`583734342e`](https://github.com/nodejs/node/commit/583734342e)] - deps: fix openssl for MSVS 2015 (Andy Polyakov) https://github.com/nodejs/node/pull/2843 +* [[`02c262a4c6`](https://github.com/nodejs/node/commit/02c262a4c6)] - deps: fix gyp to work on MacOSX without XCode (Shigeki Ohtsu) https://github.com/nodejs/node/pull/2843 +* [[`f0fba0bce8`](https://github.com/nodejs/node/commit/f0fba0bce8)] - deps: update gyp to 25ed9ac (João Reis) https://github.com/nodejs/node/pull/2843 +* [[`f693565813`](https://github.com/nodejs/node/commit/f693565813)] - deps: upgrade to npm 2.13.4 (Kat Marchán) https://github.com/nodejs/node-v0.x-archive/pull/25825 +* [[`618b142679`](https://github.com/nodejs/node/commit/618b142679)] - deps,v8: fix compilation in VS2015 (João Reis) https://github.com/nodejs/node/pull/2843 +* [[`49b4f0d54e`](https://github.com/nodejs/node/commit/49b4f0d54e)] - doc: backport README.md (Rod Vagg) https://github.com/nodejs/node/pull/3642 +* [[`2860c53562`](https://github.com/nodejs/node/commit/2860c53562)] - doc: fixed child_process.exec doc (Tyler Anton) https://github.com/nodejs/node-v0.x-archive/pull/14088 +* [[`4a91fa11a3`](https://github.com/nodejs/node/commit/4a91fa11a3)] - doc: Update docs for os.platform() (George Kotchlamazashvili) https://github.com/nodejs/node-v0.x-archive/pull/25777 +* [[`b03ab02fe8`](https://github.com/nodejs/node/commit/b03ab02fe8)] - doc: Change the link for v8 docs to v8dox.com (Chad Walker) https://github.com/nodejs/node-v0.x-archive/pull/25811 +* [[`1fd8f37efd`](https://github.com/nodejs/node/commit/1fd8f37efd)] - doc: buffer, adding missing backtick (Dyana Rose) https://github.com/nodejs/node-v0.x-archive/pull/25811 +* [[`162d0db3bb`](https://github.com/nodejs/node/commit/162d0db3bb)] - doc: tls.markdown, adjust version from v0.10.39 to v0.10.x (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 +* [[`eda2560cdc`](https://github.com/nodejs/node/commit/eda2560cdc)] - doc: additional refinement to readable event (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 +* [[`881d9bea01`](https://github.com/nodejs/node/commit/881d9bea01)] - doc: readable event clarification (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 +* [[`b6378f0c75`](https://github.com/nodejs/node/commit/b6378f0c75)] - doc: stream.unshift does not reset reading state (James M Snell) https://github.com/nodejs/node-v0.x-archive/pull/25591 ### Commits From 3f284cf65c3d26b5ec73ed15b81befc4671ed596 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 9 Aug 2021 20:02:50 +0900 Subject: [PATCH 06/33] build: add option to hide console window Adds a Environment flag to allow embedders to set CREATE_NO_WINDOW property when spawning processes, which is useful for GUI programs that do not want to show console windows when running terminal commands. PR-URL: https://github.com/nodejs/node/pull/39712 Reviewed-By: Anna Henningsen Reviewed-By: Shelley Vohr Reviewed-By: James M Snell --- src/env-inl.h | 4 ++++ src/env.h | 1 + src/node.h | 6 +++++- src/node_worker.cc | 2 ++ src/process_wrap.cc | 4 ++++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/env-inl.h b/src/env-inl.h index b3b1ea908253b9..061897d95d8b5f 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -877,6 +877,10 @@ inline bool Environment::tracks_unmanaged_fds() const { return flags_ & EnvironmentFlags::kTrackUnmanagedFds; } +inline bool Environment::hide_console_windows() const { + return flags_ & EnvironmentFlags::kHideConsoleWindows; +} + bool Environment::filehandle_close_warning() const { return emit_filehandle_warning_; } diff --git a/src/env.h b/src/env.h index 24b4a48b5f9657..8760bc4361f199 100644 --- a/src/env.h +++ b/src/env.h @@ -1198,6 +1198,7 @@ class Environment : public MemoryRetainer { inline bool owns_process_state() const; inline bool owns_inspector() const; inline bool tracks_unmanaged_fds() const; + inline bool hide_console_windows() const; inline uint64_t thread_id() const; inline worker::Worker* worker_context() const; Environment* worker_parent_env() const; diff --git a/src/node.h b/src/node.h index 4348dfba5b2be8..676d1d5fbad74e 100644 --- a/src/node.h +++ b/src/node.h @@ -402,7 +402,11 @@ enum Flags : uint64_t { kNoRegisterESMLoader = 1 << 3, // Set this flag to make Node.js track "raw" file descriptors, i.e. managed // by fs.open() and fs.close(), and close them during FreeEnvironment(). - kTrackUnmanagedFds = 1 << 4 + kTrackUnmanagedFds = 1 << 4, + // Set this flag to force hiding console windows when spawning child + // processes. This is usually used when embedding Node.js in GUI programs on + // Windows. + kHideConsoleWindows = 1 << 5 }; } // namespace EnvironmentFlags diff --git a/src/node_worker.cc b/src/node_worker.cc index 43a3862cc69dc3..3e3cb67d9e8c8b 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -558,6 +558,8 @@ void Worker::New(const FunctionCallbackInfo& args) { CHECK(args[4]->IsBoolean()); if (args[4]->IsTrue() || env->tracks_unmanaged_fds()) worker->environment_flags_ |= EnvironmentFlags::kTrackUnmanagedFds; + if (env->hide_console_windows()) + worker->environment_flags_ |= EnvironmentFlags::kHideConsoleWindows; } void Worker::StartThread(const FunctionCallbackInfo& args) { diff --git a/src/process_wrap.cc b/src/process_wrap.cc index 45920c2603b179..679429286b8907 100644 --- a/src/process_wrap.cc +++ b/src/process_wrap.cc @@ -238,6 +238,10 @@ class ProcessWrap : public HandleWrap { options.flags |= UV_PROCESS_WINDOWS_HIDE; } + if (env->hide_console_windows()) { + options.flags |= UV_PROCESS_WINDOWS_HIDE_CONSOLE; + } + // options.windows_verbatim_arguments Local wva_v = js_options->Get(context, env->windows_verbatim_arguments_string()) From 8460a3216ce5884371b7e5d1a3deaeefaf4f106a Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 2 Jun 2021 19:40:44 +0200 Subject: [PATCH 07/33] doc: deprecate using non-boolean values in the `verbatim` option PR-URL: https://github.com/nodejs/node/pull/38906 Reviewed-By: Gireesh Punathil Reviewed-By: Matteo Collina --- doc/api/deprecations.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index fcbb718f680ad6..068b4914e7b01b 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -2784,6 +2784,19 @@ These properties are now available within the standard `detail` property of the `PerformanceEntry` object. The existing accessors have been deprecated and should no longer be used. +### DEP0153: Non boolean value for `verbatim` DNS lookup option + + +Type: Documentation-only + +Using a non-boolean value for `verbatim` option in [`dns.lookup()`][] and +[`dnsPromises.lookup()`][] is deprecated. + [Legacy URL API]: url.md#url_legacy_url_api [NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf [RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3 @@ -2823,6 +2836,8 @@ deprecated and should no longer be used. [`crypto.scrypt()`]: crypto.md#crypto_crypto_scrypt_password_salt_keylen_options_callback [`decipher.final()`]: crypto.md#crypto_decipher_final_outputencoding [`decipher.setAuthTag()`]: crypto.md#crypto_decipher_setauthtag_buffer_encoding +[`dns.lookup()`]: domain.md#dns_dns_lookup_hostname_options_callback +[`dnsPromises.lookup()`]: domain.md#dns_dnspromises_lookup_hostname_options [`domain`]: domain.md [`ecdh.setPublicKey()`]: crypto.md#crypto_ecdh_setpublickey_publickey_encoding [`emitter.listenerCount(eventName)`]: events.md#events_emitter_listenercount_eventname From 2e90b10f35013654430c68b0bb0aec8c10528760 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 11 Jun 2021 16:26:17 +0200 Subject: [PATCH 08/33] doc: deprecate type coercion for `dns.lookup` options PR-URL: https://github.com/nodejs/node/pull/38906 Reviewed-By: Gireesh Punathil Reviewed-By: Matteo Collina --- doc/api/deprecations.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index 068b4914e7b01b..b034bd253541b2 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -2784,7 +2784,7 @@ These properties are now available within the standard `detail` property of the `PerformanceEntry` object. The existing accessors have been deprecated and should no longer be used. -### DEP0153: Non boolean value for `verbatim` DNS lookup option +### DEP0153: `dns.lookup` and `dnsPromises.lookup` options type coercion + * + * [example-2]: http://example.com/two/ */ -var pointStart$m = point$n('start'); +const remarkLintFinalDefinition = lintRule( + 'remark-lint:final-definition', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file) => { + let last = 0; -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$n(type) { - return point + visit$2( + tree, + (node) => { + // Ignore generated and HTML comment nodes. + if ( + node.type === 'root' || + generated(node) || + (node.type === 'html' && /^\s* - * - * [example-2]: http://example.com/two/ - */ - -const remarkLintFinalDefinition = lintRule$i( - 'remark-lint:final-definition', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - let last = 0; - - visit$g( - tree, - (node) => { - // Ignore generated and HTML comment nodes. - if ( - node.type === 'root' || - generated(node) || - (node.type === 'html' && /^\s*".length)); - - validateMeta(node, file, meta); - } catch (e) { - file.message(e, node); +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } } - }); -} -const remarkLintNodejsYamlComments = lintRule$5( - "remark-lint:nodejs-yaml-comments", - validateYAMLComments -); + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); -var escapeStringRegexp$2 = string => { - if (typeof string !== 'string') { - throw new TypeError('Expected a string'); - } + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } - // Escape characters with special meaning either inside or outside character sets. - // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. - return string - .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') - .replace(/-/g, '\\x2d'); -}; + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { -var start$2 = factory$1('start'); -var end = factory$1('end'); + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); +} -var unistUtilPosition = position$1; +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; -position$1.start = start$2; -position$1.end = end; + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); -function position$1(node) { - return {start: start$2(node), end: end(node)} + return indentIndicator + chomp + '\n'; } -function factory$1(type) { - point.displayName = type; +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} - return point +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; - function point(node) { - var point = (node && node.position && node.position[type]) || {}; + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; - return { - line: point.line || null, - column: point.column || null, - offset: isNaN(point.offset) ? null : point.offset - } + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; } -} -var convert_1 = convert$7; + return result; +} -function convert$7(test) { - if (test == null) { - return ok$6 - } +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; - if (typeof test === 'string') { - return typeFactory$6(test) - } + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; - if (typeof test === 'object') { - return 'length' in test ? anyFactory$6(test) : allFactory(test) + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; } - if (typeof test === 'function') { - return test + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); } - throw new Error('Expected function, string, or object as test') + return result.slice(1); // drop extra \n joiner } -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function allFactory(test) { - return all +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; - function all(node) { - var key; + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; - for (key in test) { - if (node[key] !== test[key]) return false + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); } - - return true } -} -function anyFactory$6(tests) { - var checks = []; - var index = -1; - - while (++index < tests.length) { - checks[index] = convert$7(tests[index]); - } + return result; +} - return any +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; - function any() { - var index = -1; + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; - while (++index < checks.length) { - if (checks[index].apply(this, arguments)) { - return true - } + if (state.replacer) { + value = state.replacer.call(object, String(index), value); } - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$6(test) { - return type + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { - function type(node) { - return Boolean(node && node.type === test) + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } } -} -// Utility to return true. -function ok$6() { - return true + state.tag = _tag; + state.dump = '[' + _result + ']'; } -var color_1 = color$7; -function color$7(d) { - return '\u001B[33m' + d + '\u001B[39m' -} +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; -var unistUtilVisitParents = visitParents$7; + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; -var convert$6 = convert_1; -var color$6 = color_1; + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } -var CONTINUE$7 = true; -var SKIP$7 = 'skip'; -var EXIT$7 = false; + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { -visitParents$7.CONTINUE = CONTINUE$7; -visitParents$7.SKIP = SKIP$7; -visitParents$7.EXIT = EXIT$7; + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } -function visitParents$7(tree, test, visitor, reverse) { - var step; - var is; + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + _result += state.dump; + } } - is = convert$6(test); - 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; + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} - visit.displayName = - 'node (' + color$6(value.type + (name ? '<' + name + '>' : '')) + ')'; - } +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; - return visit + for (index = 0, length = objectKeyList.length; index < length; index += 1) { - function visit() { - var grandparents = parents.concat(node); - var result = []; - var subresult; - var offset; + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$6(visitor(node, parents)); + if (state.condenseFlow) pairBuffer += '"'; - if (result[0] === EXIT$7) { - return result - } - } + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; - if (node.children && result[0] !== SKIP$7) { - offset = (reverse ? node.children.length : -1) + step; + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } - if (subresult[0] === EXIT$7) { - return subresult - } + if (state.dump.length > 1024) pairBuffer += '? '; - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); - return result + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. } - } -} -function toResult$6(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } + pairBuffer += state.dump; - if (typeof value === 'number') { - return [CONTINUE$7, value] + // Both key and value are valid. + _result += pairBuffer; } - return [value] + state.tag = _tag; + state.dump = '{' + _result + '}'; } -var unistUtilVisit = visit$6; - -var visitParents$6 = unistUtilVisitParents; - -var CONTINUE$6 = visitParents$6.CONTINUE; -var SKIP$6 = visitParents$6.SKIP; -var EXIT$6 = visitParents$6.EXIT; - -visit$6.CONTINUE = CONTINUE$6; -visit$6.SKIP = SKIP$6; -visit$6.EXIT = EXIT$6; - -function visit$6(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - visitParents$6(tree, test, overload, reverse); +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); } -} -var vfileLocation$1 = factory; + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; -function factory(file) { - var value = String(file); - var indices = []; - var search = /\r?\n|\r/g; + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } - while (search.exec(value)) { - indices.push(search.lastIndex); - } + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; - indices.push(value.length + 1); + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } - return { - toPoint: offsetToPoint, - toPosition: offsetToPoint, - toOffset: pointToOffset - } + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } - // Get the line and column-based `point` for `offset` in the bound indices. - function offsetToPoint(offset) { - var index = -1; + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); - if (offset > -1 && offset < indices[indices.length - 1]) { - while (++index < indices.length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; } } - return {} - } + pairBuffer += state.dump; - // Get the `offset` for a line and column-based `point` in the bound - // indices. - function pointToOffset(point) { - var line = point && point.line; - var column = point && point.column; - var offset; + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - offset = (indices[line - 2] || 0) + column - 1 || 0; + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. } - return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; } -} -const escapeStringRegexp$1 = escapeStringRegexp$2; -const position = unistUtilPosition; -const rule = unifiedLintRule; -const visit$5 = unistUtilVisit; -const vfileLocation = vfileLocation$1; + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} -const start$1 = position.start; +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; -var remarkLintProhibitedStrings = rule('remark-lint:prohibited-strings', prohibitedStrings); + typeList = explicit ? state.explicitTypes : state.implicitTypes; -function testProhibited (val, content) { - let regexpFlags = 'g'; - let no = val.no; + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; - if (!no) { - no = escapeStringRegexp$1(val.yes); - regexpFlags += 'i'; - } + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { - let regexpString = '(? tag resolver accepts not "' + style + '" style'); + } - regexpString += `(${no})`; + state.dump = _result; + } - if (ignoreNextTo) { - regexpString += `(?!${ignoreNextTo})`; + return true; + } } - // If it ends with a letter, make sure it is a word break. - if (/\b$/.test(no)) { - regexpString += '\\b'; - } - regexpString += '(?!\\.\\w)'; - const re = new RegExp(regexpString, regexpFlags); + return false; +} - const results = []; - let result = re.exec(content); - while (result) { - if (result[1] !== val.yes) { - results.push({ result: result[1], index: result.index }); - } - result = re.exec(content); +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); } - return results -} + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; -function prohibitedStrings (ast, file, strings) { - const location = vfileLocation(file); + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } - visit$5(ast, 'text', checkText); + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; - function checkText (node) { - const content = node.value; - const initial = start$1(node).offset; + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } - strings.forEach((val) => { - const results = testProhibited(val, content); - if (results.length) { - results.forEach(({ result, index }) => { - const message = val.yes ? `Use "${val.yes}" instead of "${result}"` : `Do not use "${result}"`; - file.message(message, { - start: location.toPoint(initial + index), - end: location.toPoint(initial + index + [...result].length) - }); - }); - } - }); + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; } -} -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } -const primitives$4 = new Set(['string', 'number', 'boolean']); + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule$4(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } - Object.defineProperty(plugin, 'name', {value: id}); + state.dump = tagStr + ' ' + state.dump; + } + } - return plugin + return true; +} - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$4(ruleId, raw); +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; - if (!severity) return + inspectNode(object, objects, duplicatesIndexes); - const fatal = severity === 2; + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} - return (tree, file, next) => { - let index = file.messages.length - 1; +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; - wrap(rule, (error) => { - const messages = file.messages; + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); } + } else { + objectKeyList = Object.keys(object); - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); } - - next(); - })(tree, file, options); + } } } } -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$4(name, value) { - /** @type {unknown[]} */ - let result; +function dump$1(input, options) { + options = options || {}; - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$4.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } + var state = new State(options); - let level = result[0]; + if (!state.noRefs) getDuplicateReferences(input, state); - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } + var value = input; - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); } - result[0] = level; + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; - // @ts-expect-error: it’s now a valid tuple. - return result + return ''; } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ +var dump_1 = dump$1; -const convert$5 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$5 - } +var dumper = { + dump: dump_1 +}; - if (typeof test === 'string') { - return typeFactory$5(test) - } +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$5(test) : propsFactory$5(test) - } - if (typeof test === 'function') { - return castFactory$5(test) - } +var Type = type; +var Schema = schema; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; - throw new Error('Expected function, string, or object as test') - } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$5(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; +// Re-export all types in case user wants to create custom schema +var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str +}; - while (++index < tests.length) { - checks[index] = convert$5(tests[index]); - } +// Removed functions from JS-YAML 3.0.x +var safeLoad = renamed('safeLoad', 'load'); +var safeLoadAll = renamed('safeLoadAll', 'loadAll'); +var safeDump = renamed('safeDump', 'dump'); - return castFactory$5(any) +var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump +}; - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0'; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } +const MAX_LENGTH$2 = 256; +const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991; - return false - } -} +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16; -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$5(check) { - return castFactory$5(all) +var constants = { + SEMVER_SPEC_VERSION, + MAX_LENGTH: MAX_LENGTH$2, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, + MAX_SAFE_COMPONENT_LENGTH +}; - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; +var re$2 = {exports: {}}; - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } +const debug$1 = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {}; - return true - } -} +var debug_1 = debug$1; -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$5(check) { - return castFactory$5(type) +(function (module, exports) { +const { MAX_SAFE_COMPONENT_LENGTH } = constants; +const debug = debug_1; +exports = module.exports = {}; - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check - } -} +// The actual regexps go on exports.re +const re = exports.re = []; +const src = exports.src = []; +const t = exports.t = {}; +let R = 0; -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$5(check) { - return assertion +const createToken = (name, value, isGlobal) => { + const index = R++; + debug(index, value); + t[name] = index; + src[index] = value; + re[index] = new RegExp(value, isGlobal ? 'g' : undefined); +}; - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) - } -} +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. -// Utility to return true. -function ok$5() { - return true -} +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. -/** - * @param {string} d - * @returns {string} - */ -function color$5(d) { - return '\u001B[33m' + d + '\u001B[39m' -} +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. -/** - * Continue traversing as normal - */ -const CONTINUE$5 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$5 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$5 = false; +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$5 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } +// ## Main Version +// Three dot-separated numeric identifiers. - const is = convert$5(test); - const step = reverse ? -1 : 1; +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`); - factory(tree, null, [])(); +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`); - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`); - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$5(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`); - return visit +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$5(visitor(node, parents)); +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); - if (result[0] === EXIT$5) { - return result - } - } +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$5) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. - if (subresult[0] === EXIT$5) { - return subresult - } +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. - return result - } - } - } - ); +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$5(value) { - if (Array.isArray(value)) { - return value - } +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`); - if (typeof value === 'number') { - return [CONTINUE$5, value] - } +createToken('FULL', `^${src[t.FULLPLAIN]}$`); - return [value] -} +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$4 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +createToken('GTLT', '((?:<|>)?=?)'); - visitParents$5(tree, test, overload, reverse); +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`); -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`); -var pointStart$4 = point$4('start'); -var pointEnd$2 = point$4('end'); +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$4(type) { - return point +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`); +createToken('COERCERTL', src[t.COERCE], true); - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)'); - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null - } - } -} +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); +exports.tildeTrimReplace = '$1~'; -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module rule-style - * @fileoverview - * Warn when the thematic breaks (horizontal rules) violate a given or - * detected style. - * - * Options: `string`, either a corect thematic breaks such as `***`, or - * `'consistent'`, default: `'consistent'`. - * - * `'consistent'` detects the first used thematic break style and warns when - * subsequent rules use different styles. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * has three settings that define how rules are created: - * - * * [`rule`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrule) - * (default: `*`) — Marker to use - * * [`ruleRepetition`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulerepetition) - * (default: `3`) — Number of markers to use - * * [`ruleSpaces`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulespaces) - * (default: `true`) — Whether to pad markers with spaces - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md", "setting": "* * *"} - * - * * * * - * - * * * * - * - * @example - * {"name": "ok.md", "setting": "_______"} - * - * _______ - * - * _______ - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * *** - * - * * * * - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 3:1-3:6: Rules should use `***` - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} - * - * 1:1: Incorrect preferred rule style: provide a correct markdown rule or `'consistent'` - */ +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); -const remarkLintRuleStyle = lintRule$4( - 'remark-lint:rule-style', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)'); - if (option !== 'consistent' && /[^-_* ]/.test(option)) { - file.fail( - "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" - ); - } +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); +exports.caretTrimReplace = '$1^'; - visit$4(tree, 'thematicBreak', (node) => { - const initial = pointStart$4(node).offset; - const final = pointEnd$2(node).offset; +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); - if (typeof initial === 'number' && typeof final === 'number') { - const rule = value.slice(initial, final); +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); - if (option === 'consistent') { - option = rule; - } else if (rule !== option) { - file.message('Rules should use `' + option + '`', node); - } - } - }); +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); +exports.comparatorTrimReplace = '$1$2$3'; + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`); + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`); + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*'); +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); +}(re$2, re$2.exports)); + +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl']; +const parseOptions$2 = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true; + return options + }, {}); +var parseOptions_1 = parseOptions$2; + +const numeric = /^[0-9]+$/; +const compareIdentifiers$1 = (a, b) => { + const anum = numeric.test(a); + const bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; } -); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +}; -const primitives$3 = new Set(['string', 'number', 'boolean']); +const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a); -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule$3(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; +var identifiers = { + compareIdentifiers: compareIdentifiers$1, + rcompareIdentifiers +}; - Object.defineProperty(plugin, 'name', {value: id}); +const debug = debug_1; +const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants; +const { re: re$1, t: t$1 } = re$2.exports; - return plugin +const parseOptions$1 = parseOptions_1; +const { compareIdentifiers } = identifiers; +class SemVer$2 { + constructor (version, options) { + options = parseOptions$1(options); - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$3(ruleId, raw); + if (version instanceof SemVer$2) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version; + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } - if (!severity) return + if (version.length > MAX_LENGTH$1) { + throw new TypeError( + `version is longer than ${MAX_LENGTH$1} characters` + ) + } - const fatal = severity === 2; + debug('SemVer', version, options); + this.options = options; + this.loose = !!options.loose; + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease; - return (tree, file, next) => { - let index = file.messages.length - 1; + const m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]); - wrap(rule, (error) => { - const messages = file.messages; + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } + this.raw = version; - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; - next(); - })(tree, file, options); + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') } - } -} -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$3(name, value) { - /** @type {unknown[]} */ - let result; + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$3.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = []; + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }); + } - let level = result[0]; + this.build = m[5] ? m[5].split('.') : []; + this.format(); + } - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; + format () { + this.version = `${this.major}.${this.minor}.${this.patch}`; + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}`; } + return this.version } - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) + toString () { + return this.version } - result[0] = level; + compare (other) { + debug('SemVer.compare', this.version, this.options, other); + if (!(other instanceof SemVer$2)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer$2(other, this.options); + } - // @ts-expect-error: it’s now a valid tuple. - return result -} + if (other.version === this.version) { + return 0 + } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ + return this.compareMain(other) || this.comparePre(other) + } -const convert$4 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$4 - } + compareMain (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); + } - if (typeof test === 'string') { - return typeFactory$4(test) - } + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$4(test) : propsFactory$4(test) - } + comparePre (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); + } - if (typeof test === 'function') { - return castFactory$4(test) + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0; + do { + const a = this.prerelease[i]; + const b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } + } while (++i) + } - throw new Error('Expected function, string, or object as test') + compareBuild (other) { + if (!(other instanceof SemVer$2)) { + other = new SemVer$2(other, this.options); } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$4(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$4(tests[index]); + let i = 0; + do { + const a = this.build[i]; + const b = other.build[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) } - return castFactory$4(any) + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier); + } + this.inc('pre', identifier); + break - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++; + } + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++; + } + this.patch = 0; + this.prerelease = []; + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++; + } + this.prerelease = []; + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0]; + } else { + let i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0); + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0]; + } + } else { + this.prerelease = [identifier, 0]; + } + } + break - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + default: + throw new Error(`invalid increment argument: ${release}`) } - - return false + this.format(); + this.raw = this.version; + return this } } -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$4(check) { - return castFactory$4(all) +var semver = SemVer$2; - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; +const {MAX_LENGTH} = constants; +const { re, t } = re$2.exports; +const SemVer$1 = semver; - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } +const parseOptions = parseOptions_1; +const parse = (version, options) => { + options = parseOptions(options); - return true + if (version instanceof SemVer$1) { + return version } -} -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$4(check) { - return castFactory$4(type) + if (typeof version !== 'string') { + return null + } - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check + if (version.length > MAX_LENGTH) { + return null } -} -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$4(check) { - return assertion + const r = options.loose ? re[t.LOOSE] : re[t.FULL]; + if (!r.test(version)) { + return null + } - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) + try { + return new SemVer$1(version, options) + } catch (er) { + return null } -} +}; -// Utility to return true. -function ok$4() { - return true +var parse_1 = parse; + +const SemVer = semver; +const compare$1 = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)); + +var compare_1 = compare$1; + +const compare = compare_1; +const lt = (a, b, loose) => compare(a, b, loose) < 0; +var lt_1 = lt; + +const allowedKeys = [ + "added", + "napiVersion", + "deprecated", + "removed", + "changes", +]; +const changesExpectedKeys = ["version", "pr-url", "description"]; +const VERSION_PLACEHOLDER = "REPLACEME"; +const MAX_SAFE_SEMVER_VERSION = parse_1( + Array.from({ length: 3 }, () => Number.MAX_SAFE_INTEGER).join(".") +); +const validVersionNumberRegex = /^v\d+\.\d+\.\d+$/; +const prUrlRegex = new RegExp("^https://github.com/nodejs/node/pull/\\d+$"); +const privatePRUrl = "https://github.com/nodejs-private/node-private/pull/"; + +let releasedVersions; +let invalidVersionMessage = "version(s) must respect the pattern `vx.x.x` or"; +if (process.env.NODE_RELEASED_VERSIONS) { + console.log("Using release list from env..."); + releasedVersions = process.env.NODE_RELEASED_VERSIONS.split(",").map( + (v) => `v${v}` + ); + invalidVersionMessage = `version not listed in the changelogs, `; } +invalidVersionMessage += `use the placeholder \`${VERSION_PLACEHOLDER}\``; -/** - * @param {string} d - * @returns {string} - */ -function color$4(d) { - return '\u001B[33m' + d + '\u001B[39m' +const kContainsIllegalKey = Symbol("illegal key"); +const kWrongKeyOrder = Symbol("Wrong key order"); +function unorderedKeys(meta) { + const keys = Object.keys(meta); + let previousKeyIndex = -1; + for (const key of keys) { + const keyIndex = allowedKeys.indexOf(key); + if (keyIndex <= previousKeyIndex) { + return keyIndex === -1 ? kContainsIllegalKey : kWrongKeyOrder; + } + previousKeyIndex = keyIndex; + } } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ +function containsInvalidVersionNumber(version) { + if (Array.isArray(version)) { + return version.some(containsInvalidVersionNumber); + } -/** - * Continue traversing as normal - */ -const CONTINUE$4 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$4 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$4 = false; + if (version === undefined || version === VERSION_PLACEHOLDER) return false; -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$4 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } + if ( + releasedVersions && + // Always ignore 0.0.x and 0.1.x release numbers: + (version[1] !== "0" || (version[3] !== "0" && version[3] !== "1")) + ) + return !releasedVersions.includes(version); - const is = convert$4(test); - const step = reverse ? -1 : 1; + return !validVersionNumberRegex.test(version); +} +const getValidSemver = (version) => + version === VERSION_PLACEHOLDER ? MAX_SAFE_SEMVER_VERSION : version; +function areVersionsUnordered(versions) { + if (!Array.isArray(versions)) return false; - factory(tree, null, [])(); + for (let index = 1; index < versions.length; index++) { + if ( + lt_1( + getValidSemver(versions[index - 1]), + getValidSemver(versions[index]) + ) + ) { + return true; + } + } +} - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; +function invalidChangesKeys(change) { + const keys = Object.keys(change); + const { length } = keys; + if (length !== changesExpectedKeys.length) return true; + for (let index = 0; index < length; index++) { + if (keys[index] !== changesExpectedKeys[index]) return true; + } +} +function validateSecurityChange(file, node, change, index) { + if ("commit" in change) { + if (typeof change.commit !== "string" || isNaN(`0x${change.commit}`)) { + file.message( + `changes[${index}]: Ill-formed security change commit ID`, + node + ); + } + + if (Object.keys(change)[1] === "commit") { + change = { ...change }; + delete change.commit; + } + } + if (invalidChangesKeys(change)) { + const securityChangeExpectedKeys = [...changesExpectedKeys]; + securityChangeExpectedKeys[0] += "[, commit]"; + file.message( + `changes[${index}]: Invalid keys. Expected keys are: ` + + securityChangeExpectedKeys.join(", "), + node + ); + } +} +function validateChanges(file, node, changes) { + if (!Array.isArray(changes)) + return file.message("`changes` must be a YAML list", node); - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + const changesVersions = []; + for (let index = 0; index < changes.length; index++) { + const change = changes[index]; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$4(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + const isAncient = + typeof change.version === "string" && change.version.startsWith("v0."); + const isSecurityChange = + !isAncient && + typeof change["pr-url"] === "string" && + change["pr-url"].startsWith(privatePRUrl); - return visit + if (isSecurityChange) { + validateSecurityChange(file, node, change, index); + } else if (!isAncient && invalidChangesKeys(change)) { + file.message( + `changes[${index}]: Invalid keys. Expected keys are: ` + + changesExpectedKeys.join(", "), + node + ); + } - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; + if (containsInvalidVersionNumber(change.version)) { + file.message(`changes[${index}]: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(change.version)) { + file.message(`changes[${index}]: list of versions is not in order`, node); + } - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$4(visitor(node, parents)); + if (!isAncient && !isSecurityChange && !prUrlRegex.test(change["pr-url"])) { + file.message( + `changes[${index}]: PR-URL does not match the expected pattern`, + node + ); + } - if (result[0] === EXIT$4) { - return result - } - } + if (typeof change.description !== "string" || !change.description.length) { + file.message( + `changes[${index}]: must contain a non-empty description`, + node + ); + } else if (!change.description.endsWith(".")) { + file.message( + `changes[${index}]: description must end with a period`, + node + ); + } - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$4) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); + changesVersions.push( + Array.isArray(change.version) ? change.version[0] : change.version + ); + } - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); + if (areVersionsUnordered(changesVersions)) { + file.message("Items in `changes` list are not in order", node); + } +} - if (subresult[0] === EXIT$4) { - return subresult - } +function validateMeta(node, file, meta) { + switch (unorderedKeys(meta)) { + case kContainsIllegalKey: + file.message( + "YAML dictionary contains illegal keys. Accepted values are: " + + allowedKeys.join(", "), + node + ); + break; - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + case kWrongKeyOrder: + file.message( + "YAML dictionary keys should be in this order: " + + allowedKeys.join(", "), + node + ); + break; + } - return result - } - } - } - ); + if (containsInvalidVersionNumber(meta.added)) { + file.message(`Invalid \`added\` value: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(meta.added)) { + file.message("Versions in `added` list are not in order", node); + } -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$4(value) { - if (Array.isArray(value)) { - return value + if (containsInvalidVersionNumber(meta.deprecated)) { + file.message( + `Invalid \`deprecated\` value: ${invalidVersionMessage}`, + node + ); + } else if (areVersionsUnordered(meta.deprecated)) { + file.message("Versions in `deprecated` list are not in order", node); } - if (typeof value === 'number') { - return [CONTINUE$4, value] + if (containsInvalidVersionNumber(meta.removed)) { + file.message(`Invalid \`removed\` value: ${invalidVersionMessage}`, node); + } else if (areVersionsUnordered(meta.removed)) { + file.message("Versions in `removed` list are not in order", node); } - return [value] + if ("changes" in meta) { + validateChanges(file, node, meta.changes); + } } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ +function validateYAMLComments(tree, file) { + visit$2(tree, "html", function visitor(node) { + if (node.value.startsWith("".length)); -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$3 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } + validateMeta(node, file, meta); + } catch (e) { + file.message(e, node); + } + }); +} - visitParents$4(tree, test, overload, reverse); +const remarkLintNodejsYamlComments = lintRule( + "remark-lint:nodejs-yaml-comments", + validateYAMLComments +); - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var escapeStringRegexp$2 = string => { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); +}; -var pointStart$3 = point$3('start'); +var start$2 = factory$2('start'); +var end = factory$2('end'); + +var unistUtilPosition = position$1; + +position$1.start = start$2; +position$1.end = end; + +function position$1(node) { + return {start: start$2(node), end: end(node)} +} + +function factory$2(type) { + point.displayName = type; -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$3(type) { return point - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point var point = (node && node.position && node.position[type]) || {}; return { line: point.line || null, column: point.column || null, - offset: point.offset > -1 ? point.offset : null + offset: isNaN(point.offset) ? null : point.offset } } } -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module strong-marker - * @fileoverview - * Warn for violating importance (strong) markers. - * - * Options: `'consistent'`, `'*'`, or `'_'`, default: `'consistent'`. - * - * `'consistent'` detects the first used importance style and warns when - * subsequent importance sequences use different styles. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats importance using an `*` (asterisk) by default. - * Pass - * [`strong: '_'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsstrong) - * to use `_` (underscore) instead. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * **foo** and **bar**. - * - * @example - * {"name": "also-ok.md"} - * - * __foo__ and __bar__. - * - * @example - * {"name": "ok.md", "setting": "*"} - * - * **foo**. - * - * @example - * {"name": "ok.md", "setting": "_"} - * - * __foo__. - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * **foo** and __bar__. - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:13-1:20: Strong should use `*` as a marker - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} - * - * 1:1: Incorrect strong marker `💩`: use either `'consistent'`, `'*'`, or `'_'` - */ - -const remarkLintStrongMarker = lintRule$3( - 'remark-lint:strong-marker', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); - - if (option !== '*' && option !== '_' && option !== 'consistent') { - file.fail( - 'Incorrect strong marker `' + - option + - "`: use either `'consistent'`, `'*'`, or `'_'`" - ); - } +var wrapped = wrapped_1; - visit$3(tree, 'strong', (node) => { - const start = pointStart$3(node).offset; +var unifiedLintRule = factory$1; - if (typeof start === 'number') { - const marker = /** @type {Marker} */ (value.charAt(start)); +function factory$1(id, rule) { + var parts = id.split(':'); + var source = parts[0]; + var ruleId = parts[1]; + var fn = wrapped(rule); - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Strong should use `' + option + '` as a marker', node); - } - } - }); + /* istanbul ignore if - possibly useful if externalised later. */ + if (!ruleId) { + ruleId = source; + source = null; } -); - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ - -const primitives$2 = new Set(['string', 'number', 'boolean']); - -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule$2(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - Object.defineProperty(plugin, 'name', {value: id}); + attacher.displayName = id; - return plugin + return attacher - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$2(ruleId, raw); + function attacher(raw) { + var config = coerce(ruleId, raw); + var severity = config[0]; + var options = config[1]; + var fatal = severity === 2; - if (!severity) return + return severity ? transformer : undefined - const fatal = severity === 2; + function transformer(tree, file, next) { + var index = file.messages.length; - return (tree, file, next) => { - let index = file.messages.length - 1; + fn(tree, file, options, done); - wrap(rule, (error) => { - const messages = file.messages; + function done(err) { + var messages = file.messages; + var message; // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { + /* istanbul ignore if - only happens for incorrect plugins */ + if (err && messages.indexOf(err) === -1) { try { - file.fail(error); - } catch {} + file.fail(err); + } catch (_) {} } - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); + while (index < messages.length) { + message = messages[index]; + message.ruleId = ruleId; + message.source = source; + message.fatal = fatal; + + index++; } next(); - })(tree, file, options); + } } } } -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$2(name, value) { - /** @type {unknown[]} */ - let result; +// Coerce a value to a severity--options tuple. +function coerce(name, value) { + var def = 1; + var result; + var level; + /* istanbul ignore if - Handled by unified in v6.0.0 */ if (typeof value === 'boolean') { result = [value]; - } else if (value === null || value === undefined) { - result = [1]; + } else if (value == null) { + result = [def]; } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$2.has(typeof value[0]) + typeof value === 'object' && + (typeof value[0] === 'number' || + typeof value[0] === 'boolean' || + typeof value[0] === 'string') ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; + result = value.concat(); } else { result = [1, value]; } - let level = result[0]; + level = result[0]; if (typeof level === 'boolean') { level = level ? 1 : 0; @@ -79129,428 +60683,552 @@ function coerce$2(name, value) { } else if (level === 'on' || level === 'warn') { level = 1; } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } - - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } - - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. - return result -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ - -const convert$3 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$3 - } + level = 2; + } else { + level = 1; + result = [level, result]; + } + } - if (typeof test === 'string') { - return typeFactory$3(test) - } + if (level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$3(test) : propsFactory$3(test) - } + result[0] = level; - if (typeof test === 'function') { - return castFactory$3(test) - } + return result +} - throw new Error('Expected function, string, or object as test') - } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$3(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; +var convert_1 = convert$1; - while (++index < tests.length) { - checks[index] = convert$3(tests[index]); +function convert$1(test) { + if (test == null) { + return ok } - return castFactory$3(any) - - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + if (typeof test === 'string') { + return typeFactory(test) + } - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } + if (typeof test === 'object') { + return 'length' in test ? anyFactory(test) : allFactory(test) + } - return false + if (typeof test === 'function') { + return test } + + throw new Error('Expected function, string, or object as test') } -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$3(check) { - return castFactory$3(all) +// Utility assert each property in `test` is represented in `node`, and each +// values are strictly equal. +function allFactory(test) { + return all - /** - * @param {Node} node - * @returns {boolean} - */ function all(node) { - /** @type {string} */ - let key; + var key; - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false + for (key in test) { + if (node[key] !== test[key]) return false } return true } } -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$3(check) { - return castFactory$3(type) +function anyFactory(tests) { + var checks = []; + var index = -1; - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check + while (++index < tests.length) { + checks[index] = convert$1(tests[index]); + } + + return any + + function any() { + var index = -1; + + while (++index < checks.length) { + if (checks[index].apply(this, arguments)) { + return true + } + } + + return false } } -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$3(check) { - return assertion +// Utility to convert a string into a function which checks a given node’s type +// for said string. +function typeFactory(test) { + return type - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) + function type(node) { + return Boolean(node && node.type === test) } } // Utility to return true. -function ok$3() { +function ok() { return true } -/** - * @param {string} d - * @returns {string} - */ -function color$3(d) { +var color_1 = color$1; +function color$1(d) { return '\u001B[33m' + d + '\u001B[39m' } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ +var unistUtilVisitParents = visitParents$1; -/** - * Continue traversing as normal - */ -const CONTINUE$3 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$3 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$3 = false; +var convert = convert_1; +var color = color_1; -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$3 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } +var CONTINUE$1 = true; +var SKIP$1 = 'skip'; +var EXIT$1 = false; - const is = convert$3(test); - const step = reverse ? -1 : 1; +visitParents$1.CONTINUE = CONTINUE$1; +visitParents$1.SKIP = SKIP$1; +visitParents$1.EXIT = EXIT$1; - factory(tree, null, [])(); +function visitParents$1(tree, test, visitor, reverse) { + var step; + var is; - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + is = convert(test); + step = reverse ? -1 : 1; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$3(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + factory(tree, null, [])(); - return visit + function factory(node, index, parents) { + var value = typeof node === 'object' && node !== null ? node : {}; + var name; - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$3(visitor(node, parents)); + visit.displayName = + 'node (' + color(value.type + (name ? '<' + name + '>' : '')) + ')'; + } - if (result[0] === EXIT$3) { - return result - } - } + return visit - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$3) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); + function visit() { + var grandparents = parents.concat(node); + var result = []; + var subresult; + var offset; - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult(visitor(node, parents)); - if (subresult[0] === EXIT$3) { - return subresult - } + if (result[0] === EXIT$1) { + return result + } + } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + if (node.children && result[0] !== SKIP$1) { + offset = (reverse ? node.children.length : -1) + step; + + while (offset > -1 && offset < node.children.length) { + subresult = factory(node.children[offset], offset, grandparents)(); + + if (subresult[0] === EXIT$1) { + return subresult } - return result + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; } } + + return result } - ); + } +} -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$3(value) { - if (Array.isArray(value)) { +function toResult(value) { + if (value !== null && typeof value === 'object' && 'length' in value) { return value } if (typeof value === 'number') { - return [CONTINUE$3, value] + return [CONTINUE$1, value] } return [value] } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ +var unistUtilVisit = visit$1; + +var visitParents = unistUtilVisitParents; + +var CONTINUE = visitParents.CONTINUE; +var SKIP = visitParents.SKIP; +var EXIT = visitParents.EXIT; + +visit$1.CONTINUE = CONTINUE; +visit$1.SKIP = SKIP; +visit$1.EXIT = EXIT; + +function visit$1(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) { + var parent = parents[parents.length - 1]; + var index = parent ? parent.children.indexOf(node) : null; + return visitor(node, index, parent) + } +} + +var vfileLocation$1 = factory; + +function factory(file) { + var value = String(file); + var indices = []; + var search = /\r?\n|\r/g; + + while (search.exec(value)) { + indices.push(search.lastIndex); + } + + indices.push(value.length + 1); + + return { + toPoint: offsetToPoint, + toPosition: offsetToPoint, + toOffset: pointToOffset + } + + // Get the line and column-based `point` for `offset` in the bound indices. + function offsetToPoint(offset) { + var index = -1; + + if (offset > -1 && offset < indices[indices.length - 1]) { + while (++index < indices.length) { + if (indices[index] > offset) { + return { + line: index + 1, + column: offset - (indices[index - 1] || 0) + 1, + offset: offset + } + } + } + } + + return {} + } + + // Get the `offset` for a line and column-based `point` in the bound + // indices. + function pointToOffset(point) { + var line = point && point.line; + var column = point && point.column; + var offset; + + if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { + offset = (indices[line - 2] || 0) + column - 1 || 0; + } + + return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 + } +} + +const escapeStringRegexp$1 = escapeStringRegexp$2; +const position = unistUtilPosition; +const rule = unifiedLintRule; +const visit = unistUtilVisit; +const vfileLocation = vfileLocation$1; + +const start$1 = position.start; + +var remarkLintProhibitedStrings = rule('remark-lint:prohibited-strings', prohibitedStrings); + +function testProhibited (val, content) { + let regexpFlags = 'g'; + let no = val.no; + + if (!no) { + no = escapeStringRegexp$1(val.yes); + regexpFlags += 'i'; + } + + let regexpString = '(? { + const results = testProhibited(val, content); + if (results.length) { + results.forEach(({ result, index, yes }) => { + const message = val.yes ? `Use "${yes}" instead of "${result}"` : `Do not use "${result}"`; + file.message(message, { + start: location.toPoint(initial + index), + end: location.toPoint(initial + index + [...result].length) + }); + }); + } + }); + } +} /** - * Visit children of tree which pass a test + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module rule-style + * @fileoverview + * Warn when the thematic breaks (horizontal rules) violate a given or + * detected style. * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false + * Options: `string`, either a corect thematic breaks such as `***`, or + * `'consistent'`, default: `'consistent'`. + * + * `'consistent'` detects the first used thematic break style and warns when + * subsequent rules use different styles. + * + * ## Fix + * + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * has three settings that define how rules are created: + * + * * [`rule`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrule) + * (default: `*`) — Marker to use + * * [`ruleRepetition`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulerepetition) + * (default: `3`) — Number of markers to use + * * [`ruleSpaces`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsrulespaces) + * (default: `true`) — Whether to pad markers with spaces + * + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. + * + * @example + * {"name": "ok.md", "setting": "* * *"} + * + * * * * + * + * * * * + * + * @example + * {"name": "ok.md", "setting": "_______"} + * + * _______ + * + * _______ + * + * @example + * {"name": "not-ok.md", "label": "input"} + * + * *** + * + * * * * + * + * @example + * {"name": "not-ok.md", "label": "output"} + * + * 3:1-3:6: Rules should use `***` + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} + * + * 1:1: Incorrect preferred rule style: provide a correct markdown rule or `'consistent'` */ -const visit$2 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$3(tree, test, overload, reverse); +const remarkLintRuleStyle = lintRule( + 'remark-lint:rule-style', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file, option = 'consistent') => { + const value = String(file); - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + if (option !== 'consistent' && /[^-_* ]/.test(option)) { + file.fail( + "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" + ); } - ); + + visit$2(tree, 'thematicBreak', (node) => { + const initial = pointStart(node).offset; + const final = pointEnd(node).offset; + + if (typeof initial === 'number' && typeof final === 'number') { + const rule = value.slice(initial, final); + + if (option === 'consistent') { + option = rule; + } else if (rule !== option) { + file.message('Rules should use `' + option + '`', node); + } + } + }); + } +); + +var remarkLintRuleStyle$1 = remarkLintRuleStyle; /** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module strong-marker + * @fileoverview + * Warn for violating importance (strong) markers. * - * @typedef {Partial} PointLike + * Options: `'consistent'`, `'*'`, or `'_'`, default: `'consistent'`. * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] + * `'consistent'` detects the first used importance style and warns when + * subsequent importance sequences use different styles. * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ - -var pointStart$2 = point$2('start'); -var pointEnd$1 = point$2('end'); - -/** - * Get the positional info of `node`. + * ## Fix * - * @param {'start'|'end'} type + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * formats importance using an `*` (asterisk) by default. + * Pass + * [`strong: '_'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsstrong) + * to use `_` (underscore) instead. + * + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. + * + * @example + * {"name": "ok.md"} + * + * **foo** and **bar**. + * + * @example + * {"name": "also-ok.md"} + * + * __foo__ and __bar__. + * + * @example + * {"name": "ok.md", "setting": "*"} + * + * **foo**. + * + * @example + * {"name": "ok.md", "setting": "_"} + * + * __foo__. + * + * @example + * {"name": "not-ok.md", "label": "input"} + * + * **foo** and __bar__. + * + * @example + * {"name": "not-ok.md", "label": "output"} + * + * 1:13-1:20: Strong should use `*` as a marker + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} + * + * 1:1: Incorrect strong marker `💩`: use either `'consistent'`, `'*'`, or `'_'` */ -function point$2(type) { - return point - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; +const remarkLintStrongMarker = lintRule( + 'remark-lint:strong-marker', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file, option = 'consistent') => { + const value = String(file); - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null + if (option !== '*' && option !== '_' && option !== 'consistent') { + file.fail( + 'Incorrect strong marker `' + + option + + "`: use either `'consistent'`, `'*'`, or `'_'`" + ); } + + visit$2(tree, 'strong', (node) => { + const start = pointStart(node).offset; + + if (typeof start === 'number') { + const marker = /** @type {Marker} */ (value.charAt(start)); + + if (option === 'consistent') { + option = marker; + } else if (marker !== option) { + file.message('Strong should use `' + option + '` as a marker', node); + } + } + }); } -} +); + +var remarkLintStrongMarker$1 = remarkLintStrongMarker; /** * @author Titus Wormer @@ -79657,761 +61335,236 @@ function point$2(type) { * | Alpha | Bravo | * * | C | D | - * | :----- | ----: | - * |Charlie | Delta | - * - * @example - * {"name": "not-ok-padded.md", "label": "output", "setting": "consistent", "gfm": true} - * - * 7:2: Cell should be padded - * - * @example - * {"name": "ok-compact.md", "setting": "consistent", "gfm": true} - * - * |A |B | - * |-----|-----| - * |Alpha|Bravo| - * - * |C |D | - * |-------|-----| - * |Charlie|Delta| - * - * @example - * {"name": "not-ok-compact.md", "label": "input", "setting": "consistent", "gfm": true} - * - * |A |B | - * |-----|-----| - * |Alpha|Bravo| - * - * |C | D| - * |:------|-----:| - * |Charlie|Delta | - * - * @example - * {"name": "not-ok-compact.md", "label": "output", "setting": "consistent", "gfm": true} - * - * 7:16: Cell should be compact - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true, "gfm": true} - * - * 1:1: Incorrect table cell padding style `💩`, expected `'padded'`, `'compact'`, or `'consistent'` - * - * @example - * {"name": "empty.md", "label": "input", "setting": "padded", "gfm": true} - * - * - * - * | | Alpha | Bravo| - * | ------ | ----- | ---: | - * | Charlie| | Echo| - * - * @example - * {"name": "empty.md", "label": "output", "setting": "padded", "gfm": true} - * - * 3:25: Cell should be padded - * 5:10: Cell should be padded - * 5:25: Cell should be padded - * - * @example - * {"name": "missing-body.md", "setting": "padded", "gfm": true} - * - * - * - * | Alpha | Bravo | Charlie | - * | ----- | ------- | ------- | - * | Delta | - * | Echo | Foxtrot | - */ - -const remarkLintTableCellPadding = lintRule$2( - 'remark-lint:table-cell-padding', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - if ( - option !== 'padded' && - option !== 'compact' && - option !== 'consistent' - ) { - file.fail( - 'Incorrect table cell padding style `' + - option + - "`, expected `'padded'`, `'compact'`, or `'consistent'`" - ); - } - - visit$2(tree, 'table', (node) => { - const rows = node.children; - // To do: fix types to always have `align` defined. - /* c8 ignore next */ - const align = node.align || []; - /** @type {number[]} */ - const sizes = Array.from({length: align.length}); - /** @type {Entry[]} */ - const entries = []; - let index = -1; - - // Check rows. - while (++index < rows.length) { - const row = rows[index]; - let column = -1; - - // Check fences (before, between, and after cells). - while (++column < row.children.length) { - const cell = row.children[column]; - - if (cell.children.length > 0) { - const cellStart = pointStart$2(cell).offset; - const cellEnd = pointEnd$1(cell).offset; - const contentStart = pointStart$2(cell.children[0]).offset; - const contentEnd = pointEnd$1( - cell.children[cell.children.length - 1] - ).offset; - - if ( - typeof cellStart !== 'number' || - typeof cellEnd !== 'number' || - typeof contentStart !== 'number' || - typeof contentEnd !== 'number' - ) { - continue - } - - entries.push({ - node: cell, - start: contentStart - cellStart - (column ? 0 : 1), - end: cellEnd - contentEnd - 1, - column - }); - - // Detect max space per 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$3 - }); - - /** - * @param {'start'|'end'} side - * @param {Entry} entry - * @param {0|1} style - * @param {number[]} sizes - */ - function checkSide(side, entry, style, sizes) { - const cell = entry.node; - const column = entry.column; - const spacing = entry[side]; - - if (spacing === undefined || spacing === style) { - return - } - - let reason = 'Cell should be '; - - if (style === 0) { - // Ignore every cell except the biggest in the column. - if (size(cell) < sizes[column]) { - return - } - - reason += 'compact'; - } else { - reason += 'padded'; - - if (spacing > style) { - // May be right or center aligned. - if (size(cell) < sizes[column]) { - return - } - - reason += ' with 1 space, not ' + spacing; - } - } - - /** @type {Point} */ - let point; - - if (side === 'start') { - point = pointStart$2(cell); - if (!column) { - point.column++; - - if (typeof point.offset === 'number') { - point.offset++; - } - } - } else { - point = pointEnd$1(cell); - point.column--; - - if (typeof point.offset === 'number') { - point.offset--; - } - } - - file.message(reason, point); - } - } -); - -/** - * @param {TableCell} node - * @returns {number} - */ -function size(node) { - const head = pointStart$2(node.children[0]).offset; - const tail = pointEnd$1(node.children[node.children.length - 1]).offset; - // Only called when we’re sure offsets exist. - /* c8 ignore next */ - return typeof head === 'number' && typeof tail === 'number' ? tail - head : 0 -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ - -const primitives$1 = new Set(['string', 'number', 'boolean']); - -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule$1(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - - Object.defineProperty(plugin, 'name', {value: id}); - - return plugin - - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$1(ruleId, raw); - - if (!severity) return - - const fatal = severity === 2; - - return (tree, file, next) => { - let index = file.messages.length - 1; - - wrap(rule, (error) => { - const messages = file.messages; - - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } - - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } - - next(); - })(tree, file, options); - } - } -} - -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$1(name, value) { - /** @type {unknown[]} */ - let result; - - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives$1.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } - - let level = result[0]; - - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } - - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } - - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. - return result -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent + * | :----- | ----: | + * |Charlie | Delta | * - * @typedef {string} Type - * @typedef {Object} Props + * @example + * {"name": "not-ok-padded.md", "label": "output", "setting": "consistent", "gfm": true} * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ - -const convert$2 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$2 - } - - if (typeof test === 'string') { - return typeFactory$2(test) - } - - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$2(test) : propsFactory$2(test) - } - - if (typeof test === 'function') { - return castFactory$2(test) - } - - throw new Error('Expected function, string, or object as test') - } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$2(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - - while (++index < tests.length) { - checks[index] = convert$2(tests[index]); - } - - return castFactory$2(any) - - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; - - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - - return false - } -} - -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. + * 7:2: Cell should be padded * - * @param {Props} check - * @returns {AssertAnything} + * @example + * {"name": "ok-compact.md", "setting": "consistent", "gfm": true} + * + * |A |B | + * |-----|-----| + * |Alpha|Bravo| + * + * |C |D | + * |-------|-----| + * |Charlie|Delta| + * + * @example + * {"name": "not-ok-compact.md", "label": "input", "setting": "consistent", "gfm": true} + * + * |A |B | + * |-----|-----| + * |Alpha|Bravo| + * + * |C | D| + * |:------|-----:| + * |Charlie|Delta | + * + * @example + * {"name": "not-ok-compact.md", "label": "output", "setting": "consistent", "gfm": true} + * + * 7:16: Cell should be compact + * + * @example + * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true, "gfm": true} + * + * 1:1: Incorrect table cell padding style `💩`, expected `'padded'`, `'compact'`, or `'consistent'` + * + * @example + * {"name": "empty.md", "label": "input", "setting": "padded", "gfm": true} + * + * + * + * | | Alpha | Bravo| + * | ------ | ----- | ---: | + * | Charlie| | Echo| + * + * @example + * {"name": "empty.md", "label": "output", "setting": "padded", "gfm": true} + * + * 3:25: Cell should be padded + * 5:10: Cell should be padded + * 5:25: Cell should be padded + * + * @example + * {"name": "missing-body.md", "setting": "padded", "gfm": true} + * + * + * + * | Alpha | Bravo | Charlie | + * | ----- | ------- | ------- | + * | Delta | + * | Echo | Foxtrot | */ -function propsFactory$2(check) { - return castFactory$2(all) - - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false +const remarkLintTableCellPadding = lintRule( + 'remark-lint:table-cell-padding', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file, option = 'consistent') => { + if ( + option !== 'padded' && + option !== 'compact' && + option !== 'consistent' + ) { + file.fail( + 'Incorrect table cell padding style `' + + option + + "`, expected `'padded'`, `'compact'`, or `'consistent'`" + ); } - return true - } -} + visit$2(tree, 'table', (node) => { + const rows = node.children; + // To do: fix types to always have `align` defined. + /* c8 ignore next */ + const align = node.align || []; + /** @type {number[]} */ + const sizes = Array.from({length: align.length}); + /** @type {Entry[]} */ + const entries = []; + let index = -1; -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$2(check) { - return castFactory$2(type) + // Check rows. + while (++index < rows.length) { + const row = rows[index]; + let column = -1; - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check - } -} + // Check fences (before, between, and after cells). + while (++column < row.children.length) { + const cell = row.children[column]; -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$2(check) { - return assertion + if (cell.children.length > 0) { + 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; - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) - } -} + if ( + typeof cellStart !== 'number' || + typeof cellEnd !== 'number' || + typeof contentStart !== 'number' || + typeof contentEnd !== 'number' + ) { + continue + } -// Utility to return true. -function ok$2() { - return true -} + entries.push({ + node: cell, + start: contentStart - cellStart - (column ? 0 : 1), + end: cellEnd - contentEnd - 1, + column + }); -/** - * @param {string} d - * @returns {string} - */ -function color$2(d) { - return '\u001B[33m' + d + '\u001B[39m' -} + // Detect max space per column. + sizes[column] = Math.max( + sizes[column] || 0, + contentEnd - contentStart + ); + } + } + } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ + const style = + option === 'consistent' + ? entries[0] && (!entries[0].start || !entries[0].end) + ? 0 + : 1 + : option === 'padded' + ? 1 + : 0; -/** - * Continue traversing as normal - */ -const CONTINUE$2 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$2 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$2 = false; + index = -1; -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$2 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; + while (++index < entries.length) { + checkSide('start', entries[index], style, sizes); + checkSide('end', entries[index], style, sizes); } - const is = convert$2(test); - const step = reverse ? -1 : 1; + return SKIP$2 + }); - factory(tree, null, [])(); + /** + * @param {'start'|'end'} side + * @param {Entry} entry + * @param {0|1} style + * @param {number[]} sizes + */ + function checkSide(side, entry, style, sizes) { + const cell = entry.node; + const column = entry.column; + const spacing = entry[side]; - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let name; + if (spacing === undefined || spacing === style) { + return + } - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + let reason = 'Cell should be '; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$2(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); + if (style === 0) { + // Ignore every cell except the biggest in the column. + if (size(cell) < sizes[column]) { + return } - return visit - - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$2(visitor(node, parents)); - - if (result[0] === EXIT$2) { - return result - } - } - - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$2) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); - - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); - - if (subresult[0] === EXIT$2) { - return subresult - } + reason += 'compact'; + } else { + reason += 'padded'; - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + if (spacing > style) { + // May be right or center aligned. + if (size(cell) < sizes[column]) { + return } - return result + reason += ' with 1 space, not ' + spacing; } } - } - ); - -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$2(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$2, value] - } + /** @type {Point} */ + let point; - return [value] -} + if (side === 'start') { + point = pointStart(cell); + if (!column) { + point.column++; -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ + if (typeof point.offset === 'number') { + point.offset++; + } + } + } else { + point = pointEnd(cell); + point.column--; -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$1 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + if (typeof point.offset === 'number') { + point.offset--; + } } - visitParents$2(tree, test, overload, reverse); - - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + file.message(reason, point); } - ); - -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ + } +); -var pointStart$1 = point$1('start'); -var pointEnd = point$1('end'); +var remarkLintTableCellPadding$1 = remarkLintTableCellPadding; /** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$1(type) { - return point - - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; - - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null - } - } + * @param {TableCell} node + * @returns {number} + */ +function size(node) { + const head = pointStart(node.children[0]).offset; + const tail = pointEnd(node.children[node.children.length - 1]).offset; + // Only called when we’re sure offsets exist. + /* c8 ignore next */ + return typeof head === 'number' && typeof tail === 'number' ? tail - head : 0 } /** @@ -80456,18 +61609,18 @@ function point$1(type) { const reasonStart = 'Missing initial pipe in table fence'; const reasonEnd = 'Missing final pipe in table fence'; -const remarkLintTablePipes = lintRule$1( +const remarkLintTablePipes = lintRule( 'remark-lint:table-pipes', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { const value = String(file); - visit$1(tree, 'table', (node) => { + visit$2(tree, 'table', (node) => { let index = -1; while (++index < node.children.length) { const row = node.children[index]; - const start = pointStart$1(row); + const start = pointStart(row); const end = pointEnd(row); if ( @@ -80488,531 +61641,7 @@ const remarkLintTablePipes = lintRule$1( } ); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ - -const primitives = new Set(['string', 'number', 'boolean']); - -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; - - Object.defineProperty(plugin, 'name', {value: id}); - - return plugin - - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce(ruleId, raw); - - if (!severity) return - - const fatal = severity === 2; - - return (tree, file, next) => { - let index = file.messages.length - 1; - - wrap(rule, (error) => { - const messages = file.messages; - - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} - } - - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } - - next(); - })(tree, file, options); - } - } -} - -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce(name, value) { - /** @type {unknown[]} */ - let result; - - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } - - let level = result[0]; - - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } - - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } - - result[0] = level; - - // @ts-expect-error: it’s now a valid tuple. - return result -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ - -const convert$1 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$1 - } - - if (typeof test === 'string') { - return typeFactory$1(test) - } - - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$1(test) : propsFactory$1(test) - } - - if (typeof test === 'function') { - return castFactory$1(test) - } - - throw new Error('Expected function, string, or object as test') - } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory$1(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - - while (++index < tests.length) { - checks[index] = convert$1(tests[index]); - } - - return castFactory$1(any) - - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; - - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - - return false - } -} - -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory$1(check) { - return castFactory$1(all) - - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; - - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } - - return true - } -} - -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory$1(check) { - return castFactory$1(type) - - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check - } -} - -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory$1(check) { - return assertion - - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) - } -} - -// Utility to return true. -function ok$1() { - return true -} - -/** - * @param {string} d - * @returns {string} - */ -function color$1(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ - -/** - * Continue traversing as normal - */ -const CONTINUE$1 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$1 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$1 = false; - -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$1 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; - } - - const is = convert$1(test); - const step = reverse ? -1 : 1; - - factory(tree, null, [])(); - - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let 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$1(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } - - return visit - - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - 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 - } - } - - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$1) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); - - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); - - if (subresult[0] === EXIT$1) { - return subresult - } - - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - - return result - } - } - } - ); - -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$1(value) { - if (Array.isArray(value)) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$1, value] - } - - return [value] -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ - -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - visitParents$1(tree, test, overload, reverse); - - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ - -var pointStart = point('start'); - -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point(type) { - return point - - /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} - */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; - - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null - } - } -} +var remarkLintTablePipes$1 = remarkLintTablePipes; /** * @author Titus Wormer @@ -81105,7 +61734,7 @@ const remarkLintUnorderedListMarkerStyle = lintRule( ); } - visit(tree, 'list', (node) => { + visit$2(tree, 'list', (node) => { if (node.ordered) return let index = -1; @@ -81135,19 +61764,21 @@ const remarkLintUnorderedListMarkerStyle = lintRule( } ); +var remarkLintUnorderedListMarkerStyle$1 = remarkLintUnorderedListMarkerStyle; + // @see https://github.com/nodejs/node/blob/master/doc/guides/doc-style-guide.md // Add in rules alphabetically const remarkPresetLintNode = [ // Leave preset at the top so it can be overridden - remarkPresetLintRecommended, - [remarkLintBlockquoteIndentation, 2], - [remarkLintCheckboxCharacterStyle, { checked: "x", unchecked: " " }], - remarkLintCheckboxContentIndent, - [remarkLintCodeBlockStyle, "fenced"], - remarkLintDefinitionSpacing, + remarkPresetLintRecommended$1, + [remarkLintBlockquoteIndentation$1, 2], + [remarkLintCheckboxCharacterStyle$1, { checked: "x", unchecked: " " }], + remarkLintCheckboxContentIndent$1, + [remarkLintCodeBlockStyle$1, "fenced"], + remarkLintDefinitionSpacing$1, [ - remarkLintFencedCodeFlag, + remarkLintFencedCodeFlag$1, { flags: [ "bash", @@ -81168,22 +61799,22 @@ const remarkPresetLintNode = [ ], }, ], - [remarkLintFencedCodeMarker, "`"], - [remarkLintFileExtension, "md"], - remarkLintFinalDefinition, - [remarkLintFirstHeadingLevel, 1], - [remarkLintHeadingStyle, "atx"], - [remarkLintListItemIndent, "space"], - remarkLintMaximumLineLength, - remarkLintNoConsecutiveBlankLines, - remarkLintNoFileNameArticles, - remarkLintNoFileNameConsecutiveDashes, - remarkLintNofileNameOuterDashes, - remarkLintNoHeadingIndent, - remarkLintNoMultipleToplevelHeadings, - remarkLintNoShellDollars, - remarkLintNoTableIndentation, - remarkLintNoTabs, + [remarkLintFencedCodeMarker$1, "`"], + [remarkLintFileExtension$1, "md"], + remarkLintFinalDefinition$1, + [remarkLintFirstHeadingLevel$1, 1], + [remarkLintHeadingStyle$1, "atx"], + [remarkLintListItemIndent$1, "space"], + remarkLintMaximumLineLength$1, + remarkLintNoConsecutiveBlankLines$1, + remarkLintNoFileNameArticles$1, + remarkLintNoFileNameConsecutiveDashes$1, + remarkLintNofileNameOuterDashes$1, + remarkLintNoHeadingIndent$1, + remarkLintNoMultipleToplevelHeadings$1, + remarkLintNoShellDollars$1, + remarkLintNoTableIndentation$1, + remarkLintNoTabs$1, remarkLintNoTrailingSpaces, remarkLintNodejsLinks, remarkLintNodejsYamlComments, @@ -81206,11 +61837,11 @@ const remarkPresetLintNode = [ { yes: "V8" }, ], ], - remarkLintRuleStyle, - [remarkLintStrongMarker, "*"], - [remarkLintTableCellPadding, "padded"], - remarkLintTablePipes, - [remarkLintUnorderedListMarkerStyle, "*"], + remarkLintRuleStyle$1, + [remarkLintStrongMarker$1, "*"], + [remarkLintTableCellPadding$1, "padded"], + remarkLintTablePipes$1, + [remarkLintUnorderedListMarkerStyle$1, "*"], ]; var remarkPresetLintNode$1 = /*#__PURE__*/Object.freeze({ @@ -83658,300 +64289,6 @@ function escapeStringRegexp(string) { .replace(/-/g, '\\x2d'); } -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ - -const convert = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - 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) - } - - throw new Error('Expected function, string, or object as test') - } - ); -/** - * @param {Array.} tests - * @returns {AssertAnything} - */ -function anyFactory(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; - - while (++index < tests.length) { - checks[index] = convert(tests[index]); - } - - return castFactory(any) - - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; - - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - - return false - } -} - -/** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} - */ -function propsFactory(check) { - return castFactory(all) - - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; - - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } - - return true - } -} - -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} - */ -function typeFactory(check) { - return castFactory(type) - - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check - } -} - -/** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} - */ -function castFactory(check) { - return assertion - - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) - } -} - -// Utility to return true. -function ok() { - return true -} - -/** - * @param {string} d - * @returns {string} - */ -function color(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ - -/** - * Continue traversing as normal - */ -const CONTINUE = true; -/** - * Do not traverse this node’s children - */ -const SKIP = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT = false; - -const visitParents = - /** - * @type {( - * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) - * )} - */ - ( - /** - * Visit children of tree which pass a test - * - * @param {Node} tree Abstract syntax tree to walk - * @param {Test} test test Test node - * @param {Visitor} visitor Function to run for each node - * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-ignore no visitor given, so `visitor` is test. - visitor = test; - test = null; - } - - var is = convert(test); - var step = reverse ? -1 : 1; - - factory(tree, null, [])(); - - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - var value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string} */ - 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(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } - - return visit - - function visit() { - /** @type {ActionTuple} */ - var result = []; - /** @type {ActionTuple} */ - var subresult; - /** @type {number} */ - var offset; - /** @type {Array.} */ - var 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) { - // @ts-ignore looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-ignore looks like a parent. - grandparents = parents.concat(node); - - // @ts-ignore looks like a parent. - 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 - } - } - } - ); - -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult(value) { - if (Array.isArray(value)) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE, value] - } - - return [value] -} - /** * @typedef Options Configuration. * @property {Test} [ignore] `unist-util-is` test used to assert parents @@ -84027,12 +64364,12 @@ const findAndReplace = settings = {}; } - const ignored = convert(settings.ignore || []); + const ignored = convert$2(settings.ignore || []); const pairs = toPairs(schema); let pairIndex = -1; while (++pairIndex < pairs.length) { - visitParents(tree, 'text', visitor); + visitParents$3(tree, 'text', visitor); } return tree @@ -84189,6 +64526,7 @@ function toFunction(replace) { } /** + * @typedef {import('mdast').Link} Link * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle @@ -84241,7 +64579,6 @@ const gfmAutolinkLiteralToMarkdown = { /** @type {FromMarkdownHandle} */ function enterLiteralAutolink(token) { - // @ts-expect-error: `null` is fine. this.enter({type: 'link', title: null, url: '', children: []}, token); } @@ -84258,7 +64595,8 @@ function exitLiteralAutolinkHttp(token) { /** @type {FromMarkdownHandle} */ function exitLiteralAutolinkWww(token) { this.config.exit.data.call(this, token); - this.stack[this.stack.length - 1].url = 'http://' + this.sliceSerialize(token); + const node = /** @type {Link} */ (this.stack[this.stack.length - 1]); + node.url = 'http://' + this.sliceSerialize(token); } /** @type {FromMarkdownHandle} */ @@ -84276,8 +64614,8 @@ function transformGfmAutolinkLiterals(tree) { findAndReplace( tree, [ - [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i, findUrl], - [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/, findEmail] + [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi, findUrl], + [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/g, findEmail] ], {ignore: ['link', 'linkReference']} ); @@ -84316,7 +64654,6 @@ function findUrl(_, protocol, domain, path, match) { if (!parts[0]) return false /** @type {PhrasingContent} */ - // @ts-expect-error: `null` is fine. const result = { type: 'link', title: null, @@ -84346,7 +64683,6 @@ function findEmail(_, atext, label, match) { return { type: 'link', - // @ts-expect-error: `null` is fine. title: null, url: 'mailto:' + atext + '@' + label, children: [{type: 'text', value: atext + '@' + label}] diff --git a/tools/node-lint-md-cli-rollup/package-lock.json b/tools/node-lint-md-cli-rollup/package-lock.json index 38dc0793812599..6f4faeea257a31 100644 --- a/tools/node-lint-md-cli-rollup/package-lock.json +++ b/tools/node-lint-md-cli-rollup/package-lock.json @@ -209,9 +209,9 @@ } }, "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", "dependencies": { "@types/unist": "*" } @@ -237,9 +237,9 @@ } }, "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/ansi-regex": { "version": "5.0.0", @@ -281,18 +281,18 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -518,11 +518,11 @@ } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "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==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -645,9 +645,9 @@ "dev": true }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -713,19 +713,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-is-element": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", @@ -772,15 +759,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-html/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-whitespace": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", @@ -912,9 +890,9 @@ } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -988,14 +966,11 @@ } }, "node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/is-reference": { @@ -1128,6 +1103,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdast-comment-marker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", @@ -1142,39 +1126,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/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/mdast-util-from-markdown": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", @@ -1284,18 +1235,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-gfm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", @@ -1312,10 +1251,11 @@ } }, "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", - "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", + "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", "dependencies": { + "@types/mdast": "^3.0.0", "ccount": "^2.0.0", "mdast-util-find-and-replace": "^2.0.0", "micromark-util-character": "^1.0.0" @@ -1924,9 +1864,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "engines": { "node": ">=8.6" }, @@ -2017,6 +1957,53 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-parse/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype-parse/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-parse/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "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/rehype-stringify": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", @@ -2031,61 +2018,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - }, + "node_modules/rehype-stringify/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" + "node_modules/rehype-stringify/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", - "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", - "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" - }, + "node_modules/rehype-stringify/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/rehype-stringify/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2093,210 +2065,201 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/rehype/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/rehype/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/rehype/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/rehype/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", - "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", + "node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "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" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unified-lint-rule": { + "node_modules/remark-gfm": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-gfm/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-gfm/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-gfm/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-gfm/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", - "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", + "node_modules/remark-lint": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.1.tgz", + "integrity": "sha512-q4VFsA7LEG4REJhR2P4A6CU9b4cCQL53845CX74Z4N/W0EgB9mm/GXpYzjbEqgkMPl5ctP8yp/vBYTNmjfUCtw==", "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" + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.1.tgz", + "integrity": "sha512-CfjXeaomk3bxt1Y0Z4T/cKVoE+8lm5jw5C+jz8EieWNIziGNUlDxIAbMk1F1sO8EXc4LjkbTSq4zz8h1vOHkew==", "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", "unified": "^10.0.0", - "vfile": "^5.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-checkbox-content-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-blockquote-indentation/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit": { + "node_modules/remark-lint-blockquote-indentation/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, + "node_modules/remark-lint-blockquote-indentation/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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": { @@ -2304,15 +2267,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", - "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", + "node_modules/remark-lint-checkbox-character-style": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.1.tgz", + "integrity": "sha512-f/Dvcw4tsWWv0vx4POVZXZmiytsyGMCKmPiMefz4zfy9hTwTGngp9EZhbDivHXiqd5YTUhvjYXFITEfVdxH4qA==", "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" }, @@ -2321,14 +2283,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-checkbox-character-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-checkbox-character-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-checkbox-character-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2336,59 +2330,79 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-checkbox-content-indent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.1.tgz", + "integrity": "sha512-uv4qIBdIxGshQ1a84a2RClbX39lYfWgPm3Wg35EJbSWPpe+KWt4rYi9nxB51dIEUXw3KAujlOVougPwhAZROuA==", + "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-code-block-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit": { + "node_modules/remark-lint-checkbox-content-indent/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-checkbox-content-indent/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", - "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", + "node_modules/remark-lint-code-block-style": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.1.tgz", + "integrity": "sha512-B6338x1UggrAMe4gdmk1No2L/OkK1d1uCelekj6cnl+Pi5/HLlSw3lXIaOTRNIXOccT1zMmNApA4sDZ5qsQWtw==", "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" }, @@ -2397,14 +2411,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-code-block-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-code-block-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-code-block-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-code-block-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2412,45 +2458,63 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-definition-spacing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.1.tgz", + "integrity": "sha512-jtCUaZ+6KP4nNutBoiWoqBfa2sMsD4uvvFbuU5MOlzI0wlMmaeAq1pxWuNtkK+w8AEk/8CzfCUrLct5w65KSLQ==", + "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/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-definition-spacing/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit": { + "node_modules/remark-lint-definition-spacing/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-definition-spacing/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-definition-spacing/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -2458,9 +2522,9 @@ } }, "node_modules/remark-lint-fenced-code-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", - "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.1.tgz", + "integrity": "sha512-HsEhvalGxCauZO6OAnaVzIBycfaHLuyZxy1KlniWXQJKZ6EjRAsWwkZHYx9qfPl/ZW7zDG+xAoWTqdHjZW/BTg==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2474,60 +2538,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-fenced-code-flag/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-fenced-code-flag/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-fenced-code-flag/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-fenced-code-flag/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -2535,9 +2586,9 @@ } }, "node_modules/remark-lint-fenced-code-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", - "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.1.tgz", + "integrity": "sha512-vFRjlzyxtG3zdvmlTn6cV1YiZAivQwOzYRNnH5KavC39EZHDxqjQl84QTXshgfCzFupvYCi6ykATIa7obgx9jg==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2550,60 +2601,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-fenced-code-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-fenced-code-marker/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-fenced-code-marker/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -2611,9 +2649,9 @@ } }, "node_modules/remark-lint-file-extension": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", - "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.1.tgz", + "integrity": "sha512-A2N6XoLPbYyRhgXyTI7WlW9Nb9QvXQNXG514hjHdNNd0cL+5P4JU6vivgZiYfViCzOLgsys6hwhXBSC9ZQ45tw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2624,14 +2662,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-file-extension/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-file-extension/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-file-extension/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-file-extension/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2640,9 +2710,9 @@ } }, "node_modules/remark-lint-final-definition": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", - "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.1.tgz", + "integrity": "sha512-bzha13GTKFnQ0h4ZvaHadK6HxM2eRJj/yj59aXyvJkHFNx7i0sQn1884t3yYM4ppdDmO+cCMMgsVo8DxE8ifFA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2656,88 +2726,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-final-definition/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-final-definition/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-visit": { + "node_modules/remark-lint-final-definition/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", - "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, + "node_modules/remark-lint-final-definition/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-final-newline/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-final-definition/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2745,83 +2773,76 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", - "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", + "node_modules/remark-lint-final-newline": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.1.tgz", + "integrity": "sha512-vv1LT36frgc0FVc7V52CdOxqh1TqGcNvAVD89935sb9wpEELiUfbGG1Xb9PVZoIaVQcFo8qEDWCvfhsKTKk8Nw==", "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" + "unified-lint-rule": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-final-newline/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-final-newline/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-final-newline/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-final-newline/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", - "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", + "node_modules/remark-lint-first-heading-level": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.1.tgz", + "integrity": "sha512-3ym0v/aMFpHTGv2/DPln6NHB2DFnx6Nbd+3Z9kf6wfnJCzXNA3zXyCKt11i5MPzUV5wlwButcW+JkPDtDJsfog==", "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": { @@ -2829,14 +2850,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-first-heading-level/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-first-heading-level/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-first-heading-level/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-first-heading-level/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2844,45 +2897,64 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.1.tgz", + "integrity": "sha512-CPjbfc9DcV4Qy3d8jyhh/QXsLD5uRtweb0d04p2MyzMDrqwXAq5X4MW3rId3JbVVl7o1AKXq1FdvqIMrh9Rpuw==", + "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/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { + "node_modules/remark-lint-hard-break-spaces/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-hard-break-spaces/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-hard-break-spaces/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -2890,9 +2962,9 @@ } }, "node_modules/remark-lint-heading-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", - "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.1.tgz", + "integrity": "sha512-/9rsTE+coYdUgT/spxg4ioorG2W5XdabLHajKjTOOQ4ME8Wa5fXHMJ3WpK3Vnz8ZKP7WQwTTPsKWIHcy5d6C+w==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -2906,51 +2978,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-heading-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-heading-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-heading-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-heading-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -2958,9 +3026,9 @@ } }, "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", - "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.1.tgz", + "integrity": "sha512-7XjtSLUwvxHi28/q9XMzYy7A+agpArvLlTksD0r1jj5MpGYTSUW9b54rRRV3JxHJMoX+ZJ9juId6GmVaUZwsTg==", "dependencies": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -2973,51 +3041,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-list-item-bullet-indent/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-list-item-bullet-indent/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3025,9 +3089,9 @@ } }, "node_modules/remark-lint-list-item-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", - "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.1.tgz", + "integrity": "sha512-5/H5B2g6TTpJZiwMmBa/Drexwq5Dw50QoypTUgXwFETz91s7zvjy+IGGVoVv0L0LM0rCwblmgtLomqeWIyo9sA==", "dependencies": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -3042,60 +3106,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-list-item-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-list-item-indent/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit": { + "node_modules/remark-lint-list-item-indent/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-list-item-indent/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-list-item-indent/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3103,9 +3154,9 @@ } }, "node_modules/remark-lint-maximum-line-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", - "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.1.tgz", + "integrity": "sha512-R4hiRRx46xa3NE/AY8IKzPTRVyq1ZWrtWVd2KfWwNHmj7a6ASjb75DPzGyckZ46UAQq9mSBPsgL5Rfhq5XmggA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3119,60 +3170,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-maximum-line-length/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-maximum-line-length/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-maximum-line-length/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-maximum-line-length/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-maximum-line-length/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3180,9 +3218,9 @@ } }, "node_modules/remark-lint-no-auto-link-without-protocol": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", - "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.1.tgz", + "integrity": "sha512-FdbB9O4SegELBreglpOXhMyusKORPS0X7KrBY/V+tDo4+2sJHMEEdiN4RbK2ofWwRP7V+muZ5WrscLliuAExQg==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -3197,60 +3235,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3258,9 +3283,9 @@ } }, "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", - "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.1.tgz", + "integrity": "sha512-3aUFCV1BSqO15MuJ6fQept36An/vLo9VgAj1TRWk4Gsnaewbq7haT/m6eiYn5Ia8t2sSBbv4LKz1lwnj5nOVPQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3275,72 +3300,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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": { @@ -3349,9 +3348,9 @@ } }, "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", - "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.1.tgz", + "integrity": "sha512-nvwglXFdR8ubTjSduK3cVdgBaKCH/DqV0kVkCKSQmLEl8NyozFH03VB/bhQDCrmSeNt6rYClBF0ppaHT27OmpA==", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -3367,60 +3366,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3428,9 +3414,9 @@ } }, "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", - "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.1.tgz", + "integrity": "sha512-gwQe65dW2fkMQR02hwlHtc0OOvshst+gXMOEwd1/fpIb6OORpMiK6ueoNBxCnKSsKqftjWV0JXVdZ7MfKKxQQw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3445,60 +3431,59 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-duplicate-definitions/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -3506,9 +3491,9 @@ } }, "node_modules/remark-lint-no-file-name-articles": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", - "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.1.tgz", + "integrity": "sha512-9kZ/ydzJlntswJjsQEbPPx0tc6uAPuowmG/3aOCSE+6CjJ+bCQZiVLL3VhjktNyzFxDGTDN6LlbVwiyIHEUMwA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3519,14 +3504,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-no-file-name-articles/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-articles/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-no-file-name-articles/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-articles/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3535,9 +3552,9 @@ } }, "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", - "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.1.tgz", + "integrity": "sha512-e9ei9KwQSRzUQeYHEhCKUMDeavFOIj46NtuyZxYtrklOcblvaZLAV133UcFHk5CimdUj3dzTtFZebHdpvu5omw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3548,14 +3565,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3564,9 +3613,9 @@ } }, "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", - "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.1.tgz", + "integrity": "sha512-INp+0gW5T2j6+sHglmDmCLL7/goVKCryXyf+ZApB5oWYBpVr2fLnHEHTUmkbQkksxe7me+VsB+WW/KN1PXGrtw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3577,14 +3626,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3593,9 +3674,9 @@ } }, "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", - "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.1.tgz", + "integrity": "sha512-IRYlydfT0Xt4AEs5OKSBGP9hLNDckd1mKcV8crnNu91HhcmFVJznzsLV1QrUTTI94cwkSmSWqpjNzsDrKGPbIw==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -3611,60 +3692,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3672,9 +3740,9 @@ } }, "node_modules/remark-lint-no-heading-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", - "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.1.tgz", + "integrity": "sha512-LjRsRJOPT1M5MwvGxGEPIHzB713chWgJF5v/FNaHnniLgBrwIbpmsqEhAAam/+i593B5tx84ZyaCf8ujXTP0gg==", "dependencies": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -3689,60 +3757,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-heading-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-heading-indent/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-heading-indent/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-heading-indent/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-heading-indent/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3750,9 +3805,9 @@ } }, "node_modules/remark-lint-no-inline-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", - "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.1.tgz", + "integrity": "sha512-UcjJ2XTf7kOmQo5mU/5AV+Gth1YYGcp+gYU4gS/CzdOLYstqsS/W+IN6ALJjEbdbtSyfWCElpxI4p/mW16Z90A==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -3766,51 +3821,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-inline-padding/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-inline-padding/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-inline-padding/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-inline-padding/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3818,9 +3869,9 @@ } }, "node_modules/remark-lint-no-literal-urls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", - "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.1.tgz", + "integrity": "sha512-3OAFcaZawfrFgZGrpuZlNPyuvfIURtUzDN7/Bl2X42ivqx4ih1OH9LtiBgz+J0g1DEWnC5ebOmDr7x6XLM76Fw==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -3835,60 +3886,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-literal-urls/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-literal-urls/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-literal-urls/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-literal-urls/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-literal-urls/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -3896,9 +3934,9 @@ } }, "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", - "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.1.tgz", + "integrity": "sha512-K62PKOOanFiFM4R0oHlo1PKWJa0dPPasQl28yzk6G2xZzqc5eJm5S3d0grU479jqEUbDQMaDQw282hO6WR/MbA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3913,60 +3951,59 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -3974,9 +4011,9 @@ } }, "node_modules/remark-lint-no-shell-dollars": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", - "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.1.tgz", + "integrity": "sha512-QvnA8Ltj3FPaAqUu0DebKYv66LFndTk0fXVZ9rQWOjTEVIKImy9Dy59kVqwYMpCwZbJkpigu2bMl/7UG/BA0XA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3989,51 +4026,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-shell-dollars/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-shell-dollars/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-shell-dollars/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4041,9 +4074,9 @@ } }, "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", - "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.1.tgz", + "integrity": "sha512-0o0YO88Atib0eWloy5ZbL2IZ1axMNysbJI5j58sxMjEwLq1JORtGOR9Z6aHsOccS5yseeenw5w3DoMLB9PtJtw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4056,51 +4089,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4108,9 +4137,9 @@ } }, "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", - "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.1.tgz", + "integrity": "sha512-uXujnVm5LXLtGyJkTIbn/uxDRu507B9vC8TieiX6HX8OjVeDWUjtcVJOaqeyLJGjV0Ri1Y+AegMNWx5eDBHTDQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4123,51 +4152,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4175,9 +4200,9 @@ } }, "node_modules/remark-lint-no-table-indentation": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", - "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.1.tgz", + "integrity": "sha512-GYBX5P1Vj0gO7S7JLU2tpYR5rg9xbeccPQ0ZgHYK4d7T9FjDwfE1hrdvlha3k8s3CFKqQ7MC0OgQw/2IN413MA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4191,115 +4216,108 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-table-indentation/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-table-indentation/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-table-indentation/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-table-indentation/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-table-indentation/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-tabs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.1.tgz", + "integrity": "sha512-B2q1I+fyRDvWTQxCC91NoEvz0KzI9e6Yhu1TdOLkwc02hMWj869G165Rh+EcBKGW/CLKuMPhIn2XtL86emqZRw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "vfile-location": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-tabs/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-tabs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", - "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" + "node_modules/remark-lint-no-tabs/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-tabs/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-tabs/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-tabs/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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": { @@ -4315,10 +4333,22 @@ "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==", + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-lint-no-undefined-references": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", - "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.1.tgz", + "integrity": "sha512-mmNJO30TYMxwfFJPHkwKNRaW63sU9ffhpb4xkyhyHDmnsplQ96RVYR4WGOXw0/wR+gZECmFtBU+OIWz0cbaiEw==", "dependencies": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -4334,72 +4364,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-undefined-references/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-undefined-references/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-undefined-references/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, + "node_modules/remark-lint-no-undefined-references/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-no-undefined-references/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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": { @@ -4408,9 +4412,9 @@ } }, "node_modules/remark-lint-no-unused-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", - "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.1.tgz", + "integrity": "sha512-bcbboInyb8vAPtYakZdaxRQsDIdQnV5WvUdc03PWFlG8YtGOhRQ57SPc+4uVH+VwHoq+lsEsRszr4sOXuuopxw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4423,51 +4427,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, + "node_modules/remark-lint-no-unused-definitions/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-unused-definitions/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-no-unused-definitions/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4475,9 +4475,9 @@ } }, "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.1.tgz", + "integrity": "sha512-CGXvolLwfZIxG9hm4o7OXQXEEpu3r5oyTpYGteJDtOSrpVrBSqFKNq7lfhKYFQkcg2AMJYrH9XEexrYvAoUQOQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4491,60 +4491,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4552,9 +4539,9 @@ } }, "node_modules/remark-lint-prohibited-strings": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", - "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.1.0.tgz", + "integrity": "sha512-tbIXL7cmzZrJEc+hcvLUv9jqU9sxi7MO9atrA/rY4ivVG5xomk+BycE6xFVwiwQC6Fn8dguJ6eHA4/UcT0Xm6w==", "dependencies": { "escape-string-regexp": "^4.0.0", "unified-lint-rule": "^1.0.2", @@ -4563,86 +4550,87 @@ "vfile-location": "^3.0.1" } }, - "node_modules/remark-lint-rule-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", - "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", - "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" + "node_modules/remark-lint-prohibited-strings/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-rule-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" + "node_modules/remark-lint-prohibited-strings/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==", + "dependencies": { + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "unist-util-is": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", - "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", + "node_modules/remark-lint-prohibited-strings/node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.1.tgz", + "integrity": "sha512-j1e60nfZJk0C6mvDZkiFwVu0b58f219ATlMNaZ9h8QdQhdxD/0kUnizJ7xW3wS4sHtCgkKGctAp04Ma0c+Dkhg==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4655,14 +4643,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-rule-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-rule-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-rule-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4670,45 +4690,63 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-strong-marker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.1.tgz", + "integrity": "sha512-J5dJviBd747vXBkFuA2j/Ni7RjTg+Mg2GgXlPHtbgDnal51CdN2WXDmbVG/A98+3P18MlysvQ7KnBrSiiuGBpQ==", + "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-strong-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-strong-marker/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { + "node_modules/remark-lint-strong-marker/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-strong-marker/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -4716,9 +4754,9 @@ } }, "node_modules/remark-lint-table-cell-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", - "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.1.tgz", + "integrity": "sha512-NdF0WHFOaMjeumRIrGHXVadwWkgnfJuMb96FGbf1HvSEv9l41PHkS1KTsL6Zoe1Cva57niAuarMv6xzcJqVjrA==", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -4732,14 +4770,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-table-cell-padding/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4747,75 +4817,126 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-table-pipes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.1.tgz", + "integrity": "sha512-om6i8SMSjMsR/mYlx5cMSoxXK+EFI8/n73qCVx/RAhFCIsW4TFR+gYmgFTyLr5Mp4vqjV3uYBIR9Ucv6Johauw==", + "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-table-cell-padding/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-table-pipes/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { + "node_modules/remark-lint-table-pipes/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-table-cell-padding/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.1.tgz", + "integrity": "sha512-DPveL2hhkcY608Bkn/Hx+C7pxviufpYyRiu0CnfFxkbLBlMgVdvVIOGCCOlhbvKuGtozmH/RCRsdIfzjlkXiew==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@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-unordered-list-marker-style/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-table-pipes": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", - "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", - "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" - }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-table-pipes/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", - "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4823,76 +4944,63 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit": { + "node_modules/remark-lint/node_modules/is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, + "node_modules/remark-lint/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", + "node_modules/remark-lint/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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", + "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-unordered-list-marker-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "node_modules/remark-message-control": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", "unified": "^10.0.0", + "unified-message-control": "^4.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4900,45 +5008,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-message-control/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-message-control/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, + "node_modules/remark-message-control/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-message-control/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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", @@ -5001,61 +5111,10 @@ "node": ">=12.0.0" } }, - "node_modules/remark-preset-lint-node/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-preset-lint-node/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-preset-lint-recommended": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", - "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.1.tgz", + "integrity": "sha512-8ZlwP2aDCGf+3UFPP1K8CofWI/WLoq8hPhQiuKotCFNSdTe98/27XYqWXpbMt4feWtX4+tcJY1y0duuLK5lhBg==", "dependencies": { "@types/mdast": "^3.0.0", "remark-lint": "^9.0.0", @@ -5068,118 +5127,59 @@ "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/mdast-comment-marker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", - "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-recommended/node_modules/remark-lint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", - "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", - "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-preset-lint-recommended/node_modules/remark-message-control": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", - "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "rehype": "^12.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-recommended/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" + "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/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-preset-lint-recommended/node_modules/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/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" + "node_modules/remark-preset-lint-recommended/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-preset-lint-recommended/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" - }, + "node_modules/remark-preset-lint-recommended/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-preset-lint-recommended/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-preset-lint-recommended/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "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": { @@ -5327,89 +5327,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark/node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/remark/node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -5419,12 +5336,12 @@ } }, "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { @@ -5440,9 +5357,9 @@ } }, "node_modules/rollup": { - "version": "2.52.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", - "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", + "version": "2.56.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", + "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -5474,9 +5391,9 @@ ] }, "node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5630,18 +5547,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/to-vfile/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/to-vfile/node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -5671,9 +5576,9 @@ } }, "node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5685,17 +5590,16 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", + "bail": "^1.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" + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, "funding": { "type": "opencollective", @@ -5757,14 +5661,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/unified-engine/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, "node_modules/unified-engine/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -5777,21 +5673,121 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/unified-engine/node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "node_modules/unified-lint-rule": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", + "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", + "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/bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified-lint-rule/node_modules/is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified-lint-rule/node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified-lint-rule/node_modules/unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "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/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/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/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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/unified/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { - "wrapped": "^1.0.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", @@ -5820,29 +5816,29 @@ } }, "node_modules/unist-util-is": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", - "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.2" }, "funding": { "type": "opencollective", @@ -5850,13 +5846,13 @@ } }, "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5864,12 +5860,25 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "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": "^4.0.0" + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5897,9 +5906,13 @@ } }, "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -5918,6 +5931,18 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vfile-message/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vfile-reporter": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", @@ -5954,18 +5979,6 @@ "node": ">=6" } }, - "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vfile-sort": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", @@ -5984,6 +5997,18 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vfile/node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/web-namespaces": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.0.tgz", @@ -6169,9 +6194,9 @@ } }, "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", + "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", "requires": { "@types/unist": "*" } @@ -6197,9 +6222,9 @@ } }, "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "ansi-regex": { "version": "5.0.0", @@ -6229,14 +6254,14 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "binary-extensions": { "version": "2.2.0", @@ -6398,9 +6423,9 @@ } }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "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==" }, "esprima": { "version": "4.0.1", @@ -6485,9 +6510,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6532,17 +6557,6 @@ "vfile": "^5.0.0", "vfile-location": "^4.0.0", "web-namespaces": "^2.0.0" - }, - "dependencies": { - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } - } } }, "hast-util-is-element": { @@ -6577,13 +6591,6 @@ "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "unist-util-is": "^5.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - } } }, "hast-util-whitespace": { @@ -6671,9 +6678,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -6724,9 +6731,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "is-reference": { "version": "1.2.1", @@ -6828,6 +6835,11 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==" }, + "mdast-comment-marker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==" + }, "mdast-util-find-and-replace": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", @@ -6836,27 +6848,6 @@ "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^4.0.0" - }, - "dependencies": { - "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==" - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "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==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } } }, "mdast-util-from-markdown": { @@ -6927,14 +6918,6 @@ "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } } } }, @@ -6950,10 +6933,11 @@ } }, "mdast-util-gfm-autolink-literal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", - "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", + "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", "requires": { + "@types/mdast": "^3.0.0", "ccount": "^2.0.0", "mdast-util-find-and-replace": "^2.0.0", "micromark-util-character": "^1.0.0" @@ -7326,9 +7310,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pluralize": { "version": "8.0.0", @@ -7376,6 +7360,37 @@ "rehype-parse": "^8.0.0", "rehype-stringify": "^9.0.0", "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "requires": { + "@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" + } + } } }, "rehype-parse": { @@ -7387,6 +7402,37 @@ "hast-util-from-parse5": "^7.0.0", "parse5": "^6.0.0", "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "requires": { + "@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" + } + } } }, "rehype-stringify": { @@ -7397,6 +7443,37 @@ "@types/hast": "^2.0.0", "hast-util-to-html": "^8.0.0", "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "requires": { + "@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" + } + } } }, "remark": { @@ -7407,81 +7484,95 @@ "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", "unified": "^9.1.0" + } + }, + "remark-gfm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "requires": { + "@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" + } + } + } + }, + "remark-lint": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.1.tgz", + "integrity": "sha512-q4VFsA7LEG4REJhR2P4A6CU9b4cCQL53845CX74Z4N/W0EgB9mm/GXpYzjbEqgkMPl5ctP8yp/vBYTNmjfUCtw==", + "requires": { + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" }, "dependencies": { "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" } } } }, - "remark-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" - } - }, "remark-lint-blockquote-indentation": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", - "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.1.tgz", + "integrity": "sha512-CfjXeaomk3bxt1Y0Z4T/cKVoE+8lm5jw5C+jz8EieWNIziGNUlDxIAbMk1F1sO8EXc4LjkbTSq4zz8h1vOHkew==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -7492,52 +7583,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-checkbox-character-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", - "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.1.tgz", + "integrity": "sha512-f/Dvcw4tsWWv0vx4POVZXZmiytsyGMCKmPiMefz4zfy9hTwTGngp9EZhbDivHXiqd5YTUhvjYXFITEfVdxH4qA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7546,52 +7626,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-checkbox-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", - "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.1.tgz", + "integrity": "sha512-uv4qIBdIxGshQ1a84a2RClbX39lYfWgPm3Wg35EJbSWPpe+KWt4rYi9nxB51dIEUXw3KAujlOVougPwhAZROuA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7601,61 +7670,41 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } } }, "remark-lint-code-block-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", - "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.1.tgz", + "integrity": "sha512-B6338x1UggrAMe4gdmk1No2L/OkK1d1uCelekj6cnl+Pi5/HLlSw3lXIaOTRNIXOccT1zMmNApA4sDZ5qsQWtw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7665,52 +7714,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-definition-spacing": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", - "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.1.tgz", + "integrity": "sha512-jtCUaZ+6KP4nNutBoiWoqBfa2sMsD4uvvFbuU5MOlzI0wlMmaeAq1pxWuNtkK+w8AEk/8CzfCUrLct5w65KSLQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7719,52 +7757,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-fenced-code-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", - "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.1.tgz", + "integrity": "sha512-HsEhvalGxCauZO6OAnaVzIBycfaHLuyZxy1KlniWXQJKZ6EjRAsWwkZHYx9qfPl/ZW7zDG+xAoWTqdHjZW/BTg==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7774,52 +7801,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-fenced-code-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", - "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.1.tgz", + "integrity": "sha512-vFRjlzyxtG3zdvmlTn6cV1YiZAivQwOzYRNnH5KavC39EZHDxqjQl84QTXshgfCzFupvYCi6ykATIa7obgx9jg==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7828,75 +7844,82 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-file-extension": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", - "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.1.tgz", + "integrity": "sha512-A2N6XoLPbYyRhgXyTI7WlW9Nb9QvXQNXG514hjHdNNd0cL+5P4JU6vivgZiYfViCzOLgsys6hwhXBSC9ZQ45tw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-final-definition": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", - "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.1.tgz", + "integrity": "sha512-bzha13GTKFnQ0h4ZvaHadK6HxM2eRJj/yj59aXyvJkHFNx7i0sQn1884t3yYM4ppdDmO+cCMMgsVo8DxE8ifFA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7906,75 +7929,82 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", - "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.1.tgz", + "integrity": "sha512-vv1LT36frgc0FVc7V52CdOxqh1TqGcNvAVD89935sb9wpEELiUfbGG1Xb9PVZoIaVQcFo8qEDWCvfhsKTKk8Nw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-first-heading-level": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", - "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.1.tgz", + "integrity": "sha512-3ym0v/aMFpHTGv2/DPln6NHB2DFnx6Nbd+3Z9kf6wfnJCzXNA3zXyCKt11i5MPzUV5wlwButcW+JkPDtDJsfog==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7983,47 +8013,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-hard-break-spaces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", - "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.1.tgz", + "integrity": "sha512-CPjbfc9DcV4Qy3d8jyhh/QXsLD5uRtweb0d04p2MyzMDrqwXAq5X4MW3rId3JbVVl7o1AKXq1FdvqIMrh9Rpuw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8033,52 +8057,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-heading-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", - "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.1.tgz", + "integrity": "sha512-/9rsTE+coYdUgT/spxg4ioorG2W5XdabLHajKjTOOQ4ME8Wa5fXHMJ3WpK3Vnz8ZKP7WQwTTPsKWIHcy5d6C+w==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -8088,47 +8101,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-list-item-bullet-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", - "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.1.tgz", + "integrity": "sha512-7XjtSLUwvxHi28/q9XMzYy7A+agpArvLlTksD0r1jj5MpGYTSUW9b54rRRV3JxHJMoX+ZJ9juId6GmVaUZwsTg==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8137,47 +8144,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-list-item-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", - "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.1.tgz", + "integrity": "sha512-5/H5B2g6TTpJZiwMmBa/Drexwq5Dw50QoypTUgXwFETz91s7zvjy+IGGVoVv0L0LM0rCwblmgtLomqeWIyo9sA==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8188,52 +8189,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-maximum-line-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", - "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.1.tgz", + "integrity": "sha512-R4hiRRx46xa3NE/AY8IKzPTRVyq1ZWrtWVd2KfWwNHmj7a6ASjb75DPzGyckZ46UAQq9mSBPsgL5Rfhq5XmggA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8243,52 +8233,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-auto-link-without-protocol": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", - "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.1.tgz", + "integrity": "sha512-FdbB9O4SegELBreglpOXhMyusKORPS0X7KrBY/V+tDo4+2sJHMEEdiN4RbK2ofWwRP7V+muZ5WrscLliuAExQg==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -8299,52 +8278,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-blockquote-without-marker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", - "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.1.tgz", + "integrity": "sha512-3aUFCV1BSqO15MuJ6fQept36An/vLo9VgAj1TRWk4Gsnaewbq7haT/m6eiYn5Ia8t2sSBbv4LKz1lwnj5nOVPQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8355,61 +8323,41 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } } }, "remark-lint-no-consecutive-blank-lines": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", - "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.1.tgz", + "integrity": "sha512-nvwglXFdR8ubTjSduK3cVdgBaKCH/DqV0kVkCKSQmLEl8NyozFH03VB/bhQDCrmSeNt6rYClBF0ppaHT27OmpA==", "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -8421,52 +8369,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-duplicate-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", - "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.1.tgz", + "integrity": "sha512-gwQe65dW2fkMQR02hwlHtc0OOvshst+gXMOEwd1/fpIb6OORpMiK6ueoNBxCnKSsKqftjWV0JXVdZ7MfKKxQQw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8477,121 +8414,172 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^2.0.0" } } } }, "remark-lint-no-file-name-articles": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", - "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.1.tgz", + "integrity": "sha512-9kZ/ydzJlntswJjsQEbPPx0tc6uAPuowmG/3aOCSE+6CjJ+bCQZiVLL3VhjktNyzFxDGTDN6LlbVwiyIHEUMwA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", - "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.1.tgz", + "integrity": "sha512-e9ei9KwQSRzUQeYHEhCKUMDeavFOIj46NtuyZxYtrklOcblvaZLAV133UcFHk5CimdUj3dzTtFZebHdpvu5omw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-file-name-outer-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", - "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.1.tgz", + "integrity": "sha512-INp+0gW5T2j6+sHglmDmCLL7/goVKCryXyf+ZApB5oWYBpVr2fLnHEHTUmkbQkksxe7me+VsB+WW/KN1PXGrtw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-heading-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", - "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.1.tgz", + "integrity": "sha512-IRYlydfT0Xt4AEs5OKSBGP9hLNDckd1mKcV8crnNu91HhcmFVJznzsLV1QrUTTI94cwkSmSWqpjNzsDrKGPbIw==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -8603,52 +8591,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-heading-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", - "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.1.tgz", + "integrity": "sha512-LjRsRJOPT1M5MwvGxGEPIHzB713chWgJF5v/FNaHnniLgBrwIbpmsqEhAAam/+i593B5tx84ZyaCf8ujXTP0gg==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8659,102 +8636,85 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-inline-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", - "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.1.tgz", + "integrity": "sha512-UcjJ2XTf7kOmQo5mU/5AV+Gth1YYGcp+gYU4gS/CzdOLYstqsS/W+IN6ALJjEbdbtSyfWCElpxI4p/mW16Z90A==", "requires": { "@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" - }, - "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-literal-urls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", - "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.1.tgz", + "integrity": "sha512-3OAFcaZawfrFgZGrpuZlNPyuvfIURtUzDN7/Bl2X42ivqx4ih1OH9LtiBgz+J0g1DEWnC5ebOmDr7x6XLM76Fw==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -8765,52 +8725,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-multiple-toplevel-headings": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", - "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.1.tgz", + "integrity": "sha512-K62PKOOanFiFM4R0oHlo1PKWJa0dPPasQl28yzk6G2xZzqc5eJm5S3d0grU479jqEUbDQMaDQw282hO6WR/MbA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8821,52 +8770,49 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^2.0.0" } } } }, "remark-lint-no-shell-dollars": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", - "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.1.tgz", + "integrity": "sha512-QvnA8Ltj3FPaAqUu0DebKYv66LFndTk0fXVZ9rQWOjTEVIKImy9Dy59kVqwYMpCwZbJkpigu2bMl/7UG/BA0XA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8875,47 +8821,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-shortcut-reference-image": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", - "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.1.tgz", + "integrity": "sha512-0o0YO88Atib0eWloy5ZbL2IZ1axMNysbJI5j58sxMjEwLq1JORtGOR9Z6aHsOccS5yseeenw5w3DoMLB9PtJtw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8924,47 +8864,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-shortcut-reference-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", - "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.1.tgz", + "integrity": "sha512-uXujnVm5LXLtGyJkTIbn/uxDRu507B9vC8TieiX6HX8OjVeDWUjtcVJOaqeyLJGjV0Ri1Y+AegMNWx5eDBHTDQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8973,47 +8907,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-no-table-indentation": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", - "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.1.tgz", + "integrity": "sha512-GYBX5P1Vj0gO7S7JLU2tpYR5rg9xbeccPQ0ZgHYK4d7T9FjDwfE1hrdvlha3k8s3CFKqQ7MC0OgQw/2IN413MA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9023,61 +8951,41 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } } }, "remark-lint-no-tabs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", - "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.1.tgz", + "integrity": "sha512-B2q1I+fyRDvWTQxCC91NoEvz0KzI9e6Yhu1TdOLkwc02hMWj869G165Rh+EcBKGW/CLKuMPhIn2XtL86emqZRw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9085,23 +8993,32 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } @@ -9113,12 +9030,22 @@ "integrity": "sha512-cj8t+nvtO6eAY2lJC7o5du8VeOCK13XiDUHL4U6k5aw6ZLr3EYWbQ/rNc6cr60eHkh5Ldm09KiZjV3CWpxqJ0g==", "requires": { "unified-lint-rule": "^1.0.2" + }, + "dependencies": { + "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==", + "requires": { + "wrapped": "^1.0.1" + } + } } }, "remark-lint-no-undefined-references": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", - "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.1.tgz", + "integrity": "sha512-mmNJO30TYMxwfFJPHkwKNRaW63sU9ffhpb4xkyhyHDmnsplQ96RVYR4WGOXw0/wR+gZECmFtBU+OIWz0cbaiEw==", "requires": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -9130,61 +9057,41 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } } }, "remark-lint-no-unused-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", - "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.1.tgz", + "integrity": "sha512-bcbboInyb8vAPtYakZdaxRQsDIdQnV5WvUdc03PWFlG8YtGOhRQ57SPc+4uVH+VwHoq+lsEsRszr4sOXuuopxw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9193,47 +9100,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-ordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.1.tgz", + "integrity": "sha512-CGXvolLwfZIxG9hm4o7OXQXEEpu3r5oyTpYGteJDtOSrpVrBSqFKNq7lfhKYFQkcg2AMJYrH9XEexrYvAoUQOQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9243,118 +9144,102 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-prohibited-strings": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", - "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.1.0.tgz", + "integrity": "sha512-tbIXL7cmzZrJEc+hcvLUv9jqU9sxi7MO9atrA/rY4ivVG5xomk+BycE6xFVwiwQC6Fn8dguJ6eHA4/UcT0Xm6w==", "requires": { "escape-string-regexp": "^4.0.0", "unified-lint-rule": "^1.0.2", "unist-util-position": "^3.1.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.1" - } - }, - "remark-lint-rule-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", - "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", - "requires": { - "@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" }, "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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==", "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" + "wrapped": "^1.0.1" } }, "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" }, "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" } }, "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "unist-util-is": "^4.0.0" } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" } } }, - "remark-lint-strong-marker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", - "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", + "remark-lint-rule-style": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.1.tgz", + "integrity": "sha512-j1e60nfZJk0C6mvDZkiFwVu0b58f219ATlMNaZ9h8QdQhdxD/0kUnizJ7xW3wS4sHtCgkKGctAp04Ma0c+Dkhg==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9363,52 +9248,84 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } + } + } + }, + "remark-lint-strong-marker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.1.tgz", + "integrity": "sha512-J5dJviBd747vXBkFuA2j/Ni7RjTg+Mg2GgXlPHtbgDnal51CdN2WXDmbVG/A98+3P18MlysvQ7KnBrSiiuGBpQ==", + "requires": { + "@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" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-table-cell-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", - "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.1.tgz", + "integrity": "sha512-NdF0WHFOaMjeumRIrGHXVadwWkgnfJuMb96FGbf1HvSEv9l41PHkS1KTsL6Zoe1Cva57niAuarMv6xzcJqVjrA==", "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -9418,52 +9335,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-table-pipes": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", - "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.1.tgz", + "integrity": "sha512-om6i8SMSjMsR/mYlx5cMSoxXK+EFI8/n73qCVx/RAhFCIsW4TFR+gYmgFTyLr5Mp4vqjV3uYBIR9Ucv6Johauw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9472,52 +9378,41 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } }, "remark-lint-unordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.1.tgz", + "integrity": "sha512-DPveL2hhkcY608Bkn/Hx+C7pxviufpYyRiu0CnfFxkbLBlMgVdvVIOGCCOlhbvKuGtozmH/RCRsdIfzjlkXiew==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9527,44 +9422,77 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + }, + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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", - "unified": "^10.0.0", "vfile": "^5.0.0" } + } + } + }, + "remark-message-control": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", + "vfile": "^5.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { + "is-plain-obj": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.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" } } } @@ -9616,49 +9544,12 @@ "semver": "^7.3.2", "unified-lint-rule": "^2.0.0", "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } } }, "remark-preset-lint-recommended": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", - "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.1.tgz", + "integrity": "sha512-8ZlwP2aDCGf+3UFPP1K8CofWI/WLoq8hPhQiuKotCFNSdTe98/27XYqWXpbMt4feWtX4+tcJY1y0duuLK5lhBg==", "requires": { "@types/mdast": "^3.0.0", "remark-lint": "^9.0.0", @@ -9680,77 +9571,32 @@ "unified": "^10.0.0" }, "dependencies": { - "mdast-comment-marker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", - "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==" - }, - "remark-lint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", - "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", - "requires": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" - } - }, - "remark-message-control": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", - "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "rehype": "^12.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" - } + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "unified-message-control": { + "is-plain-obj": { "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==", - "requires": { - "@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" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, - "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==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "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==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } + "trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { "@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" } } @@ -9852,12 +9698,12 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -9867,9 +9713,9 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "rollup": { - "version": "2.52.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", - "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", + "version": "2.56.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", + "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -9881,9 +9727,9 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" } @@ -9995,14 +9841,6 @@ "vfile": "^4.0.0" }, "dependencies": { - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, "vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -10026,9 +9864,9 @@ } }, "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, "typedarray": { "version": "0.0.6", @@ -10036,17 +9874,38 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", + "bail": "^1.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" + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } } }, "unified-args": { @@ -10096,11 +9955,6 @@ "sprintf-js": "~1.0.2" } }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -10109,20 +9963,74 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" } + } + } + }, + "unified-lint-rule": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", + "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + }, + "unified": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "requires": { + "@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" + } } } }, - "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==", + "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==", "requires": { - "wrapped": "^1.0.1" + "@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" + }, + "dependencies": { + "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==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + } + } } }, "unist-util-generated": { @@ -10139,40 +10047,51 @@ } }, "unist-util-is": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", - "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "requires": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.2" } }, "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } } }, "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "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==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" } }, "util-deprecate": { @@ -10189,12 +10108,26 @@ "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "requires": { + "@types/unist": "^2.0.0" + } + } } }, "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } }, "vfile-message": { "version": "3.0.2", @@ -10203,6 +10136,16 @@ "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "requires": { + "@types/unist": "^2.0.0" + } + } } }, "vfile-reporter": { @@ -10230,14 +10173,6 @@ "requires": { "has-flag": "^3.0.0" } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } } } }, diff --git a/tools/node-lint-md-cli-rollup/rollup.config.js b/tools/node-lint-md-cli-rollup/rollup.config.js index 654f033cf65b8d..93a97c12f8041d 100644 --- a/tools/node-lint-md-cli-rollup/rollup.config.js +++ b/tools/node-lint-md-cli-rollup/rollup.config.js @@ -40,13 +40,15 @@ module.exports = { 'fsevents = require(\'fsevents\');', 'fsevents = undefined;' ); } + // Remove circular dependency in glob that messes up rollup + return code.replace("var Glob = require('./glob.js').Glob", ''); } }, json({ preferConst: true }), nodeResolve(), // tells Rollup how to find date-fns in node_modules - commonjs(), // Converts date-fns to ES modules + commonjs(), { name: 'banner', renderChunk(code) { From 158d4464d23193efe2ea1a5fe9c6d0f32580c841 Mon Sep 17 00:00:00 2001 From: mary marchini Date: Fri, 20 Aug 2021 05:51:52 -0700 Subject: [PATCH 12/33] meta: add gyp as owner of gyp files and tools/gyp Co-authored-by: Jiawen Geng PR-URL: https://github.com/nodejs/node/pull/34847 Reviewed-By: James M Snell Reviewed-By: Jiawen Geng Reviewed-By: Ujjwal Sharma Reviewed-By: Matteo Collina Reviewed-By: Luigi Pinca --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7fdbdc7ef86e95..dfc0f5a457bc69 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -97,6 +97,12 @@ /doc/guides/adding-new-napi-api.md @nodejs/n-api /doc/api/n-api.md @nodejs/n-api +# gyp + +*.gyp @nodejs/gyp +*.gypi @nodejs/gyp +/tools/gyp/**/* @nodejs/gyp + # WASI /deps/uvwasi/ @nodejs/wasi /doc/api/wasi.md @nodejs/wasi From 0918ea068340487d9ecfd5f34ec3df0e55c86ab8 Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Sun, 15 Aug 2021 11:00:35 +0530 Subject: [PATCH 13/33] src: add a constructor overload for CallbackScope This overload accepts the current Environment* as an argument, unlike the other constructor, which accepts an Isolate*. This is useful because we can pass the current Environment* directly instead of recomputing it from the Isolate* inside the constructor. Signed-off-by: Darshan Sen PR-URL: https://github.com/nodejs/node/pull/39768 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Franziska Hinkelmann --- src/api/async_resource.cc | 4 +--- src/api/callback.cc | 10 ++++++++++ src/node.h | 3 +++ src/node_api.cc | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/api/async_resource.cc b/src/api/async_resource.cc index 0a2437fe6eda5c..3c4fbdadbc462c 100644 --- a/src/api/async_resource.cc +++ b/src/api/async_resource.cc @@ -62,10 +62,8 @@ async_id AsyncResource::get_trigger_async_id() const { return async_context_.trigger_async_id; } -// TODO(addaleax): We shouldn’t need to use env_->isolate() if we’re just going -// to end up using the Isolate* to figure out the Environment* again. AsyncResource::CallbackScope::CallbackScope(AsyncResource* res) - : node::CallbackScope(res->env_->isolate(), + : node::CallbackScope(res->env_, res->resource_.Get(res->env_->isolate()), res->async_context_) {} diff --git a/src/api/callback.cc b/src/api/callback.cc index 911b1160eba342..8f9d617d1eaf3f 100644 --- a/src/api/callback.cc +++ b/src/api/callback.cc @@ -26,6 +26,16 @@ CallbackScope::CallbackScope(Isolate* isolate, try_catch_.SetVerbose(true); } +CallbackScope::CallbackScope(Environment* env, + Local object, + async_context asyncContext) + : private_(new InternalCallbackScope(env, + object, + asyncContext)), + try_catch_(env->isolate()) { + try_catch_.SetVerbose(true); +} + CallbackScope::~CallbackScope() { if (try_catch_.HasCaught()) private_->MarkAsFailed(); diff --git a/src/node.h b/src/node.h index 676d1d5fbad74e..049163bf27cc7c 100644 --- a/src/node.h +++ b/src/node.h @@ -1008,6 +1008,9 @@ class NODE_EXTERN CallbackScope { CallbackScope(v8::Isolate* isolate, v8::Local resource, async_context asyncContext); + CallbackScope(Environment* env, + v8::Local resource, + async_context asyncContext); ~CallbackScope(); void operator=(const CallbackScope&) = delete; diff --git a/src/node_api.cc b/src/node_api.cc index 8304ccb7e86a08..b1b85073508672 100644 --- a/src/node_api.cc +++ b/src/node_api.cc @@ -539,7 +539,7 @@ class AsyncContext { class CallbackScope : public node::CallbackScope { public: explicit CallbackScope(AsyncContext* async_context) - : node::CallbackScope(async_context->node_env()->isolate(), + : node::CallbackScope(async_context->node_env(), async_context->resource_.Get( async_context->node_env()->isolate()), async_context->async_context()) {} From a704c9dfcef5762f2f28dc64fbef10629df1502c Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Tue, 17 Aug 2021 20:32:38 +0530 Subject: [PATCH 14/33] src: call overload ctor from the original ctor Call the new constructor overload from the original constructor to reduce code duplication. Signed-off-by: Darshan Sen PR-URL: https://github.com/nodejs/node/pull/39768 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Franziska Hinkelmann --- src/api/callback.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/api/callback.cc b/src/api/callback.cc index 8f9d617d1eaf3f..fb0e5586eb400a 100644 --- a/src/api/callback.cc +++ b/src/api/callback.cc @@ -18,13 +18,8 @@ using v8::Value; CallbackScope::CallbackScope(Isolate* isolate, Local object, - async_context asyncContext) - : private_(new InternalCallbackScope(Environment::GetCurrent(isolate), - object, - asyncContext)), - try_catch_(isolate) { - try_catch_.SetVerbose(true); -} + async_context async_context) + : CallbackScope(Environment::GetCurrent(isolate), object, async_context) {} CallbackScope::CallbackScope(Environment* env, Local object, From 01093b07cc62b1dd077cff1967bf544c82e5494a Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 18 Aug 2021 17:21:45 +0200 Subject: [PATCH 15/33] tools: update markdown linter dependencies and move to ESM PR-URL: https://github.com/nodejs/node/pull/39801 Reviewed-By: Rich Trott Reviewed-By: James M Snell --- .../node-lint-md-cli-rollup/package-lock.json | 8576 ++++++++--------- tools/node-lint-md-cli-rollup/package.json | 4 +- .../node-lint-md-cli-rollup/rollup.config.js | 4 +- .../src/{cli-entry.js => cli-entry.mjs} | 22 +- 4 files changed, 4128 insertions(+), 4478 deletions(-) rename tools/node-lint-md-cli-rollup/src/{cli-entry.js => cli-entry.mjs} (50%) diff --git a/tools/node-lint-md-cli-rollup/package-lock.json b/tools/node-lint-md-cli-rollup/package-lock.json index 6f4faeea257a31..baf5c94d622b90 100644 --- a/tools/node-lint-md-cli-rollup/package-lock.json +++ b/tools/node-lint-md-cli-rollup/package-lock.json @@ -5,14 +5,13 @@ "requires": true, "packages": { "": { - "name": "node-lint-md-cli-rollup", "version": "2.0.2", "dependencies": { "markdown-extensions": "^1.1.1", - "remark": "^13.0.0", + "remark": "^14.0.0", "remark-gfm": "^2.0.0", "remark-preset-lint-node": "^3.0.0", - "unified-args": "^8.1.0" + "unified-args": "^9.0.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^20.0.0", @@ -194,6 +193,22 @@ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -208,25 +223,44 @@ "@types/unist": "*" } }, + "node_modules/@types/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==" + }, + "node_modules/@types/js-yaml": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", + "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==" + }, "node_modules/@types/mdast": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", - "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", "dependencies": { "@types/unist": "*" } }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "node_modules/@types/node": { "version": "16.6.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", - "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", - "dev": true + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==" }, "node_modules/@types/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==" }, + "node_modules/@types/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==" + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -236,17 +270,30 @@ "@types/node": "*" } }, + "node_modules/@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==" + }, + "node_modules/@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==" + }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { @@ -281,18 +328,18 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "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==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -339,12 +386,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ccount": { @@ -357,15 +415,18 @@ } }, "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { @@ -505,9 +566,9 @@ } }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/error-ex": { "version": "1.3.2", @@ -518,28 +579,16 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -552,9 +601,9 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "dependencies": { "format": "^0.2.0" }, @@ -568,28 +617,6 @@ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -645,9 +672,9 @@ "dev": true }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -713,6 +740,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-from-parse5/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-is-element": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", @@ -759,6 +799,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-html/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-whitespace": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", @@ -801,6 +850,18 @@ "node": ">= 4" } }, + "node_modules/import-meta-resolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", + "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "dependencies": { + "builtins": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -890,9 +951,9 @@ } }, "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -924,11 +985,14 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-glob": { @@ -966,11 +1030,14 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-reference": { @@ -1033,12 +1100,12 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "node_modules/load-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-3.0.0.tgz", - "integrity": "sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", + "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", "dependencies": { - "libnpmconfig": "^1.0.0", - "resolve-from": "^5.0.0" + "import-meta-resolve": "^1.0.0", + "libnpmconfig": "^1.0.0" }, "funding": { "type": "github", @@ -1103,15 +1170,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-comment-marker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", - "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-find-and-replace": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", @@ -1126,113 +1184,58 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "node_modules/mdast-util-find-and-replace/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==", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-from-markdown/node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown/node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/mdast-util-find-and-replace/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": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown/node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/mdast-util-from-markdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", + "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0", + "unist-util-stringify-position": "^3.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-gfm": { @@ -1251,11 +1254,10 @@ } }, "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", - "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", "dependencies": { - "@types/mdast": "^3.0.0", "ccount": "^2.0.0", "mdast-util-find-and-replace": "^2.0.0", "micromark-util-character": "^1.0.0" @@ -1343,9 +1345,9 @@ } }, "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz", + "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==", "funding": [ { "type": "GitHub Sponsors", @@ -1357,8 +1359,54 @@ } ], "dependencies": { + "@types/debug": "^4.0.0", "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "micromark-core-commonmark": "^1.0.0", + "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.0", + "parse-entities": "^3.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz", + "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "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.0", + "parse-entities": "^3.0.0" } }, "node_modules/micromark-extension-gfm": { @@ -1452,10 +1500,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-factory-space": { + "node_modules/micromark-factory-destination": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", "funding": [ { "type": "GitHub Sponsors", @@ -1468,13 +1516,14 @@ ], "dependencies": { "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" } }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/micromark-factory-label": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", + "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", "funding": [ { "type": "GitHub Sponsors", @@ -1486,14 +1535,15 @@ } ], "dependencies": { + "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" } }, - "node_modules/micromark-util-chunked": { + "node_modules/micromark-factory-space": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", "funding": [ { "type": "GitHub Sponsors", @@ -1505,8 +1555,88 @@ } ], "dependencies": { - "micromark-util-symbol": "^1.0.0" - } + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", + "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "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" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "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" + } + }, + "node_modules/micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "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/micromark-util-classify-character": { "version": "1.0.0", @@ -1547,6 +1677,24 @@ "micromark-util-types": "^1.0.0" } }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "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/micromark-util-encode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", @@ -1562,6 +1710,21 @@ } ] }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", + "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, "node_modules/micromark-util-normalize-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", @@ -1618,6 +1781,26 @@ "micromark-util-symbol": "^1.0.0" } }, + "node_modules/micromark-util-subtokenize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", + "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, "node_modules/micromark-util-symbol": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", @@ -1648,90 +1831,6 @@ } ] }, - "node_modules/micromark/node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/micromark/node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1864,9 +1963,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "engines": { "node": ">=8.6" }, @@ -1957,309 +2056,229 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/rehype-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", + "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", + "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-gfm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-parse/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", + "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", "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": "^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/rehype-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.1.tgz", - "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-to-html": "^8.0.0", - "unified": "^10.0.0" + "@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/rehype-stringify/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-stringify/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype-stringify/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-stringify/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "node_modules/remark-lint-checkbox-character-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", + "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" + "@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-gfm": { + "node_modules/remark-lint-checkbox-character-style/node_modules/unified-lint-rule": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" + "@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/remark-gfm/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-gfm/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.1.tgz", - "integrity": "sha512-q4VFsA7LEG4REJhR2P4A6CU9b4cCQL53845CX74Z4N/W0EgB9mm/GXpYzjbEqgkMPl5ctP8yp/vBYTNmjfUCtw==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.1.tgz", - "integrity": "sha512-CfjXeaomk3bxt1Y0Z4T/cKVoE+8lm5jw5C+jz8EieWNIziGNUlDxIAbMk1F1sO8EXc4LjkbTSq4zz8h1vOHkew==", + "node_modules/remark-lint-checkbox-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", + "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", "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" + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2267,62 +2286,57 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.1.tgz", - "integrity": "sha512-f/Dvcw4tsWWv0vx4POVZXZmiytsyGMCKmPiMefz4zfy9hTwTGngp9EZhbDivHXiqd5YTUhvjYXFITEfVdxH4qA==", - "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" - }, + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/is-plain-obj": { + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "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": { @@ -2330,63 +2344,31 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-content-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.1.tgz", - "integrity": "sha512-uv4qIBdIxGshQ1a84a2RClbX39lYfWgPm3Wg35EJbSWPpe+KWt4rYi9nxB51dIEUXw3KAujlOVougPwhAZROuA==", + "node_modules/remark-lint-code-block-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", "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" + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2394,64 +2376,45 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.1.tgz", - "integrity": "sha512-B6338x1UggrAMe4gdmk1No2L/OkK1d1uCelekj6cnl+Pi5/HLlSw3lXIaOTRNIXOccT1zMmNApA4sDZ5qsQWtw==", - "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" - }, + "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/is-plain-obj": { + "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -2459,9 +2422,9 @@ } }, "node_modules/remark-lint-definition-spacing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.1.tgz", - "integrity": "sha512-jtCUaZ+6KP4nNutBoiWoqBfa2sMsD4uvvFbuU5MOlzI0wlMmaeAq1pxWuNtkK+w8AEk/8CzfCUrLct5w65KSLQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2474,47 +2437,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -2522,9 +2498,9 @@ } }, "node_modules/remark-lint-fenced-code-flag": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.1.tgz", - "integrity": "sha512-HsEhvalGxCauZO6OAnaVzIBycfaHLuyZxy1KlniWXQJKZ6EjRAsWwkZHYx9qfPl/ZW7zDG+xAoWTqdHjZW/BTg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", + "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2538,47 +2514,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -2586,9 +2575,9 @@ } }, "node_modules/remark-lint-fenced-code-marker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.1.tgz", - "integrity": "sha512-vFRjlzyxtG3zdvmlTn6cV1YiZAivQwOzYRNnH5KavC39EZHDxqjQl84QTXshgfCzFupvYCi6ykATIa7obgx9jg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2601,107 +2590,88 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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-fenced-code-marker/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.1.tgz", - "integrity": "sha512-A2N6XoLPbYyRhgXyTI7WlW9Nb9QvXQNXG514hjHdNNd0cL+5P4JU6vivgZiYfViCzOLgsys6hwhXBSC9ZQ45tw==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-file-extension/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-file-extension": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", + "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-file-extension/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2710,9 +2680,9 @@ } }, "node_modules/remark-lint-final-definition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.1.tgz", - "integrity": "sha512-bzha13GTKFnQ0h4ZvaHadK6HxM2eRJj/yj59aXyvJkHFNx7i0sQn1884t3yYM4ppdDmO+cCMMgsVo8DxE8ifFA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", + "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2726,107 +2696,88 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-final-definition/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-final-definition/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-newline": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.1.tgz", - "integrity": "sha512-vv1LT36frgc0FVc7V52CdOxqh1TqGcNvAVD89935sb9wpEELiUfbGG1Xb9PVZoIaVQcFo8qEDWCvfhsKTKk8Nw==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@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/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-final-newline/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-final-newline/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-newline/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-final-newline/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2835,9 +2786,9 @@ } }, "node_modules/remark-lint-first-heading-level": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.1.tgz", - "integrity": "sha512-3ym0v/aMFpHTGv2/DPln6NHB2DFnx6Nbd+3Z9kf6wfnJCzXNA3zXyCKt11i5MPzUV5wlwButcW+JkPDtDJsfog==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", + "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2850,47 +2801,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-first-heading-level/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -2898,9 +2853,9 @@ } }, "node_modules/remark-lint-hard-break-spaces": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.1.tgz", - "integrity": "sha512-CPjbfc9DcV4Qy3d8jyhh/QXsLD5uRtweb0d04p2MyzMDrqwXAq5X4MW3rId3JbVVl7o1AKXq1FdvqIMrh9Rpuw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2914,47 +2869,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -2962,9 +2930,9 @@ } }, "node_modules/remark-lint-heading-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.1.tgz", - "integrity": "sha512-/9rsTE+coYdUgT/spxg4ioorG2W5XdabLHajKjTOOQ4ME8Wa5fXHMJ3WpK3Vnz8ZKP7WQwTTPsKWIHcy5d6C+w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -2978,47 +2946,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -3026,9 +2998,9 @@ } }, "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.1.tgz", - "integrity": "sha512-7XjtSLUwvxHi28/q9XMzYy7A+agpArvLlTksD0r1jj5MpGYTSUW9b54rRRV3JxHJMoX+ZJ9juId6GmVaUZwsTg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", "dependencies": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -3041,47 +3013,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -3089,9 +3065,9 @@ } }, "node_modules/remark-lint-list-item-indent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.1.tgz", - "integrity": "sha512-5/H5B2g6TTpJZiwMmBa/Drexwq5Dw50QoypTUgXwFETz91s7zvjy+IGGVoVv0L0LM0rCwblmgtLomqeWIyo9sA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", "dependencies": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -3106,46 +3082,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3153,77 +3097,57 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.1.tgz", - "integrity": "sha512-R4hiRRx46xa3NE/AY8IKzPTRVyq1ZWrtWVd2KfWwNHmj7a6ASjb75DPzGyckZ46UAQq9mSBPsgL5Rfhq5XmggA==", - "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" - }, + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/is-plain-obj": { + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.1.tgz", - "integrity": "sha512-FdbB9O4SegELBreglpOXhMyusKORPS0X7KrBY/V+tDo4+2sJHMEEdiN4RbK2ofWwRP7V+muZ5WrscLliuAExQg==", + "node_modules/remark-lint-maximum-line-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "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", @@ -3235,177 +3159,228 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.1.tgz", - "integrity": "sha512-3aUFCV1BSqO15MuJ6fQept36An/vLo9VgAj1TRWk4Gsnaewbq7haT/m6eiYn5Ia8t2sSBbv4LKz1lwnj5nOVPQ==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "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-auto-link-without-protocol": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", "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", - "vfile-location": "^4.0.0" + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.1.tgz", - "integrity": "sha512-nvwglXFdR8ubTjSduK3cVdgBaKCH/DqV0kVkCKSQmLEl8NyozFH03VB/bhQDCrmSeNt6rYClBF0ppaHT27OmpA==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "pluralize": "^8.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.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", + "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" + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "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": { @@ -3413,17 +3388,18 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.1.tgz", - "integrity": "sha512-gwQe65dW2fkMQR02hwlHtc0OOvshst+gXMOEwd1/fpIb6OORpMiK6ueoNBxCnKSsKqftjWV0JXVdZ7MfKKxQQw==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", "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-stringify-position": "^3.0.0", "unist-util-visit": "^4.0.0" }, "funding": { @@ -3431,119 +3407,166 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.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.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/unist": "^2.0.0" + "@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.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.1.tgz", - "integrity": "sha512-9kZ/ydzJlntswJjsQEbPPx0tc6uAPuowmG/3aOCSE+6CjJ+bCQZiVLL3VhjktNyzFxDGTDN6LlbVwiyIHEUMwA==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", - "unified-lint-rule": "^2.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-file-name-articles/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "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.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", + "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-file-name-articles/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3552,9 +3575,9 @@ } }, "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.1.tgz", - "integrity": "sha512-e9ei9KwQSRzUQeYHEhCKUMDeavFOIj46NtuyZxYtrklOcblvaZLAV133UcFHk5CimdUj3dzTtFZebHdpvu5omw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", + "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3565,46 +3588,43 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", + "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3612,74 +3632,91 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.1.tgz", - "integrity": "sha512-INp+0gW5T2j6+sHglmDmCLL7/goVKCryXyf+ZApB5oWYBpVr2fLnHEHTUmkbQkksxe7me+VsB+WW/KN1PXGrtw==", + "node_modules/remark-lint-no-heading-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", "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" + "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-file-name-outer-dashes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.1.tgz", - "integrity": "sha512-IRYlydfT0Xt4AEs5OKSBGP9hLNDckd1mKcV8crnNu91HhcmFVJznzsLV1QrUTTI94cwkSmSWqpjNzsDrKGPbIw==", + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "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.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", + "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", "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", @@ -3692,64 +3729,76 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.1.tgz", - "integrity": "sha512-LjRsRJOPT1M5MwvGxGEPIHzB713chWgJF5v/FNaHnniLgBrwIbpmsqEhAAam/+i593B5tx84ZyaCf8ujXTP0gg==", + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "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.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", "dependencies": { "@types/mdast": "^3.0.0", - "pluralize": "^8.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": { @@ -3757,63 +3806,68 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-inline-padding/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.1.tgz", - "integrity": "sha512-UcjJ2XTf7kOmQo5mU/5AV+Gth1YYGcp+gYU4gS/CzdOLYstqsS/W+IN6ALJjEbdbtSyfWCElpxI4p/mW16Z90A==", + "node_modules/remark-lint-no-literal-urls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "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": { @@ -3821,46 +3875,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-literal-urls/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -3868,65 +3890,45 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.1.tgz", - "integrity": "sha512-3OAFcaZawfrFgZGrpuZlNPyuvfIURtUzDN7/Bl2X42ivqx4ih1OH9LtiBgz+J0g1DEWnC5ebOmDr7x6XLM76Fw==", - "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" - }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -3934,9 +3936,9 @@ } }, "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.1.tgz", - "integrity": "sha512-K62PKOOanFiFM4R0oHlo1PKWJa0dPPasQl28yzk6G2xZzqc5eJm5S3d0grU479jqEUbDQMaDQw282hO6WR/MbA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", + "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -3951,59 +3953,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.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.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4011,9 +4014,9 @@ } }, "node_modules/remark-lint-no-shell-dollars": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.1.tgz", - "integrity": "sha512-QvnA8Ltj3FPaAqUu0DebKYv66LFndTk0fXVZ9rQWOjTEVIKImy9Dy59kVqwYMpCwZbJkpigu2bMl/7UG/BA0XA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", + "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4026,47 +4029,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4074,9 +4081,9 @@ } }, "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.1.tgz", - "integrity": "sha512-0o0YO88Atib0eWloy5ZbL2IZ1axMNysbJI5j58sxMjEwLq1JORtGOR9Z6aHsOccS5yseeenw5w3DoMLB9PtJtw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4089,47 +4096,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4137,9 +4148,9 @@ } }, "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.1.tgz", - "integrity": "sha512-uXujnVm5LXLtGyJkTIbn/uxDRu507B9vC8TieiX6HX8OjVeDWUjtcVJOaqeyLJGjV0Ri1Y+AegMNWx5eDBHTDQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4152,47 +4163,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4200,9 +4215,9 @@ } }, "node_modules/remark-lint-no-table-indentation": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.1.tgz", - "integrity": "sha512-GYBX5P1Vj0gO7S7JLU2tpYR5rg9xbeccPQ0ZgHYK4d7T9FjDwfE1hrdvlha3k8s3CFKqQ7MC0OgQw/2IN413MA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4216,46 +4231,72 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-table-indentation/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "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": { @@ -4264,9 +4305,9 @@ } }, "node_modules/remark-lint-no-tabs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.1.tgz", - "integrity": "sha512-B2q1I+fyRDvWTQxCC91NoEvz0KzI9e6Yhu1TdOLkwc02hMWj869G165Rh+EcBKGW/CLKuMPhIn2XtL86emqZRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", + "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4278,46 +4319,27 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-no-tabs/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-tabs/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-tabs/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "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": { @@ -4333,22 +4355,10 @@ "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==", - "dependencies": { - "wrapped": "^1.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-lint-no-undefined-references": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.1.tgz", - "integrity": "sha512-mmNJO30TYMxwfFJPHkwKNRaW63sU9ffhpb4xkyhyHDmnsplQ96RVYR4WGOXw0/wR+gZECmFtBU+OIWz0cbaiEw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", "dependencies": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -4364,46 +4374,72 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/is-plain-obj": { + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.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.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-undefined-references/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "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": { @@ -4412,9 +4448,9 @@ } }, "node_modules/remark-lint-no-unused-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.1.tgz", - "integrity": "sha512-bcbboInyb8vAPtYakZdaxRQsDIdQnV5WvUdc03PWFlG8YtGOhRQ57SPc+4uVH+VwHoq+lsEsRszr4sOXuuopxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4427,47 +4463,51 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4475,9 +4515,9 @@ } }, "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.1.tgz", - "integrity": "sha512-CGXvolLwfZIxG9hm4o7OXQXEEpu3r5oyTpYGteJDtOSrpVrBSqFKNq7lfhKYFQkcg2AMJYrH9XEexrYvAoUQOQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4491,47 +4531,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "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-is": "^5.0.0", + "unist-util-visit-parents": "^5.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.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4539,9 +4592,9 @@ } }, "node_modules/remark-lint-prohibited-strings": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.1.0.tgz", - "integrity": "sha512-tbIXL7cmzZrJEc+hcvLUv9jqU9sxi7MO9atrA/rY4ivVG5xomk+BycE6xFVwiwQC6Fn8dguJ6eHA4/UcT0Xm6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", + "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", "dependencies": { "escape-string-regexp": "^4.0.0", "unified-lint-rule": "^1.0.2", @@ -4550,87 +4603,86 @@ "vfile-location": "^3.0.1" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" + "node_modules/remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", + "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": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/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-rule-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { - "wrapped": "^1.0.1" + "@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/remark-lint-prohibited-strings/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-rule-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.1.tgz", - "integrity": "sha512-j1e60nfZJk0C6mvDZkiFwVu0b58f219ATlMNaZ9h8QdQhdxD/0kUnizJ7xW3wS4sHtCgkKGctAp04Ma0c+Dkhg==", + "node_modules/remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4643,110 +4695,60 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-rule-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-rule-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-rule-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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-strong-marker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.1.tgz", - "integrity": "sha512-J5dJviBd747vXBkFuA2j/Ni7RjTg+Mg2GgXlPHtbgDnal51CdN2WXDmbVG/A98+3P18MlysvQ7KnBrSiiuGBpQ==", - "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": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-strong-marker/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -4754,9 +4756,9 @@ } }, "node_modules/remark-lint-table-cell-padding": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.1.tgz", - "integrity": "sha512-NdF0WHFOaMjeumRIrGHXVadwWkgnfJuMb96FGbf1HvSEv9l41PHkS1KTsL6Zoe1Cva57niAuarMv6xzcJqVjrA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -4770,46 +4772,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4817,78 +4787,59 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.1.tgz", - "integrity": "sha512-om6i8SMSjMsR/mYlx5cMSoxXK+EFI8/n73qCVx/RAhFCIsW4TFR+gYmgFTyLr5Mp4vqjV3uYBIR9Ucv6Johauw==", - "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" - }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/is-plain-obj": { + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-table-pipes/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.1.tgz", - "integrity": "sha512-DPveL2hhkcY608Bkn/Hx+C7pxviufpYyRiu0CnfFxkbLBlMgVdvVIOGCCOlhbvKuGtozmH/RCRsdIfzjlkXiew==", + "node_modules/remark-lint-table-pipes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", "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" }, @@ -4897,46 +4848,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-table-pipes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "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", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -4944,63 +4863,76 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-table-pipes/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-table-pipes/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", - "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", "dependencies": { "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "rehype": "^12.0.0", "unified": "^10.0.0", - "unified-message-control": "^4.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-unordered-list-marker-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -5008,47 +4940,45 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "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-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5056,11 +4986,13 @@ } }, "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", + "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", "dependencies": { - "mdast-util-from-markdown": "^0.8.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, "funding": { "type": "opencollective", @@ -5111,10 +5043,61 @@ "node": ">=12.0.0" } }, + "node_modules/remark-preset-lint-node/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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/remark-preset-lint-node/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-node/node_modules/unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-node/node_modules/unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-preset-lint-recommended": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.1.tgz", - "integrity": "sha512-8ZlwP2aDCGf+3UFPP1K8CofWI/WLoq8hPhQiuKotCFNSdTe98/27XYqWXpbMt4feWtX4+tcJY1y0duuLK5lhBg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", + "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", "dependencies": { "@types/mdast": "^3.0.0", "remark-lint": "^9.0.0", @@ -5140,46 +5123,39 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", + "node_modules/remark-preset-lint-recommended/node_modules/mdast-comment-marker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" + "node_modules/remark-preset-lint-recommended/node_modules/remark-lint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", + "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-preset-lint-recommended/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "node_modules/remark-preset-lint-recommended/node_modules/remark-message-control": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", "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", + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", "vfile": "^5.0.0" }, "funding": { @@ -5187,144 +5163,84 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "node_modules/remark-preset-lint-recommended/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": { - "mdast-util-to-markdown": "^0.6.0" + "@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/remark-stringify/node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "node_modules/remark-preset-lint-recommended/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "node_modules/remark-preset-lint-recommended/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": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "node_modules/remark-preset-lint-recommended/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", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "node_modules/remark-preset-lint-recommended/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/remark-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", + "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/repeat-string": { @@ -5336,30 +5252,22 @@ } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, "node_modules/rollup": { - "version": "2.56.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", - "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", + "version": "2.52.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", + "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -5391,9 +5299,9 @@ ] }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5457,11 +5365,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5471,16 +5374,19 @@ } }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/stringify-entities": { @@ -5497,14 +5403,17 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/supports-color": { @@ -5535,40 +5444,12 @@ } }, "node_modules/to-vfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", - "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", "dependencies": { - "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5576,9 +5457,9 @@ } }, "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5590,16 +5471,17 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "dependencies": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5607,18 +5489,19 @@ } }, "node_modules/unified-args": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-8.1.0.tgz", - "integrity": "sha512-t1HPS1cQPsVvt/6EtyWIbQGurza5684WGRigNghZRvzIdHm3LPgMdXPyGx0npORKzdiy5+urkF0rF5SXM8lBuQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", + "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", "dependencies": { - "camelcase": "^5.0.0", - "chalk": "^3.0.0", + "@types/text-table": "^0.2.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", "chokidar": "^3.0.0", - "fault": "^1.0.2", + "fault": "^2.0.0", "json5": "^2.0.0", - "minimist": "^1.2.0", + "minimist": "^1.0.0", "text-table": "^0.2.0", - "unified-engine": "^8.0.0" + "unified-engine": "^9.0.0" }, "funding": { "type": "opencollective", @@ -5626,168 +5509,45 @@ } }, "node_modules/unified-engine": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.2.0.tgz", - "integrity": "sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA==", - "dependencies": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", + "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", + "dependencies": { + "@types/concat-stream": "^1.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/js-yaml": "^4.0.0", + "@types/node": "^16.0.0", + "@types/unist": "^2.0.0", "concat-stream": "^2.0.0", "debug": "^4.0.0", - "fault": "^1.0.0", - "figures": "^3.0.0", - "glob": "^7.0.3", + "fault": "^2.0.0", + "glob": "^7.0.0", "ignore": "^5.0.0", "is-buffer": "^2.0.0", "is-empty": "^1.0.0", - "is-plain-obj": "^2.0.0", - "js-yaml": "^3.6.1", - "load-plugin": "^3.0.0", - "parse-json": "^5.0.0", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-inspect": "^5.0.0", - "vfile-reporter": "^6.0.0", - "vfile-statistics": "^1.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified-engine/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/unified-engine/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/unified-lint-rule": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", - "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", - "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/bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unified-lint-rule/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unified-lint-rule/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unified-lint-rule/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "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", + "js-yaml": "^4.0.0", + "load-plugin": "^4.0.0", + "parse-json": "^5.0.0", + "to-vfile": "^7.0.0", "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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/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/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "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==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", @@ -5804,11 +5564,11 @@ } }, "node_modules/unist-util-inspect": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz", - "integrity": "sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", + "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", "dependencies": { - "is-empty": "^1.0.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -5816,29 +5576,29 @@ } }, "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", + "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "dependencies": { - "@types/unist": "^2.0.2" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -5846,13 +5606,13 @@ } }, "node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" }, "funding": { "type": "opencollective", @@ -5860,25 +5620,12 @@ } }, "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/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "unist-util-is": "^4.0.0" }, "funding": { "type": "opencollective", @@ -5906,13 +5653,9 @@ } }, "node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -5931,29 +5674,19 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vfile-reporter": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", - "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", + "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", "dependencies": { - "repeat-string": "^1.5.0", - "string-width": "^4.0.0", - "supports-color": "^6.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-sort": "^2.1.2", - "vfile-statistics": "^1.1.0" + "@types/repeat-string": "^1.0.0", + "@types/supports-color": "^8.0.0", + "repeat-string": "^1.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" }, "funding": { "type": "opencollective", @@ -5961,48 +5694,48 @@ } }, "node_modules/vfile-reporter/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/vfile-reporter/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", + "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/vfile-sort": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", - "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "dependencies": { + "vfile-message": "^3.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/vfile-statistics": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", - "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", "dependencies": { - "@types/unist": "^2.0.0" + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", @@ -6179,6 +5912,22 @@ } } }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -6193,25 +5942,44 @@ "@types/unist": "*" } }, + "@types/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-brJKf2boFhUxTDxlpI7cstwiUtA2ovm38UzFTi9aZI6//ARncaV+Q5ALjCaJqXaMtdZk/oPTJnSutugsZR6h8A==" + }, + "@types/js-yaml": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.2.tgz", + "integrity": "sha512-KbeHS/Y4R+k+5sWXEYzAZKuB1yQlZtEghuhRxrVRLaqhtoG5+26JwQsa4HyS3AWX8v1Uwukma5HheduUDskasA==" + }, "@types/mdast": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz", - "integrity": "sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", "requires": { "@types/unist": "*" } }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "@types/node": { "version": "16.6.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", - "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", - "dev": true + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==" }, "@types/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==" }, + "@types/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-vdna8kjLGljgtPnYN6MBD2UwX62QE0EFLj9QlLXvg6dEu66NksXB900BNguBCMZZY2D9SSqncUskM23vT3uvWQ==" + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -6221,15 +5989,25 @@ "@types/node": "*" } }, + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==" + }, + "@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==" + }, "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==" }, "ansi-styles": { "version": "4.3.0", @@ -6254,14 +6032,14 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", + "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "binary-extensions": { "version": "2.2.0", @@ -6296,10 +6074,18 @@ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, + "builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "requires": { + "semver": "^7.0.0" + } + }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" }, "ccount": { "version": "2.0.0", @@ -6307,9 +6093,9 @@ "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==" }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6410,9 +6196,9 @@ "dev": true }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "error-ex": { "version": "1.3.2", @@ -6423,14 +6209,9 @@ } }, "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==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "estree-walker": { "version": "2.0.2", @@ -6444,9 +6225,9 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.0.tgz", + "integrity": "sha512-JsDj9LFcoC+4ChII1QpXPA7YIaY8zmqPYw7h9j5n7St7a0BBKfNnwEBAUQRBx70o2q4rs+BeSNHk8Exm6xE7fQ==", "requires": { "format": "^0.2.0" } @@ -6456,21 +6237,6 @@ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6510,9 +6276,9 @@ "dev": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6557,6 +6323,17 @@ "vfile": "^5.0.0", "vfile-location": "^4.0.0", "web-namespaces": "^2.0.0" + }, + "dependencies": { + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } + } } }, "hast-util-is-element": { @@ -6591,6 +6368,13 @@ "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "unist-util-is": "^5.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + } } }, "hast-util-whitespace": { @@ -6620,6 +6404,14 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, + "import-meta-resolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", + "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "requires": { + "builtins": "^4.0.0" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6678,9 +6470,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -6702,9 +6494,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "is-glob": { "version": "4.0.1", @@ -6731,9 +6523,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" }, "is-reference": { "version": "1.2.1", @@ -6786,12 +6578,12 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "load-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-3.0.0.tgz", - "integrity": "sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", + "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", "requires": { - "libnpmconfig": "^1.0.0", - "resolve-from": "^5.0.0" + "import-meta-resolve": "^1.0.0", + "libnpmconfig": "^1.0.0" } }, "locate-path": { @@ -6835,11 +6627,6 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz", "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==" }, - "mdast-comment-marker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", - "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==" - }, "mdast-util-find-and-replace": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz", @@ -6848,79 +6635,46 @@ "escape-string-regexp": "^5.0.0", "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^4.0.0" - } - }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" }, "dependencies": { - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "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==" }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "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==", "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, + "mdast-util-from-markdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz", + "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "parse-entities": "^3.0.0", + "unist-util-stringify-position": "^3.0.0" + } + }, "mdast-util-gfm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz", @@ -6933,11 +6687,10 @@ } }, "mdast-util-gfm-autolink-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz", - "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.0.tgz", + "integrity": "sha512-NaGypnNJop+hybP/PLnMVV5aN14VFda31DU+j8qsQdPR8m8AENuCX959hXaCiwVeUem33O6zY+JTt0sH1Kj7ng==", "requires": { - "@types/mdast": "^3.0.0", "ccount": "^2.0.0", "mdast-util-find-and-replace": "^2.0.0", "micromark-util-character": "^1.0.0" @@ -6997,66 +6750,48 @@ "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" }, "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.3.tgz", + "integrity": "sha512-fWuHx+JKV4zA8WfCFor2DWP9XmsZkIiyWRGofr7P7IGfpRIlb7/C5wwusGsNyr1D8HI5arghZDG1Ikc0FBwS5Q==", "requires": { + "@types/debug": "^4.0.0", "debug": "^4.0.0", - "parse-entities": "^2.0.0" - }, - "dependencies": { - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - } + "micromark-core-commonmark": "^1.0.0", + "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.0", + "parse-entities": "^3.0.0" + } + }, + "micromark-core-commonmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.0.tgz", + "integrity": "sha512-y9g7zymcKRBHM/aNBekstvs/Grpf+y4OEBULUTYvGZcusnp+JeOxmilJY4GMpo2/xY7iHQL9fjz5pD9pSAud9A==", + "requires": { + "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.0", + "parse-entities": "^3.0.0" } }, "micromark-extension-gfm": { @@ -7126,6 +6861,26 @@ "micromark-util-types": "^1.0.0" } }, + "micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz", + "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, "micromark-factory-space": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", @@ -7135,6 +6890,28 @@ "micromark-util-types": "^1.0.0" } }, + "micromark-factory-title": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz", + "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==", + "requires": { + "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-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "requires": { + "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": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", @@ -7171,11 +6948,24 @@ "micromark-util-types": "^1.0.0" } }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, "micromark-util-encode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz", "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==" }, + "micromark-util-html-tag-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", + "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==" + }, "micromark-util-normalize-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", @@ -7202,6 +6992,16 @@ "micromark-util-symbol": "^1.0.0" } }, + "micromark-util-subtokenize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz", + "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, "micromark-util-symbol": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz", @@ -7310,9 +7110,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pluralize": { "version": "8.0.0", @@ -7360,37 +7160,6 @@ "rehype-parse": "^8.0.0", "rehype-stringify": "^9.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - } } }, "rehype-parse": { @@ -7402,37 +7171,6 @@ "hast-util-from-parse5": "^7.0.0", "parse5": "^6.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - } } }, "rehype-stringify": { @@ -7441,138 +7179,36 @@ "integrity": "sha512-xfhm8Erp7yL+RRgYmtZMJUqu6OSguwOQMfR2LkqT1dgNDQheClFMaDPVERy4/su7o0eHo0PKFGn4L68kOjVdRQ==", "requires": { "@types/hast": "^2.0.0", - "hast-util-to-html": "^8.0.0", - "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - } - } - }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - } - }, - "remark-gfm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", - "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^1.0.0", - "micromark-extension-gfm": "^1.0.0", - "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - } + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" } }, - "remark-lint": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.1.tgz", - "integrity": "sha512-q4VFsA7LEG4REJhR2P4A6CU9b4cCQL53845CX74Z4N/W0EgB9mm/GXpYzjbEqgkMPl5ctP8yp/vBYTNmjfUCtw==", + "remark": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.1.tgz", + "integrity": "sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q==", "requires": { "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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" - } - } + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" + } + }, + "remark-gfm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz", + "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^1.0.0", + "micromark-extension-gfm": "^1.0.0", + "unified": "^10.0.0" } }, "remark-lint-blockquote-indentation": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.1.tgz", - "integrity": "sha512-CfjXeaomk3bxt1Y0Z4T/cKVoE+8lm5jw5C+jz8EieWNIziGNUlDxIAbMk1F1sO8EXc4LjkbTSq4zz8h1vOHkew==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.0.0.tgz", + "integrity": "sha512-qWWyAJWHwnVFsfKEyl51os1rr4ex9KX398g8326esJ2/RFsCYJbJaXmVk/S+uf7B7HfOWFuJo+tu/7jlZZ54+Q==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -7583,41 +7219,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-checkbox-character-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.1.tgz", - "integrity": "sha512-f/Dvcw4tsWWv0vx4POVZXZmiytsyGMCKmPiMefz4zfy9hTwTGngp9EZhbDivHXiqd5YTUhvjYXFITEfVdxH4qA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", + "integrity": "sha512-NHpVZOcTJeLOI1gGOvVDz8i3sXVY3s9K+OADupEA89Syfs4YAbnrij8OMJ6ozbHTn4av/HyVfsF4IK8X2pBUeQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7626,41 +7273,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-checkbox-content-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.1.tgz", - "integrity": "sha512-uv4qIBdIxGshQ1a84a2RClbX39lYfWgPm3Wg35EJbSWPpe+KWt4rYi9nxB51dIEUXw3KAujlOVougPwhAZROuA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", + "integrity": "sha512-WeB8aSC1oesu0t/wcqNEbn3bg0kRw+NK7Y5xrhQsREw6NcH1TnvjH95PvizFT5LxXAGhz4AtCFz0B28YugSznQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7670,41 +7328,61 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "is-plain-obj": { + "unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "requires": { "@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" } } } }, "remark-lint-code-block-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.1.tgz", - "integrity": "sha512-B6338x1UggrAMe4gdmk1No2L/OkK1d1uCelekj6cnl+Pi5/HLlSw3lXIaOTRNIXOccT1zMmNApA4sDZ5qsQWtw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7714,41 +7392,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-definition-spacing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.1.tgz", - "integrity": "sha512-jtCUaZ+6KP4nNutBoiWoqBfa2sMsD4uvvFbuU5MOlzI0wlMmaeAq1pxWuNtkK+w8AEk/8CzfCUrLct5w65KSLQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7757,41 +7446,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-fenced-code-flag": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.1.tgz", - "integrity": "sha512-HsEhvalGxCauZO6OAnaVzIBycfaHLuyZxy1KlniWXQJKZ6EjRAsWwkZHYx9qfPl/ZW7zDG+xAoWTqdHjZW/BTg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", + "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7801,41 +7501,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-fenced-code-marker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.1.tgz", - "integrity": "sha512-vFRjlzyxtG3zdvmlTn6cV1YiZAivQwOzYRNnH5KavC39EZHDxqjQl84QTXshgfCzFupvYCi6ykATIa7obgx9jg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7844,82 +7555,75 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-file-extension": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.1.tgz", - "integrity": "sha512-A2N6XoLPbYyRhgXyTI7WlW9Nb9QvXQNXG514hjHdNNd0cL+5P4JU6vivgZiYfViCzOLgsys6hwhXBSC9ZQ45tw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", + "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-final-definition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.1.tgz", - "integrity": "sha512-bzha13GTKFnQ0h4ZvaHadK6HxM2eRJj/yj59aXyvJkHFNx7i0sQn1884t3yYM4ppdDmO+cCMMgsVo8DxE8ifFA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", + "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -7929,82 +7633,75 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-final-newline": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.1.tgz", - "integrity": "sha512-vv1LT36frgc0FVc7V52CdOxqh1TqGcNvAVD89935sb9wpEELiUfbGG1Xb9PVZoIaVQcFo8qEDWCvfhsKTKk8Nw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-first-heading-level": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.1.tgz", - "integrity": "sha512-3ym0v/aMFpHTGv2/DPln6NHB2DFnx6Nbd+3Z9kf6wfnJCzXNA3zXyCKt11i5MPzUV5wlwButcW+JkPDtDJsfog==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", + "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8013,41 +7710,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-hard-break-spaces": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.1.tgz", - "integrity": "sha512-CPjbfc9DcV4Qy3d8jyhh/QXsLD5uRtweb0d04p2MyzMDrqwXAq5X4MW3rId3JbVVl7o1AKXq1FdvqIMrh9Rpuw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8057,41 +7760,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-heading-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.1.tgz", - "integrity": "sha512-/9rsTE+coYdUgT/spxg4ioorG2W5XdabLHajKjTOOQ4ME8Wa5fXHMJ3WpK3Vnz8ZKP7WQwTTPsKWIHcy5d6C+w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -8101,41 +7815,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-list-item-bullet-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.1.tgz", - "integrity": "sha512-7XjtSLUwvxHi28/q9XMzYy7A+agpArvLlTksD0r1jj5MpGYTSUW9b54rRRV3JxHJMoX+ZJ9juId6GmVaUZwsTg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8144,41 +7864,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-list-item-indent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.1.tgz", - "integrity": "sha512-5/H5B2g6TTpJZiwMmBa/Drexwq5Dw50QoypTUgXwFETz91s7zvjy+IGGVoVv0L0LM0rCwblmgtLomqeWIyo9sA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8189,41 +7915,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-maximum-line-length": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.1.tgz", - "integrity": "sha512-R4hiRRx46xa3NE/AY8IKzPTRVyq1ZWrtWVd2KfWwNHmj7a6ASjb75DPzGyckZ46UAQq9mSBPsgL5Rfhq5XmggA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8233,41 +7970,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-auto-link-without-protocol": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.1.tgz", - "integrity": "sha512-FdbB9O4SegELBreglpOXhMyusKORPS0X7KrBY/V+tDo4+2sJHMEEdiN4RbK2ofWwRP7V+muZ5WrscLliuAExQg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -8278,41 +8026,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-blockquote-without-marker": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.1.tgz", - "integrity": "sha512-3aUFCV1BSqO15MuJ6fQept36An/vLo9VgAj1TRWk4Gsnaewbq7haT/m6eiYn5Ia8t2sSBbv4LKz1lwnj5nOVPQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8323,41 +8082,61 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "is-plain-obj": { + "unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "requires": { "@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" } } } }, "remark-lint-no-consecutive-blank-lines": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.1.tgz", - "integrity": "sha512-nvwglXFdR8ubTjSduK3cVdgBaKCH/DqV0kVkCKSQmLEl8NyozFH03VB/bhQDCrmSeNt6rYClBF0ppaHT27OmpA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -8369,41 +8148,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-duplicate-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.1.tgz", - "integrity": "sha512-gwQe65dW2fkMQR02hwlHtc0OOvshst+gXMOEwd1/fpIb6OORpMiK6ueoNBxCnKSsKqftjWV0JXVdZ7MfKKxQQw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8414,172 +8204,121 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-file-name-articles": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.1.tgz", - "integrity": "sha512-9kZ/ydzJlntswJjsQEbPPx0tc6uAPuowmG/3aOCSE+6CjJ+bCQZiVLL3VhjktNyzFxDGTDN6LlbVwiyIHEUMwA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", + "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.1.tgz", - "integrity": "sha512-e9ei9KwQSRzUQeYHEhCKUMDeavFOIj46NtuyZxYtrklOcblvaZLAV133UcFHk5CimdUj3dzTtFZebHdpvu5omw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", + "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-file-name-outer-dashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.1.tgz", - "integrity": "sha512-INp+0gW5T2j6+sHglmDmCLL7/goVKCryXyf+ZApB5oWYBpVr2fLnHEHTUmkbQkksxe7me+VsB+WW/KN1PXGrtw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", + "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } } } }, "remark-lint-no-heading-content-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.1.tgz", - "integrity": "sha512-IRYlydfT0Xt4AEs5OKSBGP9hLNDckd1mKcV8crnNu91HhcmFVJznzsLV1QrUTTI94cwkSmSWqpjNzsDrKGPbIw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-heading-style": "^2.0.0", @@ -8591,41 +8330,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-heading-indent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.1.tgz", - "integrity": "sha512-LjRsRJOPT1M5MwvGxGEPIHzB713chWgJF5v/FNaHnniLgBrwIbpmsqEhAAam/+i593B5tx84ZyaCf8ujXTP0gg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", + "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", "requires": { "@types/mdast": "^3.0.0", "pluralize": "^8.0.0", @@ -8636,41 +8386,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-inline-padding": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.1.tgz", - "integrity": "sha512-UcjJ2XTf7kOmQo5mU/5AV+Gth1YYGcp+gYU4gS/CzdOLYstqsS/W+IN6ALJjEbdbtSyfWCElpxI4p/mW16Z90A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -8680,41 +8441,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-no-literal-urls": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.1.tgz", - "integrity": "sha512-3OAFcaZawfrFgZGrpuZlNPyuvfIURtUzDN7/Bl2X42ivqx4ih1OH9LtiBgz+J0g1DEWnC5ebOmDr7x6XLM76Fw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^3.0.0", @@ -8725,41 +8492,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-no-multiple-toplevel-headings": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.1.tgz", - "integrity": "sha512-K62PKOOanFiFM4R0oHlo1PKWJa0dPPasQl28yzk6G2xZzqc5eJm5S3d0grU479jqEUbDQMaDQw282hO6WR/MbA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", + "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8770,49 +8548,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { - "@types/unist": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-no-shell-dollars": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.1.tgz", - "integrity": "sha512-QvnA8Ltj3FPaAqUu0DebKYv66LFndTk0fXVZ9rQWOjTEVIKImy9Dy59kVqwYMpCwZbJkpigu2bMl/7UG/BA0XA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", + "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8821,41 +8602,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-no-shortcut-reference-image": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.1.tgz", - "integrity": "sha512-0o0YO88Atib0eWloy5ZbL2IZ1axMNysbJI5j58sxMjEwLq1JORtGOR9Z6aHsOccS5yseeenw5w3DoMLB9PtJtw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8864,41 +8651,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-no-shortcut-reference-link": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.1.tgz", - "integrity": "sha512-uXujnVm5LXLtGyJkTIbn/uxDRu507B9vC8TieiX6HX8OjVeDWUjtcVJOaqeyLJGjV0Ri1Y+AegMNWx5eDBHTDQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8907,41 +8700,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-no-table-indentation": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.1.tgz", - "integrity": "sha512-GYBX5P1Vj0gO7S7JLU2tpYR5rg9xbeccPQ0ZgHYK4d7T9FjDwfE1hrdvlha3k8s3CFKqQ7MC0OgQw/2IN413MA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8951,41 +8750,61 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "is-plain-obj": { + "unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "requires": { "@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" } } } }, "remark-lint-no-tabs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.1.tgz", - "integrity": "sha512-B2q1I+fyRDvWTQxCC91NoEvz0KzI9e6Yhu1TdOLkwc02hMWj869G165Rh+EcBKGW/CLKuMPhIn2XtL86emqZRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", + "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -8993,32 +8812,23 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", "vfile": "^5.0.0" } } @@ -9030,22 +8840,12 @@ "integrity": "sha512-cj8t+nvtO6eAY2lJC7o5du8VeOCK13XiDUHL4U6k5aw6ZLr3EYWbQ/rNc6cr60eHkh5Ldm09KiZjV3CWpxqJ0g==", "requires": { "unified-lint-rule": "^1.0.2" - }, - "dependencies": { - "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==", - "requires": { - "wrapped": "^1.0.1" - } - } } }, "remark-lint-no-undefined-references": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.1.tgz", - "integrity": "sha512-mmNJO30TYMxwfFJPHkwKNRaW63sU9ffhpb4xkyhyHDmnsplQ96RVYR4WGOXw0/wR+gZECmFtBU+OIWz0cbaiEw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", "requires": { "@types/mdast": "^3.0.0", "micromark-util-normalize-identifier": "^1.0.0", @@ -9057,41 +8857,61 @@ "vfile-location": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "is-plain-obj": { + "unist-util-visit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "requires": { "@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" } } } }, "remark-lint-no-unused-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.1.tgz", - "integrity": "sha512-bcbboInyb8vAPtYakZdaxRQsDIdQnV5WvUdc03PWFlG8YtGOhRQ57SPc+4uVH+VwHoq+lsEsRszr4sOXuuopxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9100,41 +8920,47 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-ordered-list-marker-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.1.tgz", - "integrity": "sha512-CGXvolLwfZIxG9hm4o7OXQXEEpu3r5oyTpYGteJDtOSrpVrBSqFKNq7lfhKYFQkcg2AMJYrH9XEexrYvAoUQOQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9144,102 +8970,118 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-prohibited-strings": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.1.0.tgz", - "integrity": "sha512-tbIXL7cmzZrJEc+hcvLUv9jqU9sxi7MO9atrA/rY4ivVG5xomk+BycE6xFVwiwQC6Fn8dguJ6eHA4/UcT0Xm6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", + "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", "requires": { "escape-string-regexp": "^4.0.0", "unified-lint-rule": "^1.0.2", "unist-util-position": "^3.1.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.1" + } + }, + "remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", + "requires": { + "@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" }, "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" } }, "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" } } }, - "remark-lint-rule-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.1.tgz", - "integrity": "sha512-j1e60nfZJk0C6mvDZkiFwVu0b58f219ATlMNaZ9h8QdQhdxD/0kUnizJ7xW3wS4sHtCgkKGctAp04Ma0c+Dkhg==", + "remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9248,84 +9090,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } - } - } - }, - "remark-lint-strong-marker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.1.tgz", - "integrity": "sha512-J5dJviBd747vXBkFuA2j/Ni7RjTg+Mg2GgXlPHtbgDnal51CdN2WXDmbVG/A98+3P18MlysvQ7KnBrSiiuGBpQ==", - "requires": { - "@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" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@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-is": "^5.0.0" } } } }, "remark-lint-table-cell-padding": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.1.tgz", - "integrity": "sha512-NdF0WHFOaMjeumRIrGHXVadwWkgnfJuMb96FGbf1HvSEv9l41PHkS1KTsL6Zoe1Cva57niAuarMv6xzcJqVjrA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "requires": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -9335,41 +9145,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-table-pipes": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.1.tgz", - "integrity": "sha512-om6i8SMSjMsR/mYlx5cMSoxXK+EFI8/n73qCVx/RAhFCIsW4TFR+gYmgFTyLr5Mp4vqjV3uYBIR9Ucv6Johauw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9378,41 +9199,52 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-lint-unordered-list-marker-style": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.1.tgz", - "integrity": "sha512-DPveL2hhkcY608Bkn/Hx+C7pxviufpYyRiu0CnfFxkbLBlMgVdvVIOGCCOlhbvKuGtozmH/RCRsdIfzjlkXiew==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", "requires": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -9422,87 +9254,56 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@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", + "unified": "^10.0.0", "vfile": "^5.0.0" } - } - } - }, - "remark-message-control": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", - "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "rehype": "^12.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@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-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } } } }, "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz", + "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==", "requires": { - "mdast-util-from-markdown": "^0.8.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" } }, "remark-preset-lint-node": { @@ -9544,12 +9345,49 @@ "semver": "^7.3.2", "unified-lint-rule": "^2.0.0", "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-visit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } } }, "remark-preset-lint-recommended": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.1.tgz", - "integrity": "sha512-8ZlwP2aDCGf+3UFPP1K8CofWI/WLoq8hPhQiuKotCFNSdTe98/27XYqWXpbMt4feWtX4+tcJY1y0duuLK5lhBg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", + "integrity": "sha512-ZVugDvBLFQ2JZ/tRIb0q/Oo4Qwp8s8AD8M/8GU7VgQYQ39GDVzo8lUTg2ugWy3YuBCX7wmnP0UDOSwIJt7vn0A==", "requires": { "@types/mdast": "^3.0.0", "remark-lint": "^9.0.0", @@ -9571,151 +9409,111 @@ "unified": "^10.0.0" }, "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" + "mdast-comment-marker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.0.0.tgz", + "integrity": "sha512-LQ4sf7vUzxz4mQQlzzBDgjaCJO5A0lkIAT9TyeNMfqaP31ooP1Qw9hprf7/V3NCo5FA1nvo5gbnfLVRY79QlDQ==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" + "remark-lint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.0.0.tgz", + "integrity": "sha512-ETO4zI48PR1Nz42YiyaYBzyhOiEfppXLnck7HW2pjKqxd36SIyQgM6sxD4ToMQI9KuCgy8mLAl/iVJoDLKxVjw==", + "requires": { + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" + } }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", + "remark-message-control": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.0.0.tgz", + "integrity": "sha512-KZySoC97TrMPYfIZ9vJ7wxvQwniy68K6WCY3vmSedDN5YuGfdVOpMj6sjaZQcqbWZV9n7BhrT70E3xaUTtk4hA==", "requires": { - "@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", + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "rehype": "^12.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", "vfile": "^5.0.0" } - } - } - }, - "remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "requires": { - "mdast-util-to-markdown": "^0.6.0" - }, - "dependencies": { - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "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==", "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "@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" } }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, - "mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "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==", "requires": { "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" } }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "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==", "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" } }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } } } }, + "remark-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", + "integrity": "sha512-3LAQqJ/qiUxkWc7fUcVuB7RtIT38rvmxfmJG8z1TiE/D8zi3JGQ2tTcTJu9Tptdpb7gFwU0whRi5q1FbFOb9yA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + } + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { - "is-core-module": "^2.2.0", + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, "rollup": { - "version": "2.56.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", - "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", + "version": "2.52.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", + "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -9727,9 +9525,9 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "requires": { "lru-cache": "^6.0.0" } @@ -9771,11 +9569,6 @@ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==" }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -9785,13 +9578,13 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" } }, "stringify-entities": { @@ -9804,11 +9597,11 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^6.0.0" } }, "supports-color": { @@ -9833,40 +9626,18 @@ } }, "to-vfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.1.tgz", + "integrity": "sha512-biljADNq2n+AZn/zX+/87zStnIqctKr/q5OaOD8+qSKINokUGPbWBShvxa1iLUgHz6dGGjVnQPNoFRtVBzMkVg==", "requires": { "is-buffer": "^2.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } + "vfile": "^5.0.0" } }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" }, "typedarray": { "version": "0.0.6", @@ -9874,163 +9645,71 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", + "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", "requires": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" } }, "unified-args": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-8.1.0.tgz", - "integrity": "sha512-t1HPS1cQPsVvt/6EtyWIbQGurza5684WGRigNghZRvzIdHm3LPgMdXPyGx0npORKzdiy5+urkF0rF5SXM8lBuQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", + "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", "requires": { - "camelcase": "^5.0.0", - "chalk": "^3.0.0", + "@types/text-table": "^0.2.0", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", "chokidar": "^3.0.0", - "fault": "^1.0.2", + "fault": "^2.0.0", "json5": "^2.0.0", - "minimist": "^1.2.0", + "minimist": "^1.0.0", "text-table": "^0.2.0", - "unified-engine": "^8.0.0" + "unified-engine": "^9.0.0" } }, "unified-engine": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-8.2.0.tgz", - "integrity": "sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA==", - "requires": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.3.tgz", + "integrity": "sha512-SgzREcCM2IpUy3JMFUcPRZQ2Py6IwvJ2KIrg2AiI7LnGge6E6OPFWpcabHrEXG0IvO2OI3afiD9DOcQvvZfXDQ==", + "requires": { + "@types/concat-stream": "^1.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/js-yaml": "^4.0.0", + "@types/node": "^16.0.0", + "@types/unist": "^2.0.0", "concat-stream": "^2.0.0", "debug": "^4.0.0", - "fault": "^1.0.0", - "figures": "^3.0.0", - "glob": "^7.0.3", + "fault": "^2.0.0", + "glob": "^7.0.0", "ignore": "^5.0.0", "is-buffer": "^2.0.0", "is-empty": "^1.0.0", - "is-plain-obj": "^2.0.0", - "js-yaml": "^3.6.1", - "load-plugin": "^3.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "load-plugin": "^4.0.0", "parse-json": "^5.0.0", - "to-vfile": "^6.0.0", - "trough": "^1.0.0", - "unist-util-inspect": "^5.0.0", - "vfile-reporter": "^6.0.0", - "vfile-statistics": "^1.1.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "unified-lint-rule": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", - "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", - "requires": { - "@types/unist": "^2.0.0", + "to-vfile": "^7.0.0", "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz", - "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@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-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0" } }, - "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==", + "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==", "requires": { - "@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" - }, - "dependencies": { - "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==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - } + "wrapped": "^1.0.1" } }, "unist-util-generated": { @@ -10039,59 +9718,48 @@ "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==" }, "unist-util-inspect": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz", - "integrity": "sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", + "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", "requires": { - "is-empty": "^1.0.0" + "@types/unist": "^2.0.0" } }, "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", + "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==" }, "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", "requires": { - "@types/unist": "^2.0.2" + "@types/unist": "^2.0.0" } }, "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" } }, "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==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "unist-util-is": "^4.0.0" } }, "util-deprecate": { @@ -10108,26 +9776,12 @@ "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - } } }, "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" }, "vfile-message": { "version": "3.0.2", @@ -10136,55 +9790,53 @@ "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - } } }, "vfile-reporter": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", - "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.1.tgz", + "integrity": "sha512-pof+cQSJCUNmHG6zoBOJfErb6syIWHWM14CwKjsugCixxl4CZdrgzgxwLBW8lIB6czkzX0Agnnhj33YpKyLvmA==", "requires": { - "repeat-string": "^1.5.0", - "string-width": "^4.0.0", - "supports-color": "^6.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-sort": "^2.1.2", - "vfile-statistics": "^1.1.0" + "@types/repeat-string": "^1.0.0", + "@types/supports-color": "^8.0.0", + "repeat-string": "^1.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" }, "dependencies": { "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==" }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.0.2.tgz", + "integrity": "sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^5.0.0" } } } }, "vfile-sort": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", - "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "requires": { + "vfile-message": "^3.0.0" + } }, "vfile-statistics": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", - "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "requires": { + "vfile-message": "^3.0.0" + } }, "web-namespaces": { "version": "2.0.0", diff --git a/tools/node-lint-md-cli-rollup/package.json b/tools/node-lint-md-cli-rollup/package.json index 0ce68f4a8a0906..0602d902c2a37e 100644 --- a/tools/node-lint-md-cli-rollup/package.json +++ b/tools/node-lint-md-cli-rollup/package.json @@ -11,10 +11,10 @@ }, "dependencies": { "markdown-extensions": "^1.1.1", - "remark": "^13.0.0", + "remark": "^14.0.0", "remark-gfm": "^2.0.0", "remark-preset-lint-node": "^3.0.0", - "unified-args": "^8.1.0" + "unified-args": "^9.0.0" }, "main": "dist/index.js", "scripts": { diff --git a/tools/node-lint-md-cli-rollup/rollup.config.js b/tools/node-lint-md-cli-rollup/rollup.config.js index 93a97c12f8041d..531103d729dfd8 100644 --- a/tools/node-lint-md-cli-rollup/rollup.config.js +++ b/tools/node-lint-md-cli-rollup/rollup.config.js @@ -5,12 +5,12 @@ const commonjs = require('@rollup/plugin-commonjs'); const json = require('@rollup/plugin-json'); module.exports = { - input: 'src/cli-entry.js', + input: 'src/cli-entry.mjs', output: { file: 'dist/index.js', format: 'cjs', sourcemap: false, - exports: 'default', + exports: 'none', }, external: [ 'stream', diff --git a/tools/node-lint-md-cli-rollup/src/cli-entry.js b/tools/node-lint-md-cli-rollup/src/cli-entry.mjs similarity index 50% rename from tools/node-lint-md-cli-rollup/src/cli-entry.js rename to tools/node-lint-md-cli-rollup/src/cli-entry.mjs index e417cc88d45a8d..71e2563926b26c 100644 --- a/tools/node-lint-md-cli-rollup/src/cli-entry.js +++ b/tools/node-lint-md-cli-rollup/src/cli-entry.mjs @@ -1,18 +1,16 @@ -'use strict'; - // To aid in future maintenance, this layout closely matches remark-cli/cli.js. -// https://github.com/remarkjs/remark/blob/master/packages/remark-cli/cli.js +// https://github.com/remarkjs/remark/blob/HEAD/packages/remark-cli/cli.js -const start = require('unified-args'); -const extensions = require('markdown-extensions'); -const processor = require('remark'); -const proc = require('remark/package.json'); -const cli = require('../package.json'); -const lintNode = require('remark-preset-lint-node'); -const gfm = require('remark-gfm'); +import { args } from 'unified-args'; +import extensions from 'markdown-extensions'; +import { remark } from 'remark'; +import proc from 'remark/package.json'; +import cli from '../package.json'; +import lintNode from 'remark-preset-lint-node'; +import gfm from 'remark-gfm'; -start({ - processor: processor().use(gfm).use(lintNode), +args({ + processor: remark().use(gfm).use(lintNode), name: proc.name, description: cli.description, version: [ From d1900f43ce868627c0f0fe34763603d868add385 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Wed, 18 Aug 2021 23:22:01 -0400 Subject: [PATCH 16/33] fs: combine require() and destructure This commit combines two require() calls and subsequent destructuring operations. PR-URL: https://github.com/nodejs/node/pull/39806 Reviewed-By: Luigi Pinca Reviewed-By: Antoine du Hamel Reviewed-By: Beth Griggs Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- lib/internal/fs/cp/cp-sync.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/internal/fs/cp/cp-sync.js b/lib/internal/fs/cp/cp-sync.js index ca2102aeb5ada8..723a5c86d3fb73 100644 --- a/lib/internal/fs/cp/cp-sync.js +++ b/lib/internal/fs/cp/cp-sync.js @@ -26,7 +26,6 @@ const { ERR_FS_EISDIR, ERR_INVALID_RETURN_VALUE, } = codes; -const fs = require('fs'); const { chmodSync, copyFileSync, @@ -39,15 +38,14 @@ const { symlinkSync, unlinkSync, utimesSync, -} = fs; -const path = require('path'); +} = require('fs'); const { dirname, isAbsolute, join, parse, resolve, -} = path; +} = require('path'); const { isPromise } = require('util/types'); function cpSyncFn(src, dest, opts) { From 79079ea01b2c292d866bfeb8e3407e296f7c60dd Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 21 Aug 2021 07:09:43 -0700 Subject: [PATCH 17/33] tools: fix markdown linting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This updates remark-preset-lint-node to 3.0.1, which actually works unlike the 3.0.0 version we're using. (Sorry about 3.0.0 not actually linting!) It also updates rollup and the rollup config. So this uses the latest everything as of this writing. PR-URL: https://github.com/nodejs/node/pull/39832 Reviewed-By: Daijiro Wachi Reviewed-By: Michaël Zasso Reviewed-By: Antoine du Hamel --- .eslintignore | 2 +- Makefile | 2 +- tools/{lint-md.js => lint-md.mjs} | 100633 +++++++-------- .../node-lint-md-cli-rollup/package-lock.json | 3854 +- tools/node-lint-md-cli-rollup/package.json | 2 +- .../node-lint-md-cli-rollup/rollup.config.js | 22 +- vcbuild.bat | 2 +- 7 files changed, 48584 insertions(+), 55933 deletions(-) rename tools/{lint-md.js => lint-md.mjs} (65%) diff --git a/.eslintignore b/.eslintignore index 19e0fcee9e1b5a..e8b8c3f297709a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,7 +4,7 @@ test/addons/??_* test/fixtures test/message/esm_display_syntax_error.mjs tools/icu -tools/lint-md.js +tools/lint-md.mjs tools/node-lint-md-cli-rollup/dist benchmark/tmp doc/**/*.js diff --git a/Makefile b/Makefile index ec4c774748cd91..609d0614419f86 100644 --- a/Makefile +++ b/Makefile @@ -1235,7 +1235,7 @@ LINT_MD_TARGETS = doc src lib benchmark test tools/doc tools/icu $(wildcard *.md LINT_MD_FILES = $(shell $(FIND) $(LINT_MD_TARGETS) -type f \ ! -path '*node_modules*' ! -path 'test/fixtures/*' -name '*.md' \ $(LINT_MD_NEWER)) -run-lint-md = tools/lint-md.js -q -f --no-stdout $(LINT_MD_FILES) +run-lint-md = tools/lint-md.mjs -q -f --no-stdout $(LINT_MD_FILES) # Lint all changed markdown files maintained by us tools/.mdlintstamp: $(LINT_MD_FILES) $(info Running Markdown linter...) diff --git a/tools/lint-md.js b/tools/lint-md.mjs similarity index 65% rename from tools/lint-md.js rename to tools/lint-md.mjs index 1f865ab809a942..b614ae37d81af3 100644 --- a/tools/lint-md.js +++ b/tools/lint-md.mjs @@ -1,50 +1,19 @@ -'use strict'; - -// Don't change this file manually, -// it is generated from tools/node-lint-md-cli-rollup - -var require$$0$a = require('stream'); -var require$$0$7 = require('path'); -var require$$0$5 = require('util'); -var require$$0$6 = require('os'); -var require$$1 = require('tty'); -var require$$0$8 = require('fs'); -var require$$1$1 = require('module'); -var require$$0$9 = require('events'); -var require$$5$2 = require('assert'); -var url = require('url'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { - return e[k]; - } - }); - } - }); - } - n['default'] = e; - return Object.freeze(n); -} - -var require$$0__default$5 = /*#__PURE__*/_interopDefaultLegacy(require$$0$a); -var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$7); -var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$5); -var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$6); -var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1); -var require$$0__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$0$8); -var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1); -var require$$0__default$4 = /*#__PURE__*/_interopDefaultLegacy(require$$0$9); -var require$$5__default = /*#__PURE__*/_interopDefaultLegacy(require$$5$2); +import path$b from 'path'; +import require$$0$3, { realpathSync as realpathSync$1, statSync, Stats } from 'fs'; +import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; +import process$2 from 'node:process'; +import stream, { PassThrough } from 'node:stream'; +import require$$0$2 from 'os'; +import tty$1 from 'tty'; +import require$$0$5 from 'events'; +import require$$0$4, { format as format$2, inspect as inspect$1 } from 'util'; +import require$$1 from 'stream'; +import path$c from 'node:path'; +import { pathToFileURL as pathToFileURL$1 } from 'node:url'; +import assert$2 from 'assert'; +import fs$a from 'node:fs'; +import { EventEmitter as EventEmitter$1 } from 'node:events'; +import process$1 from 'process'; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; @@ -67,37392 +36,35176 @@ 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 cliEntry = {}; - -var vfileStatistics = statistics$2; - -// Get stats for a file, list of files, or list of messages. -function statistics$2(files) { - var result = {true: 0, false: 0, null: 0}; - - count(files); - - return { - fatal: result.true, - nonfatal: result.false + result.null, - warn: result.false, - info: result.null, - total: result.true + result.false + result.null - } +var ansiStyles$2 = {exports: {}}; - function count(value) { - if (value) { - if (value[0] && value[0].messages) { - // Multiple vfiles - countInAll(value); - } else { - // One vfile / messages - countAll(value.messages || value); - } - } - } +var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; - function countInAll(files) { - var length = files.length; - var index = -1; +/* MIT license */ - while (++index < length) { - count(files[index].messages); - } - } +/* eslint-disable no-mixed-operators */ +const cssKeywords$1 = colorName$1; - function countAll(messages) { - var length = messages.length; - var index = -1; - var fatal; +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) - while (++index < length) { - fatal = messages[index].fatal; - result[fatal === null || fatal === undefined ? null : Boolean(fatal)]++; - } - } +const reverseKeywords$1 = {}; +for (const key of Object.keys(cssKeywords$1)) { + reverseKeywords$1[cssKeywords$1[key]] = key; } -var slice$4 = [].slice; - -var wrap_1 = wrap$3; - -// Wrap `fn`. -// Can be sync or async; return a promise, receive a completion handler, return -// new values and errors. -function wrap$3(fn, callback) { - var invoked; - - return wrapped - - function wrapped() { - var params = slice$4.call(arguments, 0); - var callback = fn.length > params.length; - var result; - - if (callback) { - params.push(done); - } - - try { - result = fn.apply(null, params); - } catch (error) { - // Well, this is quite the pickle. - // `fn` received a callback and invoked it (thus continuing the pipeline), - // but later also threw an error. - // We’re not about to restart the pipeline again, so the only thing left - // to do is to throw the thing instead. - if (callback && invoked) { - throw error - } +const convert$4 = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; - return done(error) - } +var conversions$5 = convert$4; - if (!callback) { - if (result && typeof result.then === 'function') { - result.then(then, done); - } else if (result instanceof Error) { - done(result); - } else { - then(result); - } - } - } +// Hide .channels and .labels properties +for (const model of Object.keys(convert$4)) { + if (!('channels' in convert$4[model])) { + throw new Error('missing channels property: ' + model); + } - // Invoke `next`, only once. - function done() { - if (!invoked) { - invoked = true; + if (!('labels' in convert$4[model])) { + throw new Error('missing channel labels property: ' + model); + } - callback.apply(null, arguments); - } - } + if (convert$4[model].labels.length !== convert$4[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } - // Invoke `done` with one value. - // Tracks if an error is passed, too. - function then(value) { - done(null, value); - } + const {channels, labels} = convert$4[model]; + delete convert$4[model].channels; + delete convert$4[model].labels; + Object.defineProperty(convert$4[model], 'channels', {value: channels}); + Object.defineProperty(convert$4[model], 'labels', {value: labels}); } -var wrap$2 = wrap_1; - -var trough_1 = trough$4; - -trough$4.wrap = wrap$2; +convert$4.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; -var slice$3 = [].slice; + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } -// Create new middleware. -function trough$4() { - var fns = []; - var middleware = {}; + h = Math.min(h * 60, 360); - middleware.run = run; - middleware.use = use; + if (h < 0) { + h += 360; + } - return middleware + const l = (min + max) / 2; - // Run `fns`. Last argument must be a completion handler. - function run() { - var index = -1; - var input = slice$3.call(arguments, 0, -1); - var done = arguments[arguments.length - 1]; + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } - if (typeof done !== 'function') { - throw new Error('Expected function as last argument, not ' + done) - } + return [h, s * 100, l * 100]; +}; - next.apply(null, [null].concat(input)); +convert$4.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; - // Run the next `fn`, if any. - function next(err) { - var fn = fns[++index]; - var params = slice$3.call(arguments, 0); - var values = params.slice(1); - var length = input.length; - var pos = -1; + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; - if (err) { - done(err); - return - } + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); - // Copy non-nully input into values. - while (++pos < length) { - if (values[pos] === null || values[pos] === undefined) { - values[pos] = input[pos]; - } - } + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } - input = values; + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } - // Next or done. - if (fn) { - wrap$2(fn, next).apply(null, input); - } else { - done.apply(null, [null].concat(input)); - } - } - } + return [ + h * 360, + s * 100, + v * 100 + ]; +}; - // Add `fn` to the list. - function use(fn) { - if (typeof fn !== 'function') { - throw new Error('Expected `fn` to be a function, not ' + fn) - } +convert$4.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert$4.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); - fns.push(fn); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - return middleware - } -} + return [h, w * 100, b * 100]; +}; -var jsYaml$2 = {}; +convert$4.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; -var loader$2 = {}; + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; -var common$b = {}; + return [c * 100, m * 100, y * 100, k * 100]; +}; -function isNothing$1(subject) { - return (typeof subject === 'undefined') || (subject === null); +function comparativeDistance$1(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); } +convert$4.rgb.keyword = function (rgb) { + const reversed = reverseKeywords$1[rgb]; + if (reversed) { + return reversed; + } -function isObject$4(subject) { - return (typeof subject === 'object') && (subject !== null); -} + let currentClosestDistance = Infinity; + let currentClosestKeyword; + for (const keyword of Object.keys(cssKeywords$1)) { + const value = cssKeywords$1[keyword]; -function toArray$1(sequence) { - if (Array.isArray(sequence)) return sequence; - else if (isNothing$1(sequence)) return []; + // Compute comparative distance + const distance = comparativeDistance$1(rgb, value); - return [ sequence ]; -} + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + return currentClosestKeyword; +}; -function extend$4(target, source) { - var index, length, key, sourceKeys; +convert$4.keyword.rgb = function (keyword) { + return cssKeywords$1[keyword]; +}; - if (source) { - sourceKeys = Object.keys(source); +convert$4.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; - for (index = 0, length = sourceKeys.length; index < length; index += 1) { - key = sourceKeys[index]; - target[key] = source[key]; - } - } + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - return target; -} + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + return [x * 100, y * 100, z * 100]; +}; -function repeat$8(string, count) { - var result = '', cycle; +convert$4.rgb.lab = function (rgb) { + const xyz = convert$4.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; - for (cycle = 0; cycle < count; cycle += 1) { - result += string; - } + x /= 95.047; + y /= 100; + z /= 108.883; - return result; -} + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); -function isNegativeZero$1(number) { - return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); -} + return [l, a, b]; +}; +convert$4.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; -common$b.isNothing = isNothing$1; -common$b.isObject = isObject$4; -common$b.toArray = toArray$1; -common$b.repeat = repeat$8; -common$b.isNegativeZero = isNegativeZero$1; -common$b.extend = extend$4; + if (s === 0) { + val = l * 255; + return [val, val, val]; + } -function YAMLException$6(reason, mark) { - // Super constructor - Error.call(this); + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + const t1 = 2 * l - t2; - // Include stack trace in error object - if (Error.captureStackTrace) { - // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); - } else { - // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; - } -} + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } -// Inherit from Error -YAMLException$6.prototype = Object.create(Error.prototype); -YAMLException$6.prototype.constructor = YAMLException$6; + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + rgb[i] = val * 255; + } -YAMLException$6.prototype.toString = function toString(compact) { - var result = this.name + ': '; + return rgb; +}; - result += this.reason || '(unknown reason)'; +convert$4.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); - if (!compact && this.mark) { - result += ' ' + this.mark.toString(); - } + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - return result; + return [h, sv * 100, v * 100]; }; +convert$4.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; -var exception$1 = YAMLException$6; - -var common$a = common$b; - + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; -function Mark$1(name, buffer, position, line, column) { - this.name = name; - this.buffer = buffer; - this.position = position; - this.line = line; - this.column = column; -} + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; +convert$4.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; -Mark$1.prototype.getSnippet = function getSnippet(indent, maxLength) { - var head, start, tail, end, snippet; + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; - if (!this.buffer) return null; + return [h, sl * 100, l * 100]; +}; - indent = indent || 4; - maxLength = maxLength || 75; +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert$4.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; - head = ''; - start = this.position; + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } - while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { - start -= 1; - if (this.position - start > (maxLength / 2 - 1)) { - head = ' ... '; - start += 5; - break; - } - } + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; - tail = ''; - end = this.position; + if ((i & 0x01) !== 0) { + f = 1 - f; + } - while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { - end += 1; - if (end - this.position > (maxLength / 2 - 1)) { - tail = ' ... '; - end -= 5; - break; - } - } + const n = wh + f * (v - wh); // Linear interpolation - snippet = this.buffer.slice(start, end); + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ - return common$a.repeat(' ', indent) + head + snippet + tail + '\n' + - common$a.repeat(' ', indent + this.position - start + head.length) + '^'; + return [r * 255, g * 255, b * 255]; }; +convert$4.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; -Mark$1.prototype.toString = function toString(compact) { - var snippet, where = ''; + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); - if (this.name) { - where += 'in "' + this.name + '" '; - } + return [r * 255, g * 255, b * 255]; +}; - where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); +convert$4.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; - if (!compact) { - snippet = this.getSnippet(); + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - if (snippet) { - where += ':\n' + snippet; - } - } + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; - return where; -}; + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; -var mark$1 = Mark$1; + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); -var YAMLException$5 = exception$1; + return [r * 255, g * 255, b * 255]; +}; -var TYPE_CONSTRUCTOR_OPTIONS$1 = [ - 'kind', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'defaultStyle', - 'styleAliases' -]; +convert$4.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; -var YAML_NODE_KINDS$1 = [ - 'scalar', - 'sequence', - 'mapping' -]; + x /= 95.047; + y /= 100; + z /= 108.883; -function compileStyleAliases$1(map) { - var result = {}; + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); - } + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); - return result; -} + return [l, a, b]; +}; -function Type$j(tag, options) { - options = options || {}; +convert$4.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS$1.indexOf(name) === -1) { - throw new YAMLException$5('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; - // TODO: Add tag format check. - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = options['resolve'] || function () { return true; }; - this.construct = options['construct'] || function (data) { return data; }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases$1(options['styleAliases'] || null); + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - if (YAML_NODE_KINDS$1.indexOf(this.kind) === -1) { - throw new YAMLException$5('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); - } -} + x *= 95.047; + y *= 100; + z *= 108.883; -var type$1 = Type$j; + return [x, y, z]; +}; -/*eslint-disable max-len*/ +convert$4.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; -var common$9 = common$b; -var YAMLException$4 = exception$1; -var Type$i = type$1; + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } -function compileList$1(schema, name, result) { - var exclude = []; + const c = Math.sqrt(a * a + b * b); - schema.include.forEach(function (includedSchema) { - result = compileList$1(includedSchema, name, result); - }); + return [l, c, h]; +}; - schema[name].forEach(function (currentType) { - result.forEach(function (previousType, previousIndex) { - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { - exclude.push(previousIndex); - } - }); +convert$4.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; - result.push(currentType); - }); + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); - return result.filter(function (type, index) { - return exclude.indexOf(index) === -1; - }); -} + return [l, a, b]; +}; +convert$4.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert$4.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization -function compileMap$1(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {} - }, index, length; + value = Math.round(value / 50); - function collectType(type) { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; - } + if (value === 0) { + return 30; + } - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); - } - return result; -} + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + if (value === 2) { + ansi += 60; + } -function Schema$7(definition) { - this.include = definition.include || []; - this.implicit = definition.implicit || []; - this.explicit = definition.explicit || []; + return ansi; +}; - this.implicit.forEach(function (type) { - if (type.loadKind && type.loadKind !== 'scalar') { - throw new YAMLException$4('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); - } - }); +convert$4.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert$4.rgb.ansi16(convert$4.hsv.rgb(args), args[2]); +}; - this.compiledImplicit = compileList$1(this, 'implicit', []); - this.compiledExplicit = compileList$1(this, 'explicit', []); - this.compiledTypeMap = compileMap$1(this.compiledImplicit, this.compiledExplicit); -} +convert$4.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } -Schema$7.DEFAULT = null; + if (r > 248) { + return 231; + } + return Math.round(((r - 8) / 247) * 24) + 232; + } -Schema$7.create = function createSchema() { - var schemas, types; + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); - switch (arguments.length) { - case 1: - schemas = Schema$7.DEFAULT; - types = arguments[0]; - break; + return ansi; +}; - case 2: - schemas = arguments[0]; - types = arguments[1]; - break; +convert$4.ansi16.rgb = function (args) { + let color = args % 10; - default: - throw new YAMLException$4('Wrong number of arguments for Schema.create function'); - } + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } - schemas = common$9.toArray(schemas); - types = common$9.toArray(types); + color = color / 10.5 * 255; - if (!schemas.every(function (schema) { return schema instanceof Schema$7; })) { - throw new YAMLException$4('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); - } + return [color, color, color]; + } - if (!types.every(function (type) { return type instanceof Type$i; })) { - throw new YAMLException$4('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; - return new Schema$7({ - include: schemas, - explicit: types - }); + return [r, g, b]; }; +convert$4.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } -var schema$2 = Schema$7; + args -= 16; -var Type$h = type$1; + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; -var str$1 = new Type$h('tag:yaml.org,2002:str', { - kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); + return [r, g, b]; +}; -var Type$g = type$1; +convert$4.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); -var seq$1 = new Type$g('tag:yaml.org,2002:seq', { - kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; -var Type$f = type$1; +convert$4.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } -var map$7 = new Type$f('tag:yaml.org,2002:map', { - kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); + let colorString = match[0]; -var Schema$6 = schema$2; + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; -var failsafe$1 = new Schema$6({ - explicit: [ - str$1, - seq$1, - map$7 - ] -}); + return [r, g, b]; +}; -var Type$e = type$1; +convert$4.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; -function resolveYamlNull$1(data) { - if (data === null) return true; + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } - var max = data.length; + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } - return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); -} + hue /= 6; + hue %= 1; -function constructYamlNull$1() { - return null; -} + return [hue * 360, chroma * 100, grayscale * 100]; +}; -function isNull$1(object) { - return object === null; -} +convert$4.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; -var _null$1 = new Type$e('tag:yaml.org,2002:null', { - kind: 'scalar', - resolve: resolveYamlNull$1, - construct: constructYamlNull$1, - predicate: isNull$1, - represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; } - }, - defaultStyle: 'lowercase' -}); + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); -var Type$d = type$1; + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } -function resolveYamlBoolean$1(data) { - if (data === null) return false; + return [hsl[0], c * 100, f * 100]; +}; - var max = data.length; +convert$4.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; - return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); -} + const c = s * v; + let f = 0; -function constructYamlBoolean$1(data) { - return data === 'true' || - data === 'True' || - data === 'TRUE'; -} + if (c < 1.0) { + f = (v - c) / (1 - c); + } -function isBoolean$1(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; -} + return [hsv[0], c * 100, f * 100]; +}; -var bool$1 = new Type$d('tag:yaml.org,2002:bool', { - kind: 'scalar', - resolve: resolveYamlBoolean$1, - construct: constructYamlBoolean$1, - predicate: isBoolean$1, - represent: { - lowercase: function (object) { return object ? 'true' : 'false'; }, - uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, - camelcase: function (object) { return object ? 'True' : 'False'; } - }, - defaultStyle: 'lowercase' -}); +convert$4.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; -var common$8 = common$b; -var Type$c = type$1; + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } -function isHexCode$1(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); -} + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; -function isOctCode$1(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); -} + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ -function isDecCode$1(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); -} + mg = (1.0 - c) * g; -function resolveYamlInteger$1(data) { - if (data === null) return false; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; - var max = data.length, - index = 0, - hasDigits = false, - ch; +convert$4.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; - if (!max) return false; + const v = c + g * (1.0 - c); + let f = 0; - ch = data[index]; + if (v > 0.0) { + f = c / v; + } - // sign - if (ch === '-' || ch === '+') { - ch = data[++index]; - } + return [hcg[0], f * 100, v * 100]; +}; - if (ch === '0') { - // 0 - if (index + 1 === max) return true; - ch = data[++index]; +convert$4.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; - // base 2, base 8, base 16 + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; - if (ch === 'b') { - // base 2 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + return [hcg[0], s * 100, l * 100]; +}; - if (ch === 'x') { - // base 16 - index++; +convert$4.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode$1(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } +convert$4.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; - // base 8 - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode$1(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } + if (c < 1) { + g = (v - c) / (1 - c); + } - // base 10 (except 0) or base 60 + return [hwb[0], c * 100, g * 100]; +}; - // value should not start with `_`; - if (ch === '_') return false; +convert$4.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch === ':') break; - if (!isDecCode$1(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } +convert$4.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; - // Should have digits and should not end with `_` - if (!hasDigits || ch === '_') return false; +convert$4.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; - // if !base60 - done; - if (ch !== ':') return true; +convert$4.gray.hsl = function (args) { + return [0, 0, args[0]]; +}; - // base60 almost not used, no needs to optimize - return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); -} +convert$4.gray.hsv = convert$4.gray.hsl; -function constructYamlInteger$1(data) { - var value = data, sign = 1, ch, base, digits = []; +convert$4.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } +convert$4.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; - ch = value[0]; +convert$4.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; - if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; - } +convert$4.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; - if (value === '0') return 0; + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; - if (ch === '0') { - if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); - if (value[1] === 'x') return sign * parseInt(value, 16); - return sign * parseInt(value, 8); - } +convert$4.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; - if (value.indexOf(':') !== -1) { - value.split(':').forEach(function (v) { - digits.unshift(parseInt(v, 10)); - }); +const conversions$4 = conversions$5; - value = 0; - base = 1; +/* + This function routes a model to all other models. - digits.forEach(function (d) { - value += (d * base); - base *= 60; - }); + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). - return sign * value; + conversions that are not possible simply are not included. +*/ - } +function buildGraph$1() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions$4); - return sign * parseInt(value, 10); -} + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } -function isInteger$1(object) { - return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common$8.isNegativeZero(object)); + return graph; } -var int$4 = new Type$c('tag:yaml.org,2002:int', { - kind: 'scalar', - resolve: resolveYamlInteger$1, - construct: constructYamlInteger$1, - predicate: isInteger$1, - represent: { - binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, - octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, - decimal: function (obj) { return obj.toString(10); }, - /* eslint-disable max-len */ - hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } - }, - defaultStyle: 'decimal', - styleAliases: { - binary: [ 2, 'bin' ], - octal: [ 8, 'oct' ], - decimal: [ 10, 'dec' ], - hexadecimal: [ 16, 'hex' ] - } -}); +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS$1(fromModel) { + const graph = buildGraph$1(); + const queue = [fromModel]; // Unshift -> queue -> pop -var common$7 = common$b; -var Type$b = type$1; + graph[fromModel].distance = 0; -var YAML_FLOAT_PATTERN$1 = new RegExp( - // 2.5e4, 2.5 and integers - '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + - // .2e4, .2 - // special case, seems not from spec - '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + - // 20:59 - '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + - // .inf - '|[-+]?\\.(?:inf|Inf|INF)' + - // .nan - '|\\.(?:nan|NaN|NAN))$'); + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions$4[current]); -function resolveYamlFloat$1(data) { - if (data === null) return false; + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; - if (!YAML_FLOAT_PATTERN$1.test(data) || - // Quick hack to not allow integers end with `_` - // Probably should update regexp & check speed - data[data.length - 1] === '_') { - return false; - } + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } - return true; + return graph; } -function constructYamlFloat$1(data) { - var value, sign, base, digits; +function link$2(from, to) { + return function (args) { + return to(from(args)); + }; +} - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; - digits = []; +function wrapConversion$1(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions$4[graph[toModel].parent][toModel]; - if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); - } + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link$2(conversions$4[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } - if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + fn.conversion = path; + return fn; +} - } else if (value === '.nan') { - return NaN; +var route$3 = function (fromModel) { + const graph = deriveBFS$1(fromModel); + const conversion = {}; - } else if (value.indexOf(':') >= 0) { - value.split(':').forEach(function (v) { - digits.unshift(parseFloat(v, 10)); - }); + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; - value = 0.0; - base = 1; + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } - digits.forEach(function (d) { - value += d * base; - base *= 60; - }); + conversion[toModel] = wrapConversion$1(toModel, graph); + } - return sign * value; + return conversion; +}; - } - return sign * parseFloat(value, 10); -} +const conversions$3 = conversions$5; +const route$2 = route$3; +const convert$3 = {}; -var SCIENTIFIC_WITHOUT_DOT$1 = /^[-+]?[0-9]+e/; +const models$1 = Object.keys(conversions$3); -function representYamlFloat$1(object, style) { - var res; +function wrapRaw$1(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } - if (isNaN(object)) { - switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '.inf'; - case 'uppercase': return '.INF'; - case 'camelcase': return '.Inf'; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '-.inf'; - case 'uppercase': return '-.INF'; - case 'camelcase': return '-.Inf'; - } - } else if (common$7.isNegativeZero(object)) { - return '-0.0'; - } + if (arg0.length > 1) { + args = arg0; + } - res = object.toString(10); + return fn(args); + }; - // JS stringifier can build scientific format without dots: 5e-100, - // while YAML requres dot: 5.e-100. Fix it with simple hack + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } - return SCIENTIFIC_WITHOUT_DOT$1.test(res) ? res.replace('e', '.e') : res; + return wrappedFn; } -function isFloat$1(object) { - return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common$7.isNegativeZero(object)); -} +function wrapRounded$1(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; -var float$1 = new Type$b('tag:yaml.org,2002:float', { - kind: 'scalar', - resolve: resolveYamlFloat$1, - construct: constructYamlFloat$1, - predicate: isFloat$1, - represent: representYamlFloat$1, - defaultStyle: 'lowercase' -}); + if (arg0 === undefined || arg0 === null) { + return arg0; + } -var Schema$5 = schema$2; + if (arg0.length > 1) { + args = arg0; + } + const result = fn(args); -var json$3 = new Schema$5({ - include: [ - failsafe$1 - ], - implicit: [ - _null$1, - bool$1, - int$4, - float$1 - ] -}); + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } -var Schema$4 = schema$2; + return result; + }; + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } -var core$4 = new Schema$4({ - include: [ - json$3 - ] -}); + return wrappedFn; +} -var Type$a = type$1; +models$1.forEach(fromModel => { + convert$3[fromModel] = {}; -var YAML_DATE_REGEXP$1 = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day + Object.defineProperty(convert$3[fromModel], 'channels', {value: conversions$3[fromModel].channels}); + Object.defineProperty(convert$3[fromModel], 'labels', {value: conversions$3[fromModel].labels}); -var YAML_TIMESTAMP_REGEXP$1 = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + const routes = route$2(fromModel); + const routeModels = Object.keys(routes); -function resolveYamlTimestamp$1(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP$1.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP$1.exec(data) !== null) return true; - return false; -} + routeModels.forEach(toModel => { + const fn = routes[toModel]; -function constructYamlTimestamp$1(data) { - var match, year, month, day, hour, minute, second, fraction = 0, - delta = null, tz_hour, tz_minute, date; + convert$3[fromModel][toModel] = wrapRounded$1(fn); + convert$3[fromModel][toModel].raw = wrapRaw$1(fn); + }); +}); - match = YAML_DATE_REGEXP$1.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP$1.exec(data); +var colorConvert$1 = convert$3; - if (match === null) throw new Error('Date resolve error'); +(function (module) { - // match: [1] year [2] month [3] day +const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; +}; - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); +const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; +}; - if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); - } +const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; - // match: [4] hour [5] minute [6] second [7] fraction +const ansi2ansi = n => n; +const rgb2rgb = (r, g, b) => [r, g, b]; - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); +const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { // milli-seconds - fraction += '0'; - } - fraction = +fraction; - } + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + return value; + }, + enumerable: true, + configurable: true + }); +}; - if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; - } +/** @type {typeof import('color-convert')} */ +let colorConvert; +const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = colorConvert$1; + } - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + const offset = isBackground ? 10 : 0; + const styles = {}; - if (delta) date.setTime(date.getTime() - delta); + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } - return date; -} + return styles; +}; -function representYamlTimestamp$1(object /*, style*/) { - return object.toISOString(); -} +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], -var timestamp$1 = new Type$a('tag:yaml.org,2002:timestamp', { - kind: 'scalar', - resolve: resolveYamlTimestamp$1, - construct: constructYamlTimestamp$1, - instanceOf: Date, - represent: representYamlTimestamp$1 -}); + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], -var Type$9 = type$1; + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; -function resolveYamlMerge$1(data) { - return data === '<<' || data === null; -} + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; -var merge$2 = new Type$9('tag:yaml.org,2002:merge', { - kind: 'scalar', - resolve: resolveYamlMerge$1 -}); + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; -/*eslint-disable no-bitwise*/ + group[styleName] = styles[styleName]; -var NodeBuffer; + codes.set(style[0], style[1]); + } -try { - // A trick for browserified version, to not include `Buffer` shim - var _require$1 = commonjsRequire; - NodeBuffer = _require$1('buffer').Buffer; -} catch (__) {} + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } -var Type$8 = type$1; + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; -// [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + return styles; +} -function resolveYamlBinary$1(data) { - if (data === null) return false; +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); +}(ansiStyles$2)); - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP$1; +var hasFlag$4 = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +}; - // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); +const os$2 = require$$0$2; +const tty = tty$1; +const hasFlag$3 = hasFlag$4; - // Skip CR/LF - if (code > 64) continue; +const {env: env$2} = process; - // Fail on illegal characters - if (code < 0) return false; +let forceColor$1; +if (hasFlag$3('no-color') || + hasFlag$3('no-colors') || + hasFlag$3('color=false') || + hasFlag$3('color=never')) { + forceColor$1 = 0; +} else if (hasFlag$3('color') || + hasFlag$3('colors') || + hasFlag$3('color=true') || + hasFlag$3('color=always')) { + forceColor$1 = 1; +} - bitlen += 6; - } - - // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; +if ('FORCE_COLOR' in env$2) { + if (env$2.FORCE_COLOR === 'true') { + forceColor$1 = 1; + } else if (env$2.FORCE_COLOR === 'false') { + forceColor$1 = 0; + } else { + forceColor$1 = env$2.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env$2.FORCE_COLOR, 10), 3); + } } -function constructYamlBinary$1(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP$1, - bits = 0, - result = []; - - // Collect by 6*4 bits (3 bytes) - - for (idx = 0; idx < max; idx++) { - if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } - - bits = (bits << 6) | map.indexOf(input.charAt(idx)); - } - - // Dump tail - - tailbits = (max % 4) * 6; - - if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); - } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); - } - - // Wrap into Buffer for NodeJS and leave Array for browser - if (NodeBuffer) { - // Support node 6.+ Buffer API when available - return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); - } +function translateLevel$2(level) { + if (level === 0) { + return false; + } - return result; + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; } -function representYamlBinary$1(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP$1; - - // Convert every three bytes to 4 ASCII characters. - - for (idx = 0; idx < max; idx++) { - if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } +function supportsColor$2(haveStream, streamIsTTY) { + if (forceColor$1 === 0) { + return 0; + } - bits = (bits << 8) + object[idx]; - } + if (hasFlag$3('color=16m') || + hasFlag$3('color=full') || + hasFlag$3('color=truecolor')) { + return 3; + } - // Dump tail + if (hasFlag$3('color=256')) { + return 2; + } - tail = max % 3; + if (haveStream && !streamIsTTY && forceColor$1 === undefined) { + return 0; + } - if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; - } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; - } + const min = forceColor$1 || 0; - return result; -} + if (env$2.TERM === 'dumb') { + return min; + } -function isBinary$1(object) { - return NodeBuffer && NodeBuffer.isBuffer(object); -} + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os$2.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } -var binary$1 = new Type$8('tag:yaml.org,2002:binary', { - kind: 'scalar', - resolve: resolveYamlBinary$1, - construct: constructYamlBinary$1, - predicate: isBinary$1, - represent: representYamlBinary$1 -}); + return 1; + } -var Type$7 = type$1; + if ('CI' in env$2) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env$2) || env$2.CI_NAME === 'codeship') { + return 1; + } -var _hasOwnProperty$7 = Object.prototype.hasOwnProperty; -var _toString$5 = Object.prototype.toString; + return min; + } -function resolveYamlOmap$1(data) { - if (data === null) return true; + if ('TEAMCITY_VERSION' in env$2) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0; + } - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; + if (env$2.COLORTERM === 'truecolor') { + return 3; + } - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; + if ('TERM_PROGRAM' in env$2) { + const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - if (_toString$5.call(pair) !== '[object Object]') return false; + switch (env$2.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } - for (pairKey in pair) { - if (_hasOwnProperty$7.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } - } + if (/-256(color)?$/i.test(env$2.TERM)) { + return 2; + } - if (!pairHasKey) return false; + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) { + return 1; + } - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } + if ('COLORTERM' in env$2) { + return 1; + } - return true; + return min; } -function constructYamlOmap$1(data) { - return data !== null ? data : []; +function getSupportLevel$1(stream) { + const level = supportsColor$2(stream, stream && stream.isTTY); + return translateLevel$2(level); } -var omap$1 = new Type$7('tag:yaml.org,2002:omap', { - kind: 'sequence', - resolve: resolveYamlOmap$1, - construct: constructYamlOmap$1 -}); - -var Type$6 = type$1; - -var _toString$4 = Object.prototype.toString; - -function resolveYamlPairs$1(data) { - if (data === null) return true; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; +var supportsColor_1$1 = { + supportsColor: getSupportLevel$1, + stdout: translateLevel$2(supportsColor$2(true, tty.isatty(1))), + stderr: translateLevel$2(supportsColor$2(true, tty.isatty(2))) +}; - if (_toString$4.call(pair) !== '[object Object]') return false; +const stringReplaceAll$1 = (string, substring, replacer) => { + let index = string.indexOf(substring); + if (index === -1) { + return string; + } - keys = Object.keys(pair); + const substringLength = substring.length; + let endIndex = 0; + let returnValue = ''; + do { + returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; + endIndex = index + substringLength; + index = string.indexOf(substring, endIndex); + } while (index !== -1); - if (keys.length !== 1) return false; + returnValue += string.substr(endIndex); + return returnValue; +}; - result[index] = [ keys[0], pair[keys[0]] ]; - } +const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => { + let endIndex = 0; + let returnValue = ''; + do { + const gotCR = string[index - 1] === '\r'; + returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; + endIndex = index + 1; + index = string.indexOf('\n', endIndex); + } while (index !== -1); - return true; -} + returnValue += string.substr(endIndex); + return returnValue; +}; -function constructYamlPairs$1(data) { - if (data === null) return []; +var util$4 = { + stringReplaceAll: stringReplaceAll$1, + stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 +}; - var index, length, pair, keys, result, - object = data; +const TEMPLATE_REGEX$1 = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX$1 = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX$1 = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX$1 = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi; - result = new Array(object.length); +const ESCAPES$1 = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; +function unescape$1(c) { + const u = c[0] === 'u'; + const bracket = c[1] === '{'; - keys = Object.keys(pair); + if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } - result[index] = [ keys[0], pair[keys[0]] ]; - } + if (u && bracket) { + return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); + } - return result; + return ESCAPES$1.get(c) || c; } -var pairs$1 = new Type$6('tag:yaml.org,2002:pairs', { - kind: 'sequence', - resolve: resolveYamlPairs$1, - construct: constructYamlPairs$1 -}); +function parseArguments$1(name, arguments_) { + const results = []; + const chunks = arguments_.trim().split(/\s*,\s*/g); + let matches; -var Type$5 = type$1; + for (const chunk of chunks) { + const number = Number(chunk); + if (!Number.isNaN(number)) { + results.push(number); + } else if ((matches = chunk.match(STRING_REGEX$1))) { + results.push(matches[2].replace(ESCAPE_REGEX$1, (m, escape, character) => escape ? unescape$1(escape) : character)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } -var _hasOwnProperty$6 = Object.prototype.hasOwnProperty; + return results; +} -function resolveYamlSet$1(data) { - if (data === null) return true; +function parseStyle$1(style) { + STYLE_REGEX$1.lastIndex = 0; - var key, object = data; + const results = []; + let matches; - for (key in object) { - if (_hasOwnProperty$6.call(object, key)) { - if (object[key] !== null) return false; - } - } + while ((matches = STYLE_REGEX$1.exec(style)) !== null) { + const name = matches[1]; - return true; -} + if (matches[2]) { + const args = parseArguments$1(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } -function constructYamlSet$1(data) { - return data !== null ? data : {}; + return results; } -var set$1 = new Type$5('tag:yaml.org,2002:set', { - kind: 'mapping', - resolve: resolveYamlSet$1, - construct: constructYamlSet$1 -}); +function buildStyle$1(chalk, styles) { + const enabled = {}; -var Schema$3 = schema$2; + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } + let current = chalk; + for (const [styleName, styles] of Object.entries(enabled)) { + if (!Array.isArray(styles)) { + continue; + } -var default_safe = new Schema$3({ - include: [ - core$4 - ], - implicit: [ - timestamp$1, - merge$2 - ], - explicit: [ - binary$1, - omap$1, - pairs$1, - set$1 - ] -}); + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } -var Type$4 = type$1; + current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; + } -function resolveJavascriptUndefined() { - return true; + return current; } -function constructJavascriptUndefined() { - /*eslint-disable no-undefined*/ - return undefined; -} +var templates$1 = (chalk, temporary) => { + const styles = []; + const chunks = []; + let chunk = []; -function representJavascriptUndefined() { - return ''; -} + // eslint-disable-next-line max-params + temporary.replace(TEMPLATE_REGEX$1, (m, escapeCharacter, inverse, style, close, character) => { + if (escapeCharacter) { + chunk.push(unescape$1(escapeCharacter)); + } else if (style) { + const string = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? string : buildStyle$1(chalk, styles)(string)); + styles.push({inverse, styles: parseStyle$1(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } -function isUndefined(object) { - return typeof object === 'undefined'; -} + chunks.push(buildStyle$1(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(character); + } + }); -var _undefined = new Type$4('tag:yaml.org,2002:js/undefined', { - kind: 'scalar', - resolve: resolveJavascriptUndefined, - construct: constructJavascriptUndefined, - predicate: isUndefined, - represent: representJavascriptUndefined -}); + chunks.push(chunk.join('')); -var Type$3 = type$1; + if (styles.length > 0) { + const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMessage); + } -function resolveJavascriptRegExp(data) { - if (data === null) return false; - if (data.length === 0) return false; + return chunks.join(''); +}; - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; +const ansiStyles$1 = ansiStyles$2.exports; +const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1; +const { + stringReplaceAll, + stringEncaseCRLFWithFirstIndex +} = util$4; - // if regexp starts with '/' it can have modifiers and must be properly closed - // `/foo/gim` - modifiers tail can be maximum 3 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; +const {isArray: isArray$2} = Array; - if (modifiers.length > 3) return false; - // if expression starts with /, is should be properly terminated - if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; - } +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = [ + 'ansi', + 'ansi', + 'ansi256', + 'ansi16m' +]; - return true; -} +const styles = Object.create(null); -function constructJavascriptRegExp(data) { - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; +const applyOptions = (object, options = {}) => { + if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) { + throw new Error('The `level` option should be an integer from 0 to 3'); + } - // `/foo/gim` - tail can be maximum 4 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - regexp = regexp.slice(1, regexp.length - modifiers.length - 1); - } + // Detect level if not set manually + const colorLevel = stdoutColor ? stdoutColor.level : 0; + object.level = options.level === undefined ? colorLevel : options.level; +}; - return new RegExp(regexp, modifiers); +class ChalkClass { + constructor(options) { + // eslint-disable-next-line no-constructor-return + return chalkFactory(options); + } } -function representJavascriptRegExp(object /*, style*/) { - var result = '/' + object.source + '/'; +const chalkFactory = options => { + const chalk = {}; + applyOptions(chalk, options); - if (object.global) result += 'g'; - if (object.multiline) result += 'm'; - if (object.ignoreCase) result += 'i'; + chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_); - return result; -} + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); -function isRegExp(object) { - return Object.prototype.toString.call(object) === '[object RegExp]'; -} + chalk.template.constructor = () => { + throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.'); + }; -var regexp = new Type$3('tag:yaml.org,2002:js/regexp', { - kind: 'scalar', - resolve: resolveJavascriptRegExp, - construct: constructJavascriptRegExp, - predicate: isRegExp, - represent: representJavascriptRegExp -}); + chalk.template.Instance = ChalkClass; -var esprima; + return chalk.template; +}; -// Browserified version does not have esprima -// -// 1. For node.js just require module as deps -// 2. For browser try to require mudule via external AMD system. -// If not found - try to fallback to window.esprima. If not -// found too - then fail to parse. -// -try { - // workaround to exclude package from browserify list. - var _require = commonjsRequire; - esprima = _require('esprima'); -} catch (_) { - /* eslint-disable no-redeclare */ - /* global window */ - if (typeof window !== 'undefined') esprima = window.esprima; +function Chalk(options) { + return chalkFactory(options); } -var Type$2 = type$1; - -function resolveJavascriptFunction(data) { - if (data === null) return false; - - try { - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }); - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - (ast.body[0].expression.type !== 'ArrowFunctionExpression' && - ast.body[0].expression.type !== 'FunctionExpression')) { - return false; - } - - return true; - } catch (err) { - return false; - } +for (const [styleName, style] of Object.entries(ansiStyles$1)) { + styles[styleName] = { + get() { + const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty); + Object.defineProperty(this, styleName, {value: builder}); + return builder; + } + }; } -function constructJavascriptFunction(data) { - /*jslint evil:true*/ - - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }), - params = [], - body; - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - (ast.body[0].expression.type !== 'ArrowFunctionExpression' && - ast.body[0].expression.type !== 'FunctionExpression')) { - throw new Error('Failed to resolve function'); - } - - ast.body[0].expression.params.forEach(function (param) { - params.push(param.name); - }); - - body = ast.body[0].expression.body.range; +styles.visible = { + get() { + const builder = createBuilder(this, this._styler, true); + Object.defineProperty(this, 'visible', {value: builder}); + return builder; + } +}; - // Esprima's ranges include the first '{' and the last '}' characters on - // function expressions. So cut them out. - if (ast.body[0].expression.body.type === 'BlockStatement') { - /*eslint-disable no-new-func*/ - return new Function(params, source.slice(body[0] + 1, body[1] - 1)); - } - // ES6 arrow functions can omit the BlockStatement. In that case, just return - // the body. - /*eslint-disable no-new-func*/ - return new Function(params, 'return ' + source.slice(body[0], body[1])); -} +const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256']; -function representJavascriptFunction(object /*, style*/) { - return object.toString(); +for (const model of usedModels) { + styles[model] = { + get() { + const {level} = this; + return function (...arguments_) { + const styler = createStyler(ansiStyles$1.color[levelMapping[level]][model](...arguments_), ansiStyles$1.color.close, this._styler); + return createBuilder(this, styler, this._isEmpty); + }; + } + }; } -function isFunction(object) { - return Object.prototype.toString.call(object) === '[object Function]'; +for (const model of usedModels) { + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const {level} = this; + return function (...arguments_) { + const styler = createStyler(ansiStyles$1.bgColor[levelMapping[level]][model](...arguments_), ansiStyles$1.bgColor.close, this._styler); + return createBuilder(this, styler, this._isEmpty); + }; + } + }; } -var _function = new Type$2('tag:yaml.org,2002:js/function', { - kind: 'scalar', - resolve: resolveJavascriptFunction, - construct: constructJavascriptFunction, - predicate: isFunction, - represent: representJavascriptFunction -}); - -var Schema$2 = schema$2; - - -var default_full = Schema$2.DEFAULT = new Schema$2({ - include: [ - default_safe - ], - explicit: [ - _undefined, - regexp, - _function - ] +const proto = Object.defineProperties(() => {}, { + ...styles, + level: { + enumerable: true, + get() { + return this._generator.level; + }, + set(level) { + this._generator.level = level; + } + } }); -/*eslint-disable max-len,no-use-before-define*/ +const createStyler = (open, close, parent) => { + let openAll; + let closeAll; + if (parent === undefined) { + openAll = open; + closeAll = close; + } else { + openAll = parent.openAll + open; + closeAll = close + parent.closeAll; + } -var common$6 = common$b; -var YAMLException$3 = exception$1; -var Mark = mark$1; -var DEFAULT_SAFE_SCHEMA$1 = default_safe; -var DEFAULT_FULL_SCHEMA$1 = default_full; + return { + open, + close, + openAll, + closeAll, + parent + }; +}; +const createBuilder = (self, _styler, _isEmpty) => { + const builder = (...arguments_) => { + if (isArray$2(arguments_[0]) && isArray$2(arguments_[0].raw)) { + // Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}` + return applyStyle(builder, chalkTag(builder, ...arguments_)); + } -var _hasOwnProperty$5 = Object.prototype.hasOwnProperty; + // Single argument is hot path, implicit coercion is faster than anything + // eslint-disable-next-line no-implicit-coercion + return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' ')); + }; + // We alter the prototype because we must return a function, but there is + // no way to create a function with a different prototype + Object.setPrototypeOf(builder, proto); -var CONTEXT_FLOW_IN$1 = 1; -var CONTEXT_FLOW_OUT$1 = 2; -var CONTEXT_BLOCK_IN$1 = 3; -var CONTEXT_BLOCK_OUT$1 = 4; + builder._generator = self; + builder._styler = _styler; + builder._isEmpty = _isEmpty; + return builder; +}; -var CHOMPING_CLIP$1 = 1; -var CHOMPING_STRIP$1 = 2; -var CHOMPING_KEEP$1 = 3; +const applyStyle = (self, string) => { + if (self.level <= 0 || !string) { + return self._isEmpty ? '' : string; + } + let styler = self._styler; -var PATTERN_NON_PRINTABLE$1 = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS$1 = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS$1 = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE$1 = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI$1 = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + if (styler === undefined) { + return string; + } + const {openAll, closeAll} = styler; + if (string.indexOf('\u001B') !== -1) { + while (styler !== undefined) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + string = stringReplaceAll(string, styler.close, styler.open); -function _class$1(obj) { return Object.prototype.toString.call(obj); } - -function is_EOL$1(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); -} - -function is_WHITE_SPACE$1(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); -} - -function is_WS_OR_EOL$1(c) { - return (c === 0x09/* Tab */) || - (c === 0x20/* Space */) || - (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); -} - -function is_FLOW_INDICATOR$1(c) { - return c === 0x2C/* , */ || - c === 0x5B/* [ */ || - c === 0x5D/* ] */ || - c === 0x7B/* { */ || - c === 0x7D/* } */; -} - -function fromHexCode$1(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } + styler = styler.parent; + } + } - /*eslint-disable no-bitwise*/ - lc = c | 0x20; + // We can move both next actions out of loop, because remaining actions in loop won't have + // any/visible effect on parts we add here. Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92 + const lfIndex = string.indexOf('\n'); + if (lfIndex !== -1) { + string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex); + } - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; - } + return openAll + string + closeAll; +}; - return -1; -} +let template; +const chalkTag = (chalk, ...strings) => { + const [firstString] = strings; -function escapedHexLen$1(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; -} + if (!isArray$2(firstString) || !isArray$2(firstString.raw)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return strings.join(' '); + } -function fromDecimalCode$1(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } + const arguments_ = strings.slice(1); + const parts = [firstString.raw[0]]; - return -1; -} + for (let i = 1; i < firstString.length; i++) { + parts.push( + String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'), + String(firstString.raw[i]) + ); + } -function simpleEscapeSequence$1(c) { - /* eslint-disable indent */ - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; -} + if (template === undefined) { + template = templates$1; + } -function charFromCodepoint$1(c) { - if (c <= 0xFFFF) { - return String.fromCharCode(c); - } - // Encode UTF-16 surrogate pair - // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF - return String.fromCharCode( - ((c - 0x010000) >> 10) + 0xD800, - ((c - 0x010000) & 0x03FF) + 0xDC00 - ); -} + return template(chalk, parts.join('')); +}; -var simpleEscapeCheck$1 = new Array(256); // integer, for fast access -var simpleEscapeMap$1 = new Array(256); -for (var i$1 = 0; i$1 < 256; i$1++) { - simpleEscapeCheck$1[i$1] = simpleEscapeSequence$1(i$1) ? 1 : 0; - simpleEscapeMap$1[i$1] = simpleEscapeSequence$1(i$1); -} +Object.defineProperties(Chalk.prototype, styles); +const chalk$1 = Chalk(); // eslint-disable-line new-cap +chalk$1.supportsColor = stdoutColor; +chalk$1.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap +chalk$1.stderr.supportsColor = stderrColor; -function State$3(input, options) { - this.input = input; +var source$1 = chalk$1; - this.filename = options['filename'] || null; - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA$1; - this.onWarning = options['onWarning'] || null; - this.legacy = options['legacy'] || false; - this.json = options['json'] || false; - this.listener = options['listener'] || null; +var chokidar = {}; - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; +var utils$7 = {}; - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; +const path$a = path$b; +const WIN_SLASH = '\\\\/'; +const WIN_NO_SLASH = `[^${WIN_SLASH}]`; - this.documents = []; +/** + * Posix glob regex + */ - /* - this.version; - this.checkLineBreaks; - this.tagMap; - this.anchorMap; - this.tag; - this.anchor; - this.kind; - this.result;*/ +const DOT_LITERAL = '\\.'; +const PLUS_LITERAL = '\\+'; +const QMARK_LITERAL = '\\?'; +const SLASH_LITERAL = '\\/'; +const ONE_CHAR = '(?=.)'; +const QMARK = '[^/]'; +const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; +const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; +const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; +const NO_DOT = `(?!${DOT_LITERAL})`; +const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; +const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; +const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; +const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; +const STAR$1 = `${QMARK}*?`; -} +const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR: STAR$1, + START_ANCHOR +}; +/** + * Windows glob regex + */ -function generateError$1(state, message) { - return new YAMLException$3( - message, - new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); -} +const WINDOWS_CHARS = { + ...POSIX_CHARS, -function throwError$2(state, message) { - throw generateError$1(state, message); -} + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` +}; -function throwWarning$1(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError$1(state, message)); - } -} +/** + * POSIX Bracket Regex + */ +const POSIX_REGEX_SOURCE$1 = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; -var directiveHandlers$1 = { +var constants$5 = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1, - YAML: function handleYamlDirective(state, name, args) { + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, - var match, major, minor; + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, - if (state.version !== null) { - throwError$2(state, 'duplication of %YAML directive'); - } + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ - if (args.length !== 1) { - throwError$2(state, 'YAML directive accepts exactly one argument'); - } + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ - if (match === null) { - throwError$2(state, 'ill-formed argument of the YAML directive'); - } + CHAR_ASTERISK: 42, /* * */ - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ - if (major !== 1) { - throwError$2(state, 'unacceptable YAML version of the document'); - } + SEP: path$a.sep, - state.version = args[0]; - state.checkLineBreaks = (minor < 2); + /** + * Create EXTGLOB_CHARS + */ - if (minor !== 1 && minor !== 2) { - throwWarning$1(state, 'unsupported YAML version of the document'); - } + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; }, - TAG: function handleTagDirective(state, name, args) { - - var handle, prefix; + /** + * Create GLOB_CHARS + */ - if (args.length !== 2) { - throwError$2(state, 'TAG directive accepts exactly two arguments'); - } + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } +}; - handle = args[0]; - prefix = args[1]; +(function (exports) { - if (!PATTERN_TAG_HANDLE$1.test(handle)) { - throwError$2(state, 'ill-formed tag handle (first argument) of the TAG directive'); - } +const path = path$b; +const win32 = process.platform === 'win32'; +const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL +} = constants$5; - if (_hasOwnProperty$5.call(state.tagMap, handle)) { - throwError$2(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } +exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); +exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); +exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); +exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); +exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); - if (!PATTERN_TAG_URI$1.test(prefix)) { - throwError$2(state, 'ill-formed tag prefix (second argument) of the TAG directive'); - } +exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); +}; - state.tagMap[handle] = prefix; +exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; } + return false; }; +exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || path.sep === '\\'; +}; -function captureSegment$1(state, start, end, checkJson) { - var _position, _length, _character, _result; +exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; +}; - if (start < end) { - _result = state.input.slice(start, end); +exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; +}; - if (checkJson) { - for (_position = 0, _length = _result.length; _position < _length; _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError$2(state, 'expected valid JSON character'); - } - } - } else if (PATTERN_NON_PRINTABLE$1.test(_result)) { - throwError$2(state, 'the stream contains non-printable characters'); - } +exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; - state.result += _result; + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; } -} + return output; +}; +}(utils$7)); -function mergeMappings$1(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; +const utils$6 = utils$7; +const { + CHAR_ASTERISK: CHAR_ASTERISK$1, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA: CHAR_COMMA$2, /* , */ + CHAR_DOT: CHAR_DOT$1, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */ + CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */ + CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$2, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */ + CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$2 /* ] */ +} = constants$5; + +const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +}; - if (!common$6.isObject(source)) { - throwError$2(state, 'cannot merge mappings; the provided source object is unacceptable'); +const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; } +}; - sourceKeys = Object.keys(source); +/** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), and `negated` (true if the path starts with `!`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; +const scan$1 = (input, options) => { + const opts = options || {}; - if (!_hasOwnProperty$5.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; -function storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { - var index, quantity; + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; - // The output is a plain object here, so keys can only be strings. - // We need to convert keyNode to a string, but doing so can hang the process - // (deeply nested arrays that explode exponentially using aliases). - if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; - for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { - if (Array.isArray(keyNode[index])) { - throwError$2(state, 'nested arrays are not supported inside keys'); - } + while (index < length) { + code = advance(); + let next; - if (typeof keyNode === 'object' && _class$1(keyNode[index]) === '[object Object]') { - keyNode[index] = '[object Object]'; + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE$1) { + braceEscaped = true; } + continue; } - } - // Avoid code execution in load() via toString property - // (still use its own toString for arrays, timestamps, - // and whatever user schema extensions happen to have @@toStringTag) - if (typeof keyNode === 'object' && _class$1(keyNode) === '[object Object]') { - keyNode = '[object Object]'; - } + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE$1) { + braces++; + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } - keyNode = String(keyNode); + if (code === CHAR_LEFT_CURLY_BRACE$1) { + braces++; + continue; + } - if (_result === null) { - _result = {}; - } - - if (keyTag === 'tag:yaml.org,2002:merge') { - if (Array.isArray(valueNode)) { - for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings$1(state, _result, valueNode[index], overridableKeys); - } - } else { - mergeMappings$1(state, _result, valueNode, overridableKeys); - } - } else { - if (!state.json && - !_hasOwnProperty$5.call(overridableKeys, keyNode) && - _hasOwnProperty$5.call(_result, keyNode)) { - state.line = startLine || state.line; - state.position = startPos || state.position; - throwError$2(state, 'duplicated mapping key'); - } - _result[keyNode] = valueNode; - delete overridableKeys[keyNode]; - } - - return _result; -} - -function readLineBreak$1(state) { - var ch; - - ch = state.input.charCodeAt(state.position); + if (braceEscaped !== true && code === CHAR_DOT$1 && (code = advance()) === CHAR_DOT$1) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; - if (ch === 0x0A/* LF */) { - state.position++; - } else if (ch === 0x0D/* CR */) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; - } - } else { - throwError$2(state, 'a line break is expected'); - } + if (scanToEnd === true) { + continue; + } - state.line += 1; - state.lineStart = state.position; -} + break; + } -function skipSeparationSpace$1(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); + if (braceEscaped !== true && code === CHAR_COMMA$2) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; - while (ch !== 0) { - while (is_WHITE_SPACE$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + if (scanToEnd === true) { + continue; + } - if (allowComments && ch === 0x23/* # */) { - do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); - } + break; + } - if (is_EOL$1(ch)) { - readLineBreak$1(state); + if (code === CHAR_RIGHT_CURLY_BRACE$1) { + braces--; - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } - while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); + if (scanToEnd === true) { + continue; } - } else { + break; } - } - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning$1(state, 'deficient indentation'); - } - - return lineBreaks; -} + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; -function testDocumentSeparator$1(state) { - var _position = state.position, - ch; + if (finished === true) continue; + if (prev === CHAR_DOT$1 && index === (start + 1)) { + start += 2; + continue; + } - ch = state.input.charCodeAt(_position); + lastIndex = index + 1; + continue; + } - // Condition state.position === state.lineStart is tested - // in parent on each call, for efficiency. No needs to test here again. - if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && - ch === state.input.charCodeAt(_position + 1) && - ch === state.input.charCodeAt(_position + 2)) { + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK$1 + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; - _position += 3; + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES$1) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; - ch = state.input.charCodeAt(_position); + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } - if (ch === 0 || is_WS_OR_EOL$1(ch)) { - return true; + if (code === CHAR_RIGHT_PARENTHESES$1) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } } - } - return false; -} - -function writeFoldedLines$1(state, count) { - if (count === 1) { - state.result += ' '; - } else if (count > 1) { - state.result += common$6.repeat('\n', count - 1); - } -} + if (code === CHAR_ASTERISK$1) { + if (prev === CHAR_ASTERISK$1) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } -function readPlainScalar$1(state, nodeIndent, withinFlowCollection) { - var preceding, - following, - captureStart, - captureEnd, - hasPendingContent, - _line, - _lineStart, - _lineIndent, - _kind = state.kind, - _result = state.result, - ch; + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; - ch = state.input.charCodeAt(state.position); + if (scanToEnd === true) { + continue; + } + break; + } - if (is_WS_OR_EOL$1(ch) || - is_FLOW_INDICATOR$1(ch) || - ch === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || - ch === 0x60/* ` */) { - return false; - } + if (code === CHAR_LEFT_SQUARE_BRACKET$2) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } - if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); + if (next === CHAR_RIGHT_SQUARE_BRACKET$2) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; - if (is_WS_OR_EOL$1(following) || - withinFlowCollection && is_FLOW_INDICATOR$1(following)) { - return false; + if (scanToEnd === true) { + continue; + } + break; + } + } } - } - - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; - while (ch !== 0) { - if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } - if (is_WS_OR_EOL$1(following) || - withinFlowCollection && is_FLOW_INDICATOR$1(following)) { - break; - } + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES$1) { + isGlob = token.isGlob = true; - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES$1) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } - if (is_WS_OR_EOL$1(preceding)) { - break; + if (code === CHAR_RIGHT_PARENTHESES$1) { + finished = true; + break; + } + } + continue; } - - } else if ((state.position === state.lineStart && testDocumentSeparator$1(state)) || - withinFlowCollection && is_FLOW_INDICATOR$1(ch)) { break; + } - } else if (is_EOL$1(ch)) { - _line = state.line; - _lineStart = state.lineStart; - _lineIndent = state.lineIndent; - skipSeparationSpace$1(state, false, -1); + if (isGlob === true) { + finished = true; - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); + if (scanToEnd === true) { continue; - } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; } - } - - if (hasPendingContent) { - captureSegment$1(state, captureStart, captureEnd, false); - writeFoldedLines$1(state, state.line - _line); - captureStart = captureEnd = state.position; - hasPendingContent = false; - } - if (!is_WHITE_SPACE$1(ch)) { - captureEnd = state.position + 1; + break; } + } - ch = state.input.charCodeAt(++state.position); + if (opts.noext === true) { + isExtglob = false; + isGlob = false; } - captureSegment$1(state, captureStart, captureEnd, false); + let base = str; + let prefix = ''; + let glob = ''; - if (state.result) { - return true; + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; } - state.kind = _kind; - state.result = _result; - return false; -} + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } -function readSingleQuotedScalar$1(state, nodeIndent) { - var ch, - captureStart, captureEnd; + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } - ch = state.input.charCodeAt(state.position); + if (opts.unescape === true) { + if (glob) glob = utils$6.removeBackslashes(glob); - if (ch !== 0x27/* ' */) { - return false; + if (base && backslashes === true) { + base = utils$6.removeBackslashes(base); + } } - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated + }; - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x27/* ' */) { - captureSegment$1(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } - if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } + if (opts.parts === true || opts.tokens === true) { + let prevIndex; - } else if (is_EOL$1(ch)) { - captureSegment$1(state, captureStart, captureEnd, true); - writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); - captureStart = captureEnd = state.position; + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } - } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { - throwError$2(state, 'unexpected end of the document within a single quoted scalar'); + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); - } else { - state.position++; - captureEnd = state.position; + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } } + + state.slashes = slashes; + state.parts = parts; } - throwError$2(state, 'unexpected end of the stream within a single quoted scalar'); -} + return state; +}; -function readDoubleQuotedScalar$1(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; +var scan_1 = scan$1; - ch = state.input.charCodeAt(state.position); +const constants$4 = constants$5; +const utils$5 = utils$7; - if (ch !== 0x22/* " */) { - return false; +/** + * Constants + */ + +const { + MAX_LENGTH: MAX_LENGTH$4, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS +} = constants$4; + +/** + * Helpers + */ + +const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); } - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; + args.sort(); + const value = `[${args.join('-')}]`; - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x22/* " */) { - captureSegment$1(state, captureStart, state.position, true); - state.position++; - return true; + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils$5.escapeRegex(v)).join('..'); + } - } else if (ch === 0x5C/* \ */) { - captureSegment$1(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); + return value; +}; - if (is_EOL$1(ch)) { - skipSeparationSpace$1(state, false, nodeIndent); +/** + * Create the message for a syntax error + */ - // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck$1[ch]) { - state.result += simpleEscapeMap$1[ch]; - state.position++; +const syntaxError$1 = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; +}; - } else if ((tmp = escapedHexLen$1(ch)) > 0) { - hexLength = tmp; - hexResult = 0; +/** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ - for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); +const parse$e = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } - if ((tmp = fromHexCode$1(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; + input = REPLACEMENTS[input] || input; - } else { - throwError$2(state, 'expected hexadecimal character'); - } - } + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; - state.result += charFromCodepoint$1(hexResult); + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } - state.position++; + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; - } else { - throwError$2(state, 'unknown escape sequence'); - } + const capture = opts.capture ? '' : '?:'; + const win32 = utils$5.isWindows(options); - captureStart = captureEnd = state.position; + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants$4.globChars(win32); + const EXTGLOB_CHARS = constants$4.extglobChars(PLATFORM_CHARS); - } else if (is_EOL$1(ch)) { - captureSegment$1(state, captureStart, captureEnd, true); - writeFoldedLines$1(state, skipSeparationSpace$1(state, false, nodeIndent)); - captureStart = captureEnd = state.position; + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; - } else if (state.position === state.lineStart && testDocumentSeparator$1(state)) { - throwError$2(state, 'unexpected end of the document within a double quoted scalar'); + const globstar = (opts) => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; - } else { - state.position++; - captureEnd = state.position; - } + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; } - throwError$2(state, 'unexpected end of the stream within a double quoted scalar'); -} + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } -function readFlowCollection$1(state, nodeIndent) { - var readNext = true, - _line, - _tag = state.tag, - _result, - _anchor = state.anchor, - following, - terminator, - isPair, - isExplicitPair, - isMapping, - overridableKeys = {}, - keyNode, - keyTag, - valueNode, - ch; + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; - ch = state.input.charCodeAt(state.position); + input = utils$5.removePrefix(input, state); + len = input.length; - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } + /** + * Tokenizing helpers + */ - ch = state.input.charCodeAt(++state.position); + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index]; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; - while (ch !== 0) { - skipSeparationSpace$1(state, true, nodeIndent); + const negate = () => { + let count = 1; - ch = state.input.charCodeAt(state.position); + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } - if (ch === terminator) { - state.position++; - state.tag = _tag; - state.anchor = _anchor; - state.kind = isMapping ? 'mapping' : 'sequence'; - state.result = _result; - return true; - } else if (!readNext) { - throwError$2(state, 'missed comma between flow collection entries'); + if (count % 2 === 0) { + return false; } - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; + state.negated = true; + state.start++; + return true; + }; - if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); + const increment = type => { + state[type]++; + stack.push(type); + }; - if (is_WS_OR_EOL$1(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace$1(state, true, nodeIndent); - } - } + const decrement = type => { + state[type]--; + stack.pop(); + }; - _line = state.line; - composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); - keyTag = state.tag; - keyNode = state.result; - skipSeparationSpace$1(state, true, nodeIndent); + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ - ch = state.input.charCodeAt(state.position); + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); - if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace$1(state, true, nodeIndent); - composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true); - valueNode = state.result; + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } } - if (isMapping) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode); - } else if (isPair) { - _result.push(storeMappingPair$1(state, null, overridableKeys, keyTag, keyNode, valueNode)); - } else { - _result.push(keyNode); + if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) { + extglobs[extglobs.length - 1].inner += tok.value; } - skipSeparationSpace$1(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; } - } - throwError$2(state, 'unexpected end of the stream within a flow collection'); -} + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; -function readBlockScalar$1(state, nodeIndent) { - var captureStart, - folding, - chomping = CHOMPING_CLIP$1, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false, - tmp, - ch; + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; - ch = state.input.charCodeAt(state.position); + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; - if (ch === 0x7C/* | */) { - folding = false; - } else if (ch === 0x3E/* > */) { - folding = true; - } else { - return false; - } + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; - state.kind = 'scalar'; - state.result = ''; + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); - while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); + if (token.type === 'negate') { + let extglobStar = star; - if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP$1 === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP$1 : CHOMPING_STRIP$1; - } else { - throwError$2(state, 'repeat of a chomping mode identifier'); + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); } - } else if ((tmp = fromDecimalCode$1(ch)) >= 0) { - if (tmp === 0) { - throwError$2(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError$2(state, 'repeat of an indentation width identifier'); + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; } - } else { - break; + if (token.prev.type === 'bos' && eos()) { + state.negatedExtglob = true; + } } - } - if (is_WHITE_SPACE$1(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE$1(ch)); + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL$1(ch) && (ch !== 0)); - } - } + /** + * Fast paths + */ - while (ch !== 0) { - readLineBreak$1(state); - state.lineIndent = 0; + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; - ch = state.input.charCodeAt(state.position); + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } - while ((!detectedIndent || state.lineIndent < textIndent) && - (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } } - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; + if (output === input && opts.contains === true) { + state.output = input; + return state; } - if (is_EOL$1(ch)) { - emptyLines++; + state.output = utils$5.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { continue; } - // End of the scalar. - if (state.lineIndent < textIndent) { + /** + * Escaped characters + */ - // Perform the chomping. - if (chomping === CHOMPING_KEEP$1) { - state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP$1) { - if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; - } - } + if (value === '\\') { + const next = peek(); - // Break this `while` cycle and go to the funciton's epilogue. - break; - } + if (next === '/' && opts.bash !== true) { + continue; + } - // Folded style: use fancy rules to handle line breaks. - if (folding) { + if (next === '.' || next === ';') { + continue; + } - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE$1(ch)) { - atMoreIndented = true; - // except for the first content line (cf. Example 8.1) - state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } - // End of more-indented block. - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common$6.repeat('\n', emptyLines + 1); + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; - // Just one line break - perceive as the same line. - } else if (emptyLines === 0) { - if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; } + } - // Several line breaks - perceive as different lines. + if (opts.unescape === true) { + value = advance() || ''; } else { - state.result += common$6.repeat('\n', emptyLines); + value += advance() || ''; } - // Literal style: just add exact number of line breaks between content lines. - } else { - // Keep all line breaks except the header line break. - state.result += common$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } } - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; - - while (!is_EOL$1(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); - } + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ - captureSegment$1(state, captureStart, state.position, false); - } + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; - return true; -} + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); -function readBlockSequence$1(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } - ch = state.input.charCodeAt(state.position); + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } - while (ch !== 0) { + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } - if (ch !== 0x2D/* - */) { - break; + prev.value += value; + append({ value }); + continue; } - following = state.input.charCodeAt(state.position + 1); + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ - if (!is_WS_OR_EOL$1(following)) { - break; + if (state.quotes === 1 && value !== '"') { + value = utils$5.escapeRegex(value); + prev.value += value; + append({ value }); + continue; } - detected = true; - state.position++; + /** + * Double quotes + */ - if (skipSeparationSpace$1(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); } + continue; } - _line = state.line; - composeNode$1(state, nodeIndent, CONTEXT_BLOCK_IN$1, false, true); - _result.push(state.result); - skipSeparationSpace$1(state, true, -1); - - ch = state.input.charCodeAt(state.position); + /** + * Parentheses + */ - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError$2(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; } - } - - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; - } - return false; -} -function readBlockMapping$1(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _pos, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = {}, - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError$1('opening', '(')); + } - ch = state.input.charCodeAt(state.position); + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } - while (ch !== 0) { - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. - _pos = state.position; + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL$1(following)) { + /** + * Square brackets + */ - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError$1('closing', ']')); } - detected = true; - atExplicitKey = true; - allowCompact = true; - - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - + value = `\\${value}`; } else { - throwError$2(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + increment('brackets'); } - state.position += 1; - ch = following; - - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else if (composeNode$1(state, flowIndent, CONTEXT_FLOW_OUT$1, false, true)) { + push({ type: 'bracket', value }); + continue; + } - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } - while (is_WHITE_SPACE$1(ch)) { - ch = state.input.charCodeAt(++state.position); + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError$1('opening', '[')); } - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); - - if (!is_WS_OR_EOL$1(ch)) { - throwError$2(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } - - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - - } else if (detected) { - throwError$2(state, 'can not read an implicit mapping pair; a colon is missed'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } + push({ type: 'text', value, output: `\\${value}` }); + continue; + } - } else if (detected) { - throwError$2(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + decrement('brackets'); - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; } - } else { - break; // Reading is done. Go to the epilogue. - } + prev.value += value; + append({ value }); - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (composeNode$1(state, nodeIndent, CONTEXT_BLOCK_OUT$1, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils$5.hasRegexChars(prevValue)) { + continue; } - if (!atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); - keyTag = keyNode = valueNode = null; - } + const escaped = utils$5.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); - skipSeparationSpace$1(state, true, -1); - ch = state.input.charCodeAt(state.position); - } + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } - if (state.lineIndent > nodeIndent && (ch !== 0)) { - throwError$2(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; } - } - - // - // Epilogue. - // - - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null); - } - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; - } - - return detected; -} - -function readTagProperty$1(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x21/* ! */) return false; - - if (state.tag !== null) { - throwError$2(state, 'duplication of a tag property'); - } - - ch = state.input.charCodeAt(++state.position); + /** + * Braces + */ - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); + if (value === '{' && opts.nobrace !== true) { + increment('braces'); - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; - } else { - tagHandle = '!'; - } + braces.push(open); + push(open); + continue; + } - _position = state.position; + if (value === '}') { + const brace = braces[braces.length - 1]; - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError$2(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { + let output = ')'; - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; - if (!PATTERN_TAG_HANDLE$1.test(tagHandle)) { - throwError$2(state, 'named tag handle cannot contain such characters'); + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); } + } - isNamed = true; - _position = state.position + 1; - } else { - throwError$2(state, 'tag suffix cannot contain exclamation marks'); + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); } } - ch = state.input.charCodeAt(++state.position); + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; } - tagName = state.input.slice(_position, state.position); + /** + * Pipes + */ - if (PATTERN_FLOW_INDICATORS$1.test(tagName)) { - throwError$2(state, 'tag suffix cannot contain flow indicator characters'); + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; } - } - - if (tagName && !PATTERN_TAG_URI$1.test(tagName)) { - throwError$2(state, 'tag name cannot contain such characters: ' + tagName); - } - if (isVerbatim) { - state.tag = tagName; + /** + * Commas + */ - } else if (_hasOwnProperty$5.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; + if (value === ',') { + let output = value; - } else if (tagHandle === '!') { - state.tag = '!' + tagName; + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; + push({ type: 'comma', value, output }); + continue; + } - } else { - throwError$2(state, 'undeclared tag handle "' + tagHandle + '"'); - } + /** + * Slashes + */ - return true; -} + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } -function readAnchorProperty$1(state) { - var _position, - ch; + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } - ch = state.input.charCodeAt(state.position); + /** + * Dots + */ - if (ch !== 0x26/* & */) return false; + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } - if (state.anchor !== null) { - throwError$2(state, 'duplication of an anchor property'); - } + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } - ch = state.input.charCodeAt(++state.position); - _position = state.position; + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } - while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + /** + * Question marks + */ - if (state.position === _position) { - throwError$2(state, 'name of an anchor node must contain at least one character'); - } + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } - state.anchor = state.input.slice(_position, state.position); - return true; -} + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; -function readAlias$1(state) { - var _position, alias, - ch; + if (next === '<' && !utils$5.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } - ch = state.input.charCodeAt(state.position); + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } - if (ch !== 0x2A/* * */) return false; + push({ type: 'text', value, output }); + continue; + } - ch = state.input.charCodeAt(++state.position); - _position = state.position; + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } - while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + push({ type: 'qmark', value, output: QMARK }); + continue; + } - if (state.position === _position) { - throwError$2(state, 'name of an alias node must contain at least one character'); - } + /** + * Exclamation + */ - alias = state.input.slice(_position, state.position); + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } - if (!_hasOwnProperty$5.call(state.anchorMap, alias)) { - throwError$2(state, 'unidentified alias "' + alias + '"'); - } + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } - state.result = state.anchorMap[alias]; - skipSeparationSpace$1(state, true, -1); - return true; -} + /** + * Plus + */ -function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this 0) { + push({ type: 'plus', value }); + continue; + } - allowBlockStyles = allowBlockScalars = allowBlockCollections = - CONTEXT_BLOCK_OUT$1 === nodeContext || - CONTEXT_BLOCK_IN$1 === nodeContext; + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } - if (allowToSeek) { - if (skipSeparationSpace$1(state, true, -1)) { - atNewLine = true; + /** + * Plain text + */ - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; } + + push({ type: 'text', value }); + continue; } - } - if (indentStatus === 1) { - while (readTagProperty$1(state) || readAnchorProperty$1(state)) { - if (skipSeparationSpace$1(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; + /** + * Plain text + */ - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; } - } - } - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } - if (indentStatus === 1 || CONTEXT_BLOCK_OUT$1 === nodeContext) { - if (CONTEXT_FLOW_IN$1 === nodeContext || CONTEXT_FLOW_OUT$1 === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; + push({ type: 'text', value }); + continue; } - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence$1(state, blockIndent) || - readBlockMapping$1(state, blockIndent, flowIndent)) || - readFlowCollection$1(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar$1(state, flowIndent)) || - readSingleQuotedScalar$1(state, flowIndent) || - readDoubleQuotedScalar$1(state, flowIndent)) { - hasContent = true; + /** + * Stars + */ - } else if (readAlias$1(state)) { - hasContent = true; + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } - if (state.tag !== null || state.anchor !== null) { - throwError$2(state, 'alias node should not have any properties'); - } + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } - } else if (readPlainScalar$1(state, flowIndent, CONTEXT_FLOW_IN$1 === nodeContext)) { - hasContent = true; + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } - if (state.tag === null) { - state.tag = '?'; - } - } + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence$1(state, blockIndent); - } - } - if (state.tag !== null && state.tag !== '!') { - if (state.tag === '?') { - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only automatically assigned to plain scalars. - // - // We only need to check kind conformity in case user explicitly assigns '?' - // tag, for example like this: "! [0]" - // - if (state.result !== null && state.kind !== 'scalar') { - throwError$2(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; } - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { break; } - } - } else if (_hasOwnProperty$5.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - - if (state.result !== null && type.kind !== state.kind) { - throwError$2(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + rest = rest.slice(3); + consume('/**', 3); } - if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched - throwError$2(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; } - } else { - throwError$2(state, 'unknown tag !<' + state.tag + '>'); - } - } - - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} - -function readDocument$1(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; - - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = {}; - state.anchorMap = {}; - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace$1(state, true, -1); + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; - ch = state.input.charCodeAt(state.position); + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; + state.output += prior.output + prev.output; + state.globstar = true; - if (directiveName.length < 1) { - throwError$2(state, 'directive name must not be less than one character in length'); - } + consume(value + advance()); - while (ch !== 0) { - while (is_WHITE_SPACE$1(ch)) { - ch = state.input.charCodeAt(++state.position); + push({ type: 'slash', value: '/', output: '' }); + continue; } - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL$1(ch)); - break; + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; } - if (is_EOL$1(ch)) break; - - _position = state.position; + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); - while (ch !== 0 && !is_WS_OR_EOL$1(ch)) { - ch = state.input.charCodeAt(++state.position); - } + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; - directiveArgs.push(state.input.slice(_position, state.position)); + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; } - if (ch !== 0) readLineBreak$1(state); + const token = { type: 'star', value, output: star }; - if (_hasOwnProperty$5.call(directiveHandlers$1, directiveName)) { - directiveHandlers$1[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning$1(state, 'unknown document directive "' + directiveName + '"'); + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; } - } - - skipSeparationSpace$1(state, true, -1); - - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace$1(state, true, -1); - - } else if (hasDirectives) { - throwError$2(state, 'directives end mark is expected'); - } - - composeNode$1(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT$1, false, true); - skipSeparationSpace$1(state, true, -1); - - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS$1.test(state.input.slice(documentStart, state.position))) { - throwWarning$1(state, 'non-ASCII line breaks are interpreted as content'); - } - - state.documents.push(state.result); - - if (state.position === state.lineStart && testDocumentSeparator$1(state)) { - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace$1(state, true, -1); + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; } - return; - } - - if (state.position < (state.length - 1)) { - throwError$2(state, 'end of the stream or a document separator is expected'); - } else { - return; - } -} + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; -function loadDocuments$1(input, options) { - input = String(input); - options = options || {}; + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; - if (input.length !== 0) { + } else { + state.output += nodot; + prev.output += nodot; + } - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } } - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); - } + push(token); } - var state = new State$3(input, options); - - var nullpos = input.indexOf('\0'); - - if (nullpos !== -1) { - state.position = nullpos; - throwError$2(state, 'null byte is not allowed in input'); + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ']')); + state.output = utils$5.escapeLast(state.output, '['); + decrement('brackets'); } - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ')')); + state.output = utils$5.escapeLast(state.output, '('); + decrement('parens'); + } - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', '}')); + state.output = utils$5.escapeLast(state.output, '{'); + decrement('braces'); } - while (state.position < (state.length - 1)) { - readDocument$1(state); + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); } - return state.documents; -} + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; -function loadAll$2(input, iterator, options) { - if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { - options = iterator; - iterator = null; + if (token.suffix) { + state.output += token.suffix; + } + } } - var documents = loadDocuments$1(input, options); + return state; +}; - if (typeof iterator !== 'function') { - return documents; - } +/** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ - for (var index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); +parse$e.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); } -} - -function load$5(input, options) { - var documents = loadDocuments$1(input, options); + input = REPLACEMENTS[input] || input; + const win32 = utils$5.isWindows(options); - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new YAMLException$3('expected a single document in the stream, but found more'); -} + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants$4.globChars(win32); + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; -function safeLoadAll$1(input, iterator, options) { - if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { - options = iterator; - iterator = null; + if (opts.capture) { + star = `(${star})`; } - return loadAll$2(input, iterator, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options)); -} - + const globstar = (opts) => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; -function safeLoad$1(input, options) { - return load$5(input, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options)); -} + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; -loader$2.loadAll = loadAll$2; -loader$2.load = load$5; -loader$2.safeLoadAll = safeLoadAll$1; -loader$2.safeLoad = safeLoad$1; + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; -var dumper$2 = {}; + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; -/*eslint-disable no-use-before-define*/ + case '**': + return nodot + globstar(opts); -var common$5 = common$b; -var YAMLException$2 = exception$1; -var DEFAULT_FULL_SCHEMA = default_full; -var DEFAULT_SAFE_SCHEMA = default_safe; - -var _toString$3 = Object.prototype.toString; -var _hasOwnProperty$4 = Object.prototype.hasOwnProperty; - -var CHAR_TAB$1 = 0x09; /* Tab */ -var CHAR_LINE_FEED$1 = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN$1 = 0x0D; /* CR */ -var CHAR_SPACE$1 = 0x20; /* Space */ -var CHAR_EXCLAMATION$1 = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE$2 = 0x22; /* " */ -var CHAR_SHARP$1 = 0x23; /* # */ -var CHAR_PERCENT$1 = 0x25; /* % */ -var CHAR_AMPERSAND$1 = 0x26; /* & */ -var CHAR_SINGLE_QUOTE$2 = 0x27; /* ' */ -var CHAR_ASTERISK$2 = 0x2A; /* * */ -var CHAR_COMMA$3 = 0x2C; /* , */ -var CHAR_MINUS$1 = 0x2D; /* - */ -var CHAR_COLON$1 = 0x3A; /* : */ -var CHAR_EQUALS$1 = 0x3D; /* = */ -var CHAR_GREATER_THAN$1 = 0x3E; /* > */ -var CHAR_QUESTION$1 = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT$1 = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET$3 = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET$3 = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT$1 = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET$1 = 0x7B; /* { */ -var CHAR_VERTICAL_LINE$1 = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET$1 = 0x7D; /* } */ - -var ESCAPE_SEQUENCES$1 = {}; - -ESCAPE_SEQUENCES$1[0x00] = '\\0'; -ESCAPE_SEQUENCES$1[0x07] = '\\a'; -ESCAPE_SEQUENCES$1[0x08] = '\\b'; -ESCAPE_SEQUENCES$1[0x09] = '\\t'; -ESCAPE_SEQUENCES$1[0x0A] = '\\n'; -ESCAPE_SEQUENCES$1[0x0B] = '\\v'; -ESCAPE_SEQUENCES$1[0x0C] = '\\f'; -ESCAPE_SEQUENCES$1[0x0D] = '\\r'; -ESCAPE_SEQUENCES$1[0x1B] = '\\e'; -ESCAPE_SEQUENCES$1[0x22] = '\\"'; -ESCAPE_SEQUENCES$1[0x5C] = '\\\\'; -ESCAPE_SEQUENCES$1[0x85] = '\\N'; -ESCAPE_SEQUENCES$1[0xA0] = '\\_'; -ESCAPE_SEQUENCES$1[0x2028] = '\\L'; -ESCAPE_SEQUENCES$1[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX$1 = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; -function compileStyleMap$1(schema, map) { - var result, keys, index, length, tag, style, type; + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; - if (map === null) return {}; + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; - result = {}; - keys = Object.keys(map); + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); + const source = create(match[1]); + if (!source) return; - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); + return source + DOT_LITERAL + match[2]; + } } - type = schema.compiledTypeMap['fallback'][tag]; + }; - if (type && _hasOwnProperty$4.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } + const output = utils$5.removePrefix(input, state); + let source = create(output); - result[tag] = style; + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; } - return result; -} + return source; +}; -function encodeHex$1(character) { - var string, handle, length; +var parse_1$2 = parse$e; - string = character.toString(16).toUpperCase(); +const path$9 = path$b; +const scan = scan_1; +const parse$d = parse_1$2; +const utils$4 = utils$7; +const constants$3 = constants$5; +const isObject$3 = val => val && typeof val === 'object' && !Array.isArray(val); - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; - } else { - throw new YAMLException$2('code point within a string may not be greater than 0xFFFFFFFF'); +/** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + +const picomatch$3 = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch$3(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; } - return '\\' + handle + common$5.repeat('0', length - string.length) + string; -} + const isState = isObject$3(glob) && glob.tokens && glob.input; -function State$2(options) { - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.indent = Math.max(1, (options['indent'] || 2)); - this.noArrayIndent = options['noArrayIndent'] || false; - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common$5.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap$1(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - this.condenseFlow = options['condenseFlow'] || false; + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; + const opts = options || {}; + const posix = utils$4.isWindows(options); + const regex = isState + ? picomatch$3.compileRe(glob, options) + : picomatch$3.makeRe(glob, options, false, true); - this.tag = null; - this.result = ''; + const state = regex.state; + delete regex.state; - this.duplicates = []; - this.usedDuplicates = null; -} + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch$3(opts.ignore, ignoreOpts, returnState); + } -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString$1(string, spaces) { - var ind = common$5.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch$3.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; - } else { - line = string.slice(position, next + 1); - position = next + 1; + if (typeof opts.onResult === 'function') { + opts.onResult(result); } - if (line.length && line !== '\n') result += ind; + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } - result += line; - } + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } - return result; -} + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; -function generateNextLine$1(state, level) { - return '\n' + common$5.repeat(' ', state.indent * level); -} + if (returnState) { + matcher.state = state; + } -function testImplicitResolving$1(state, str) { - var index, length, type; + return matcher; +}; - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; +/** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ - if (type.resolve(str)) { - return true; - } +picomatch$3.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); } - return false; -} - -// [33] s-white ::= s-space | s-tab -function isWhitespace$1(c) { - return c === CHAR_SPACE$1 || c === CHAR_TAB$1; -} + if (input === '') { + return { isMatch: false, output: '' }; + } -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable$1(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) - || (0x10000 <= c && c <= 0x10FFFF); -} + const opts = options || {}; + const format = opts.format || (posix ? utils$4.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; -// [34] ns-char ::= nb-char - s-white -// [27] nb-char ::= c-printable - b-char - c-byte-order-mark -// [26] b-char ::= b-line-feed | b-carriage-return -// [24] b-line-feed ::= #xA /* LF */ -// [25] b-carriage-return ::= #xD /* CR */ -// [3] c-byte-order-mark ::= #xFEFF -function isNsChar(c) { - return isPrintable$1(c) && !isWhitespace$1(c) - // byte-order-mark - && c !== 0xFEFF - // b-char - && c !== CHAR_CARRIAGE_RETURN$1 - && c !== CHAR_LINE_FEED$1; -} - -// Simplified test for values allowed after the first character in plain style. -function isPlainSafe$1(c, prev) { - // Uses a subset of nb-char - c-flow-indicator - ":" - "#" - // where nb-char ::= c-printable - b-char - c-byte-order-mark. - return isPrintable$1(c) && c !== 0xFEFF - // - c-flow-indicator - && c !== CHAR_COMMA$3 - && c !== CHAR_LEFT_SQUARE_BRACKET$3 - && c !== CHAR_RIGHT_SQUARE_BRACKET$3 - && c !== CHAR_LEFT_CURLY_BRACKET$1 - && c !== CHAR_RIGHT_CURLY_BRACKET$1 - // - ":" - "#" - // /* An ns-char preceding */ "#" - && c !== CHAR_COLON$1 - && ((c !== CHAR_SHARP$1) || (prev && isNsChar(prev))); -} + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst$1(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - return isPrintable$1(c) && c !== 0xFEFF - && !isWhitespace$1(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS$1 - && c !== CHAR_QUESTION$1 - && c !== CHAR_COLON$1 - && c !== CHAR_COMMA$3 - && c !== CHAR_LEFT_SQUARE_BRACKET$3 - && c !== CHAR_RIGHT_SQUARE_BRACKET$3 - && c !== CHAR_LEFT_CURLY_BRACKET$1 - && c !== CHAR_RIGHT_CURLY_BRACKET$1 - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP$1 - && c !== CHAR_AMPERSAND$1 - && c !== CHAR_ASTERISK$2 - && c !== CHAR_EXCLAMATION$1 - && c !== CHAR_VERTICAL_LINE$1 - && c !== CHAR_EQUALS$1 - && c !== CHAR_GREATER_THAN$1 - && c !== CHAR_SINGLE_QUOTE$2 - && c !== CHAR_DOUBLE_QUOTE$2 - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT$1 - && c !== CHAR_COMMERCIAL_AT$1 - && c !== CHAR_GRAVE_ACCENT$1; -} + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch$3.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } -// Determines whether block indentation indicator is required. -function needIndentIndicator$1(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); -} + return { isMatch: Boolean(match), match, output }; +}; -var STYLE_PLAIN$1 = 1, - STYLE_SINGLE$1 = 2, - STYLE_LITERAL$1 = 3, - STYLE_FOLDED$1 = 4, - STYLE_DOUBLE$1 = 5; - -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { - var i; - var char, prev_char; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst$1(string.charCodeAt(0)) - && !isWhitespace$1(string.charCodeAt(string.length - 1)); - - if (singleLineOnly) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (!isPrintable$1(char)) { - return STYLE_DOUBLE$1; - } - prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe$1(char, prev_char); - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (char === CHAR_LINE_FEED$1) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable$1(char)) { - return STYLE_DOUBLE$1; - } - prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe$1(char, prev_char); - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - return plain && !testAmbiguousType(string) - ? STYLE_PLAIN$1 : STYLE_SINGLE$1; - } - // Edge case: block indentation indicator can only have one digit. - if (indentPerLevel > 9 && needIndentIndicator$1(string)) { - return STYLE_DOUBLE$1; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - return hasFoldableLine ? STYLE_FOLDED$1 : STYLE_LITERAL$1; -} - -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar$1(state, string, level, iskey) { - state.dump = (function () { - if (string.length === 0) { - return "''"; - } - if (!state.noCompatMode && - DEPRECATED_BOOLEANS_SYNTAX$1.indexOf(string) !== -1) { - return "'" + string + "'"; - } - - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); +/** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving$1(state, string); - } +picomatch$3.matchBase = (input, glob, options, posix = utils$4.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch$3.makeRe(glob, options); + return regex.test(path$9.basename(input)); +}; - switch (chooseScalarStyle$1(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { - case STYLE_PLAIN$1: - return string; - case STYLE_SINGLE$1: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL$1: - return '|' + blockHeader$1(string, state.indent) - + dropEndingNewline$1(indentString$1(string, indent)); - case STYLE_FOLDED$1: - return '>' + blockHeader$1(string, state.indent) - + dropEndingNewline$1(indentString$1(foldString$1(string, lineWidth), indent)); - case STYLE_DOUBLE$1: - return '"' + escapeString$1(string) + '"'; - default: - throw new YAMLException$2('impossible error: invalid scalar style'); - } - }()); -} +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader$1(string, indentPerLevel) { - var indentIndicator = needIndentIndicator$1(string) ? String(indentPerLevel) : ''; +picomatch$3.isMatch = (str, patterns, options) => picomatch$3(patterns, options)(str); - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ - return indentIndicator + chomp + '\n'; -} +picomatch$3.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch$3.parse(p, options)); + return parse$d(pattern, { ...options, fastpaths: false }); +}; -// (See the note for writeScalar.) -function dropEndingNewline$1(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; -} +/** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString$1(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; +picomatch$3.scan = (input, options) => scan(input, options); - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine$1(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; +/** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine$1(line, width); - prevMoreIndented = moreIndented; +picomatch$3.compileRe = (parsed, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return parsed.output; } - return result; -} - -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine$1(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; + let source = `${prepend}(?:${parsed.output})${append}`; + if (parsed && parsed.negated === true) { + source = `^(?!${source}).*$`; } - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); + const regex = picomatch$3.toRegex(source, options); + if (returnState === true) { + regex.state = parsed; } - return result.slice(1); // drop extra \n joiner -} - -// Escapes a double-quoted string. -function escapeString$1(string) { - var result = ''; - var char, nextChar; - var escapeSeq; + return regex; +}; - for (var i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). - if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { - nextChar = string.charCodeAt(i + 1); - if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { - // Combine the surrogate pair and store it escaped. - result += encodeHex$1((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); - // Advance index one extra since we already used that char here. - i++; continue; - } - } - escapeSeq = ESCAPE_SEQUENCES$1[char]; - result += !escapeSeq && isPrintable$1(char) - ? string[i] - : escapeSeq || encodeHex$1(char); +picomatch$3.makeRe = (input, options, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); } - return result; -} - -function writeFlowSequence$1(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length; + const opts = options || {}; + let parsed = { negated: false, fastpaths: true }; + let prefix = ''; + let output; - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode$1(state, level, object[index], false, false)) { - if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); - _result += state.dump; - } + if (input.startsWith('./')) { + input = input.slice(2); + prefix = parsed.prefix = './'; } - state.tag = _tag; - state.dump = '[' + _result + ']'; -} - -function writeBlockSequence$1(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode$1(state, level + 1, object[index], true, true)) { - if (!compact || index !== 0) { - _result += generateNextLine$1(state, level); - } - - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - _result += '-'; - } else { - _result += '- '; - } + if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + output = parse$d.fastpaths(input, options); + } - _result += state.dump; - } + if (output === undefined) { + parsed = parse$d(input, options); + parsed.prefix = prefix + (parsed.prefix || ''); + } else { + parsed.output = output; } - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. -} + return picomatch$3.compileRe(parsed, options, returnOutput, returnState); +}; -function writeFlowMapping$1(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; +/** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ - for (index = 0, length = objectKeyList.length; index < length; index += 1) { +picomatch$3.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } +}; - pairBuffer = ''; - if (index !== 0) pairBuffer += ', '; +/** + * Picomatch constants. + * @return {Object} + */ - if (state.condenseFlow) pairBuffer += '"'; +picomatch$3.constants = constants$3; - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; +/** + * Expose "picomatch" + */ - if (!writeNode$1(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } +var picomatch_1 = picomatch$3; - if (state.dump.length > 1024) pairBuffer += '? '; +var picomatch$2 = picomatch_1; - pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); +const fs$9 = require$$0$3; +const { Readable } = require$$1; +const sysPath$3 = path$b; +const { promisify: promisify$3 } = require$$0$4; +const picomatch$1 = picomatch$2; - if (!writeNode$1(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. - } +const readdir$1 = promisify$3(fs$9.readdir); +const stat$3 = promisify$3(fs$9.stat); +const lstat$2 = promisify$3(fs$9.lstat); +const realpath$2 = promisify$3(fs$9.realpath); - pairBuffer += state.dump; +/** + * @typedef {Object} EntryInfo + * @property {String} path + * @property {String} fullPath + * @property {fs.Stats=} stats + * @property {fs.Dirent=} dirent + * @property {String} basename + */ - // Both key and value are valid. - _result += pairBuffer; - } +const BANG$2 = '!'; +const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); +const FILE_TYPE = 'files'; +const DIR_TYPE = 'directories'; +const FILE_DIR_TYPE = 'files_directories'; +const EVERYTHING_TYPE = 'all'; +const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; - state.tag = _tag; - state.dump = '{' + _result + '}'; -} +const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); +const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); +const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); -function writeBlockMapping$1(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; +const normalizeFilter = filter => { + if (filter === undefined) return; + if (typeof filter === 'function') return filter; - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new YAMLException$2('sortKeys must be a boolean or a function'); + if (typeof filter === 'string') { + const glob = picomatch$1(filter.trim()); + return entry => glob(entry.basename); } - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (!compact || index !== 0) { - pairBuffer += generateNextLine$1(state, level); - } - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode$1(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. + if (Array.isArray(filter)) { + const positive = []; + const negative = []; + for (const item of filter) { + const trimmed = item.trim(); + if (trimmed.charAt(0) === BANG$2) { + negative.push(picomatch$1(trimmed.slice(1))); + } else { + positive.push(picomatch$1(trimmed)); + } } - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); - - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; + if (negative.length > 0) { + if (positive.length > 0) { + return entry => + positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); } + return entry => !negative.some(f => f(entry.basename)); } + return entry => positive.some(f => f(entry.basename)); + } +}; - pairBuffer += state.dump; +class ReaddirpStream extends Readable { + static get defaultOptions() { + return { + root: '.', + /* eslint-disable no-unused-vars */ + fileFilter: (path) => true, + directoryFilter: (path) => true, + /* eslint-enable no-unused-vars */ + type: FILE_TYPE, + lstat: false, + depth: 2147483648, + alwaysStat: false + }; + } - if (explicitPair) { - pairBuffer += generateNextLine$1(state, level); - } + constructor(options = {}) { + super({ + objectMode: true, + autoDestroy: true, + highWaterMark: options.highWaterMark || 4096 + }); + const opts = { ...ReaddirpStream.defaultOptions, ...options }; + const { root, type } = opts; - if (!writeNode$1(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } + this._fileFilter = normalizeFilter(opts.fileFilter); + this._directoryFilter = normalizeFilter(opts.directoryFilter); - if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) { - pairBuffer += ':'; + const statMethod = opts.lstat ? lstat$2 : stat$3; + // Use bigint stats if it's windows and stat() supports options (node 10+). + if (wantBigintFsStats) { + this._stat = path => statMethod(path, { bigint: true }); } else { - pairBuffer += ': '; + this._stat = statMethod; } - pairBuffer += state.dump; + this._maxDepth = opts.depth; + this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsEverything = type === EVERYTHING_TYPE; + this._root = sysPath$3.resolve(root); + this._isDirent = ('Dirent' in fs$9) && !opts.alwaysStat; + this._statsProp = this._isDirent ? 'dirent' : 'stats'; + this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; - // Both key and value are valid. - _result += pairBuffer; + // Launch stream with one parent, the root dir. + this.parents = [this._exploreDir(root, 1)]; + this.reading = false; + this.parent = undefined; } - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} - -function detectType$1(state, object, explicit) { - var _result, typeList, index, length, type, style; + async _read(batch) { + if (this.reading) return; + this.reading = true; - typeList = explicit ? state.explicitTypes : state.implicitTypes; + try { + while (!this.destroyed && batch > 0) { + const { path, depth, files = [] } = this.parent || {}; - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; + if (files.length > 0) { + const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); + for (const entry of await Promise.all(slice)) { + if (this.destroyed) return; - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - - state.tag = explicit ? type.tag : '?'; - - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; + const entryType = await this._getEntryType(entry); + if (entryType === 'directory' && this._directoryFilter(entry)) { + if (depth <= this._maxDepth) { + this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); + } - if (_toString$3.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty$4.call(type.represent, style)) { - _result = type.represent[style](object, style); + if (this._wantsDir) { + this.push(entry); + batch--; + } + } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { + if (this._wantsFile) { + this.push(entry); + batch--; + } + } + } } else { - throw new YAMLException$2('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + const parent = this.parents.pop(); + if (!parent) { + this.push(null); + break; + } + this.parent = await parent; + if (this.destroyed) return; } - - state.dump = _result; } - - return true; + } catch (error) { + this.destroy(error); + } finally { + this.reading = false; } } - return false; -} - -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode$1(state, level, object, block, compact, iskey) { - state.tag = null; - state.dump = object; - - if (!detectType$1(state, object, false)) { - detectType$1(state, object, true); - } - - var type = _toString$3.call(state.dump); - - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); + async _exploreDir(path, depth) { + let files; + try { + files = await readdir$1(path, this._rdOptions); + } catch (error) { + this._onError(error); + } + return { files, depth, path }; } - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; - - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; + async _formatEntry(dirent, path) { + let entry; + try { + const basename = this._isDirent ? dirent.name : dirent; + const fullPath = sysPath$3.resolve(sysPath$3.join(path, basename)); + entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename }; + entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); + } catch (err) { + this._onError(err); + } + return entry; } - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; + _onError(err) { + if (isNormalFlowError(err) && !this.destroyed) { + this.emit('warn', err); + } else { + this.destroy(err); + } } - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; + async _getEntryType(entry) { + // entry may be undefined, because a warning or an error were emitted + // and the statsProp is undefined + const stats = entry && entry[this._statsProp]; + if (!stats) { + return; } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping$1(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping$1(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; - if (block && (state.dump.length !== 0)) { - writeBlockSequence$1(state, arrayLevel, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; + if (stats.isFile()) { + return 'file'; + } + if (stats.isDirectory()) { + return 'directory'; + } + if (stats && stats.isSymbolicLink()) { + const full = entry.fullPath; + try { + const entryRealPath = await realpath$2(full); + const entryRealPathStats = await lstat$2(entryRealPath); + if (entryRealPathStats.isFile()) { + return 'file'; } - } else { - writeFlowSequence$1(state, arrayLevel, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + if (entryRealPathStats.isDirectory()) { + const len = entryRealPath.length; + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) { + const recursiveError = new Error( + `Circular symlink detected: "${full}" points to "${entryRealPath}"` + ); + recursiveError.code = RECURSIVE_ERROR_CODE; + return this._onError(recursiveError); + } + return 'directory'; } + } catch (error) { + this._onError(error); } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar$1(state, state.dump, level, iskey); - } - } else { - if (state.skipInvalid) return false; - throw new YAMLException$2('unacceptable kind of an object to dump ' + type); - } - - if (state.tag !== null && state.tag !== '?') { - state.dump = '!<' + state.tag + '> ' + state.dump; } } - return true; -} - -function getDuplicateReferences$1(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; - - inspectNode$1(object, objects, duplicatesIndexes); + _includeAsFile(entry) { + const stats = entry && entry[this._statsProp]; - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); + return stats && this._wantsEverything && !stats.isDirectory(); } - state.usedDuplicates = new Array(length); } -function inspectNode$1(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); - - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode$1(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); +/** + * @typedef {Object} ReaddirpArguments + * @property {Function=} fileFilter + * @property {Function=} directoryFilter + * @property {String=} type + * @property {Number=} depth + * @property {String=} root + * @property {Boolean=} lstat + * @property {Boolean=} bigint + */ - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode$1(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param {String} root Root directory + * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth + */ +const readdirp$1 = (root, options = {}) => { + let type = options.entryType || options.type; + if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility + if (type) options.type = type; + if (!root) { + throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); + } else if (typeof root !== 'string') { + throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); + } else if (type && !ALL_TYPES.includes(type)) { + throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); } -} -function dump$2(input, options) { - options = options || {}; + options.root = root; + return new ReaddirpStream(options); +}; - var state = new State$2(options); +const readdirpPromise = (root, options = {}) => { + return new Promise((resolve, reject) => { + const files = []; + readdirp$1(root, options) + .on('data', entry => files.push(entry)) + .on('end', () => resolve(files)) + .on('error', error => reject(error)); + }); +}; - if (!state.noRefs) getDuplicateReferences$1(input, state); +readdirp$1.promise = readdirpPromise; +readdirp$1.ReaddirpStream = ReaddirpStream; +readdirp$1.default = readdirp$1; - if (writeNode$1(state, 0, input, true, true)) return state.dump + '\n'; +var readdirp_1 = readdirp$1; - return ''; -} +var anymatch$2 = {exports: {}}; -function safeDump$1(input, options) { - return dump$2(input, common$5.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} +/*! + * normalize-path + * + * Copyright (c) 2014-2018, Jon Schlinkert. + * Released under the MIT License. + */ -dumper$2.dump = dump$2; -dumper$2.safeDump = safeDump$1; +var normalizePath$2 = function(path, stripTrailing) { + if (typeof path !== 'string') { + throw new TypeError('expected path to be a string'); + } -var loader$1 = loader$2; -var dumper$1 = dumper$2; + if (path === '\\' || path === '/') return '/'; + var len = path.length; + if (len <= 1) return path; -function deprecated(name) { - return function () { - throw new Error('Function ' + name + ' is deprecated and cannot be used.'); - }; -} + // ensure that win32 namespaces has two leading slashes, so that the path is + // handled properly by the win32 version of path.parse() after being normalized + // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces + var prefix = ''; + if (len > 4 && path[3] === '\\') { + var ch = path[2]; + if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { + path = path.slice(2); + prefix = '//'; + } + } + var segs = path.split(/[/\\]+/); + if (stripTrailing !== false && segs[segs.length - 1] === '') { + segs.pop(); + } + return prefix + segs.join('/'); +}; -jsYaml$2.Type = type$1; -jsYaml$2.Schema = schema$2; -jsYaml$2.FAILSAFE_SCHEMA = failsafe$1; -jsYaml$2.JSON_SCHEMA = json$3; -jsYaml$2.CORE_SCHEMA = core$4; -jsYaml$2.DEFAULT_SAFE_SCHEMA = default_safe; -jsYaml$2.DEFAULT_FULL_SCHEMA = default_full; -jsYaml$2.load = loader$1.load; -jsYaml$2.loadAll = loader$1.loadAll; -jsYaml$2.safeLoad = loader$1.safeLoad; -jsYaml$2.safeLoadAll = loader$1.safeLoadAll; -jsYaml$2.dump = dumper$1.dump; -jsYaml$2.safeDump = dumper$1.safeDump; -jsYaml$2.YAMLException = exception$1; +Object.defineProperty(anymatch$2.exports, "__esModule", { value: true }); -// Deprecated schema names from JS-YAML 2.0.x -jsYaml$2.MINIMAL_SCHEMA = failsafe$1; -jsYaml$2.SAFE_SCHEMA = default_safe; -jsYaml$2.DEFAULT_SCHEMA = default_full; +const picomatch = picomatch$2; +const normalizePath$1 = normalizePath$2; -// Deprecated functions from JS-YAML 1.x.x -jsYaml$2.scan = deprecated('scan'); -jsYaml$2.parse = deprecated('parse'); -jsYaml$2.compose = deprecated('compose'); -jsYaml$2.addConstructor = deprecated('addConstructor'); +/** + * @typedef {(testString: string) => boolean} AnymatchFn + * @typedef {string|RegExp|AnymatchFn} AnymatchPattern + * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher + */ +const BANG$1 = '!'; +const DEFAULT_OPTIONS = {returnIndex: false}; +const arrify$1 = (item) => Array.isArray(item) ? item : [item]; -var yaml$1 = jsYaml$2; +/** + * @param {AnymatchPattern} matcher + * @param {object} options + * @returns {AnymatchFn} + */ +const createPattern = (matcher, options) => { + if (typeof matcher === 'function') { + return matcher; + } + if (typeof matcher === 'string') { + const glob = picomatch(matcher, options); + return (string) => matcher === string || glob(string); + } + if (matcher instanceof RegExp) { + return (string) => matcher.test(string); + } + return (string) => false; +}; +/** + * @param {Array} patterns + * @param {Array} negPatterns + * @param {String|Array} args + * @param {Boolean} returnIndex + * @returns {boolean|number} + */ +const matchPatterns = (patterns, negPatterns, args, returnIndex) => { + const isList = Array.isArray(args); + const _path = isList ? args[0] : args; + if (!isList && typeof _path !== 'string') { + throw new TypeError('anymatch: second argument must be a string: got ' + + Object.prototype.toString.call(_path)) + } + const path = normalizePath$1(_path); -var jsYaml$1 = yaml$1; + for (let index = 0; index < negPatterns.length; index++) { + const nglob = negPatterns[index]; + if (nglob(path)) { + return returnIndex ? -1 : false; + } + } -var isArrayish$2 = function isArrayish(obj) { - if (!obj) { - return false; - } + const applied = isList && [path].concat(args.slice(1)); + for (let index = 0; index < patterns.length; index++) { + const pattern = patterns[index]; + if (isList ? pattern(...applied) : pattern(path)) { + return returnIndex ? index : true; + } + } - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && obj.splice instanceof Function); + return returnIndex ? -1 : false; }; -var util$4 = require$$0__default['default']; -var isArrayish$1 = isArrayish$2; +/** + * @param {AnymatchMatcher} matchers + * @param {Array|string} testString + * @param {object} options + * @returns {boolean|number|Function} + */ +const anymatch$1 = (matchers, testString, options = DEFAULT_OPTIONS) => { + if (matchers == null) { + throw new TypeError('anymatch: specify first argument'); + } + const opts = typeof options === 'boolean' ? {returnIndex: options} : options; + const returnIndex = opts.returnIndex || false; -var errorEx$1 = function errorEx(name, properties) { - if (!name || name.constructor !== String) { - properties = name || {}; - name = Error.name; - } + // Early cache for matchers. + const mtchers = arrify$1(matchers); + const negatedGlobs = mtchers + .filter(item => typeof item === 'string' && item.charAt(0) === BANG$1) + .map(item => item.slice(1)) + .map(item => picomatch(item, opts)); + const patterns = mtchers + .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG$1)) + .map(matcher => createPattern(matcher, opts)); - var errorExError = function ErrorEXError(message) { - if (!this) { - return new ErrorEXError(message); - } + if (testString == null) { + return (testString, ri = false) => { + const returnIndex = typeof ri === 'boolean' ? ri : false; + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); + } + } - message = message instanceof Error - ? message.message - : (message || this.message); + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); +}; - Error.call(this, message); - Error.captureStackTrace(this, errorExError); +anymatch$1.default = anymatch$1; +anymatch$2.exports = anymatch$1; - this.name = name; +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ - Object.defineProperty(this, 'message', { - configurable: true, - enumerable: false, - get: function () { - var newMessage = message.split(/\r?\n/g); +var isExtglob$1 = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } - for (var key in properties) { - if (!properties.hasOwnProperty(key)) { - continue; - } + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } - var modifier = properties[key]; + return false; +}; - if ('message' in modifier) { - newMessage = modifier.message(this[key], newMessage) || newMessage; - if (!isArrayish$1(newMessage)) { - newMessage = [newMessage]; - } - } - } +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ - return newMessage.join('\n'); - }, - set: function (v) { - message = v; - } - }); +var isExtglob = isExtglob$1; +var chars$1 = { '{': '}', '(': ')', '[': ']'}; +var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; +var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; - var overwrittenStack = null; +var isGlob$2 = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } - var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack'); - var stackGetter = stackDescriptor.get; - var stackValue = stackDescriptor.value; - delete stackDescriptor.value; - delete stackDescriptor.writable; + if (isExtglob(str)) { + return true; + } - stackDescriptor.set = function (newstack) { - overwrittenStack = newstack; - }; + var regex = strictRegex; + var match; - stackDescriptor.get = function () { - var stack = (overwrittenStack || ((stackGetter) - ? stackGetter.call(this) - : stackValue)).split(/\r?\n+/g); + // optionally relax regex + if (options && options.strict === false) { + regex = relaxedRegex; + } - // starting in Node 7, the stack builder caches the message. - // just replace it. - if (!overwrittenStack) { - stack[0] = this.name + ': ' + this.message; - } + while ((match = regex.exec(str))) { + if (match[2]) return true; + var idx = match.index + match[0].length; - var lineCount = 1; - for (var key in properties) { - if (!properties.hasOwnProperty(key)) { - continue; - } + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + var open = match[1]; + var close = open ? chars$1[open] : null; + if (open && close) { + var n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } - var modifier = properties[key]; + str = str.slice(idx); + } + return false; +}; - if ('line' in modifier) { - var line = modifier.line(this[key]); - if (line) { - stack.splice(lineCount++, 0, ' ' + line); - } - } +var isGlob$1 = isGlob$2; +var pathPosixDirname = path$b.posix.dirname; +var isWin32 = require$$0$2.platform() === 'win32'; - if ('stack' in modifier) { - modifier.stack(this[key], stack); - } - } +var slash = '/'; +var backslash = /\\/g; +var enclosure = /[\{\[].*[\}\]]$/; +var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; +var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; - return stack.join('\n'); - }; +/** + * @param {string} str + * @param {Object} opts + * @param {boolean} [opts.flipBackslashes=true] + * @returns {string} + */ +var globParent$1 = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); - Object.defineProperty(this, 'stack', stackDescriptor); - }; + // flip windows path separators + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } - if (Object.setPrototypeOf) { - Object.setPrototypeOf(errorExError.prototype, Error.prototype); - Object.setPrototypeOf(errorExError, Error); - } else { - util$4.inherits(errorExError, Error); - } + // special case for strings ending in enclosure containing path separator + if (enclosure.test(str)) { + str += slash; + } - return errorExError; + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = pathPosixDirname(str); + } while (isGlob$1(str) || globby.test(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); }; -errorEx$1.append = function (str, def) { - return { - message: function (v, message) { - v = v || def; +var utils$3 = {}; - if (v) { - message[0] += ' ' + str.replace('%s', v.toString()); - } +(function (exports) { - return message; - } - }; +exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; }; -errorEx$1.line = function (str, def) { - return { - line: function (v) { - v = v || def; +/** + * Find a node of the given type + */ - if (v) { - return str.replace('%s', v.toString()); - } +exports.find = (node, type) => node.nodes.find(node => node.type === type); - return null; - } - }; +/** + * Find a node of the given type + */ + +exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; }; -var errorEx_1 = errorEx$1; +/** + * Escape the given node with '\\' before node.value + */ -const hexify = char => { - const h = char.charCodeAt(0).toString(16).toUpperCase(); - return '0x' + (h.length % 2 ? '0' : '') + h -}; +exports.escapeNode = (block, n = 0, type) => { + let node = block.nodes[n]; + if (!node) return; -const parseError = (e, txt, context) => { - if (!txt) { - return { - message: e.message + ' while parsing empty string', - position: 0, + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; } } - const badToken = e.message.match(/^Unexpected token (.) .*position\s+(\d+)/i); - const errIdx = badToken ? +badToken[2] - : e.message.match(/^Unexpected end of JSON.*/i) ? txt.length - 1 - : null; +}; - const msg = badToken ? e.message.replace(/^Unexpected token ./, `Unexpected token ${ - JSON.stringify(badToken[1]) - } (${hexify(badToken[1])})`) - : e.message; +/** + * Returns true if the given brace node should be enclosed in literal braces + */ - if (errIdx !== null && errIdx !== undefined) { - const start = errIdx <= context ? 0 - : errIdx - context; +exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; +}; - const end = errIdx + context >= txt.length ? txt.length - : errIdx + context; +/** + * Returns true if a brace node is invalid. + */ - const slice = (start === 0 ? '' : '...') + - txt.slice(start, end) + - (end === txt.length ? '' : '...'); +exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; - const near = txt === slice ? '' : 'near '; +/** + * Returns true if a node is an open or close node + */ - return { - message: msg + ` while parsing ${near}${JSON.stringify(slice)}`, - position: errIdx, - } - } else { - return { - message: msg + ` while parsing '${txt.slice(0, context * 2)}'`, - position: 0, - } +exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; } + return node.open === true || node.close === true; }; -class JSONParseError extends SyntaxError { - constructor (er, txt, context, caller) { - context = context || 20; - const metadata = parseError(er, txt, context); - super(metadata.message); - Object.assign(this, metadata); - this.code = 'EJSONPARSE'; - this.systemError = er; - Error.captureStackTrace(this, caller || this.constructor); - } - get name () { return this.constructor.name } - set name (n) {} - get [Symbol.toStringTag] () { return this.constructor.name } -} +/** + * Reduce an array of text nodes. + */ -const kIndent = Symbol.for('indent'); -const kNewline = Symbol.for('newline'); -// only respect indentation if we got a line break, otherwise squash it -// things other than objects and arrays aren't indented, so ignore those -// Important: in both of these regexps, the $1 capture group is the newline -// or undefined, and the $2 capture group is the indent, or undefined. -const formatRE = /^\s*[{\[]((?:\r?\n)+)([\s\t]*)/; -const emptyRE = /^(?:\{\}|\[\])((?:\r?\n)+)?$/; +exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; +}, []); -const parseJson$1 = (txt, reviver, context) => { - const parseText = stripBOM(txt); - context = context || 20; - try { - // get the indentation so that we can save it back nicely - // if the file starts with {" then we have an indent of '', ie, none - // otherwise, pick the indentation of the next line after the first \n - // If the pattern doesn't match, then it means no indentation. - // JSON.stringify ignores symbols, so this is reasonably safe. - // if the string is '{}' or '[]', then use the default 2-space indent. - const [, newline = '\n', indent = ' '] = parseText.match(emptyRE) || - parseText.match(formatRE) || - [, '', '']; +/** + * Flatten an array + */ - const result = JSON.parse(parseText, reviver); - if (result && typeof result === 'object') { - result[kNewline] = newline; - result[kIndent] = indent; - } - return result - } catch (e) { - if (typeof txt !== 'string' && !Buffer.isBuffer(txt)) { - const isEmptyArray = Array.isArray(txt) && txt.length === 0; - throw Object.assign(new TypeError( - `Cannot parse ${isEmptyArray ? 'an empty array' : String(txt)}` - ), { - code: 'EJSONPARSE', - systemError: e, - }) +exports.flatten = (...args) => { + const result = []; + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + let ele = arr[i]; + Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele); } - - throw new JSONParseError(e, parseText, context, parseJson$1) - } + return result; + }; + flat(args); + return result; }; +}(utils$3)); -// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) -// because the buffer-to-string conversion in `fs.readFileSync()` -// translates it to FEFF, the UTF-16 BOM. -const stripBOM = txt => String(txt).replace(/^\uFEFF/, ''); +const utils$2 = utils$3; -var jsonParseEvenBetterErrors = parseJson$1; -parseJson$1.JSONParseError = JSONParseError; +var stringify$6 = (ast, options = {}) => { + let stringify = (node, parent = {}) => { + let invalidBlock = options.escapeInvalid && utils$2.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; -parseJson$1.noExceptions = (txt, reviver) => { - try { - return JSON.parse(stripBOM(txt), reviver) - } catch (e) {} -}; + if (node.value) { + if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } -var LF = '\n'; -var CR = '\r'; -var LinesAndColumns$1 = (function () { - function LinesAndColumns(string) { - this.string = string; - var offsets = [0]; - for (var offset = 0; offset < string.length;) { - switch (string[offset]) { - case LF: - offset += LF.length; - offsets.push(offset); - break; - case CR: - offset += CR.length; - if (string[offset] === LF) { - offset += LF.length; - } - offsets.push(offset); - break; - default: - offset++; - break; - } - } - this.offsets = offsets; + if (node.value) { + return node.value; } - LinesAndColumns.prototype.locationForIndex = function (index) { - if (index < 0 || index > this.string.length) { - return null; - } - var line = 0; - var offsets = this.offsets; - while (offsets[line + 1] <= index) { - line++; - } - var column = index - offsets[line]; - return { line: line, column: column }; - }; - LinesAndColumns.prototype.indexForLocation = function (location) { - var line = location.line, column = location.column; - if (line < 0 || line >= this.offsets.length) { - return null; - } - if (column < 0 || column > this.lengthOfLine(line)) { - return null; - } - return this.offsets[line] + column; - }; - LinesAndColumns.prototype.lengthOfLine = function (line) { - var offset = this.offsets[line]; - var nextOffset = line === this.offsets.length - 1 ? this.string.length : this.offsets[line + 1]; - return nextOffset - offset; - }; - return LinesAndColumns; -}()); -var dist$2 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': LinesAndColumns$1 -}); + if (node.nodes) { + for (let child of node.nodes) { + output += stringify(child); + } + } + return output; + }; -var require$$2 = /*@__PURE__*/getAugmentedNamespace(dist$2); + return stringify(ast); +}; -var lib$9 = {}; +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ -var lib$8 = {}; +var isNumber$3 = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; -var jsTokens = {}; +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ -// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell -// License: MIT. (See LICENSE.) +const isNumber$2 = isNumber$3; -Object.defineProperty(jsTokens, "__esModule", { - value: true -}); +const toRegexRange$1 = (min, max, options) => { + if (isNumber$2(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } -// This regex comes from regex.coffee, and is inserted here by generate-index.js -// (run `npm run build`). -jsTokens.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g; + if (max === void 0 || min === max) { + return String(min); + } -jsTokens.matchToToken = function(match) { - var token = {type: "invalid", value: match[0], closed: undefined}; - if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]); - else if (match[ 5]) token.type = "comment"; - else if (match[ 6]) token.type = "comment", token.closed = !!match[7]; - else if (match[ 8]) token.type = "regex"; - else if (match[ 9]) token.type = "number"; - else if (match[10]) token.type = "name"; - else if (match[11]) token.type = "punctuator"; - else if (match[12]) token.type = "whitespace"; - return token -}; + if (isNumber$2(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } -var lib$7 = {}; + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } -var identifier = {}; + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; -Object.defineProperty(identifier, "__esModule", { - value: true -}); -identifier.isIdentifierStart = isIdentifierStart; -identifier.isIdentifierChar = isIdentifierChar; -identifier.isIdentifierName = isIdentifierName; -let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; -let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; -const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); -const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); -nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; -const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8952, 286, 50, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; -const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) { + return toRegexRange$1.cache[cacheKey].result; + } -function isInAstralSet(code, set) { - let pos = 0x10000; + let a = Math.min(min, max); + let b = Math.max(min, max); - for (let i = 0, length = set.length; i < length; i += 2) { - pos += set[i]; - if (pos > code) return false; - pos += set[i + 1]; - if (pos >= code) return true; + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; } - return false; -} + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; -function isIdentifierStart(code) { - if (code < 65) return code === 36; - if (code <= 90) return true; - if (code < 97) return code === 95; - if (code <= 122) return true; + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } - if (code <= 0xffff) { - return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; } - return isInAstralSet(code, astralIdentifierStartCodes); -} + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } -function isIdentifierChar(code) { - if (code < 48) return code === 36; - if (code < 58) return true; - if (code < 65) return false; - if (code <= 90) return true; - if (code < 97) return code === 95; - if (code <= 122) return true; + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives); - if (code <= 0xffff) { - return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; } - return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); -} + toRegexRange$1.cache[cacheKey] = state; + return state.result; +}; -function isIdentifierName(name) { - let isFirst = true; +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false) || []; + let onlyPositive = filterPatterns(pos, neg, '', false) || []; + let intersected = filterPatterns(neg, pos, '-?', true) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} - for (let i = 0; i < name.length; i++) { - let cp = name.charCodeAt(i); +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; - if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) { - const trail = name.charCodeAt(++i); + let stop = countNines(min, nines); + let stops = new Set([max]); - if ((trail & 0xfc00) === 0xdc00) { - cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); - } - } + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } - if (isFirst) { - isFirst = false; + stop = countZeros(max + 1, zeros) - 1; - if (!isIdentifierStart(cp)) { - return false; - } - } else if (!isIdentifierChar(cp)) { - return false; - } + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; } - return !isFirst; + stops = [...stops]; + stops.sort(compare$c); + return stops; } -var keyword = {}; +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ -Object.defineProperty(keyword, "__esModule", { - value: true -}); -keyword.isReservedWord = isReservedWord; -keyword.isStrictReservedWord = isStrictReservedWord; -keyword.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; -keyword.isStrictBindReservedWord = isStrictBindReservedWord; -keyword.isKeyword = isKeyword; -const reservedWords = { - keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], - strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], - strictBind: ["eval", "arguments"] -}; -const keywords$1 = new Set(reservedWords.keyword); -const reservedWordsStrictSet = new Set(reservedWords.strict); -const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); - -function isReservedWord(word, inModule) { - return inModule && word === "await" || word === "enum"; -} - -function isStrictReservedWord(word, inModule) { - return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); -} +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } -function isStrictBindOnlyReservedWord(word) { - return reservedWordsStrictBindSet.has(word); -} + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; -function isStrictBindReservedWord(word, inModule) { - return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); -} + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; -function isKeyword(word) { - return keywords$1.has(word); -} + if (startDigit === stopDigit) { + pattern += startDigit; -(function (exports) { + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit); -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "isIdentifierName", { - enumerable: true, - get: function () { - return _identifier.isIdentifierName; - } -}); -Object.defineProperty(exports, "isIdentifierChar", { - enumerable: true, - get: function () { - return _identifier.isIdentifierChar; - } -}); -Object.defineProperty(exports, "isIdentifierStart", { - enumerable: true, - get: function () { - return _identifier.isIdentifierStart; - } -}); -Object.defineProperty(exports, "isReservedWord", { - enumerable: true, - get: function () { - return _keyword.isReservedWord; - } -}); -Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { - enumerable: true, - get: function () { - return _keyword.isStrictBindOnlyReservedWord; - } -}); -Object.defineProperty(exports, "isStrictBindReservedWord", { - enumerable: true, - get: function () { - return _keyword.isStrictBindReservedWord; - } -}); -Object.defineProperty(exports, "isStrictReservedWord", { - enumerable: true, - get: function () { - return _keyword.isStrictReservedWord; + } else { + count++; + } } -}); -Object.defineProperty(exports, "isKeyword", { - enumerable: true, - get: function () { - return _keyword.isKeyword; + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; } -}); -var _identifier = identifier; + return { pattern, count: [count], digits }; +} -var _keyword = keyword; -}(lib$7)); +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; -var chalk$2 = {exports: {}}; + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; -var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } -var escapeStringRegexp$3 = function (str) { - if (typeof str !== 'string') { - throw new TypeError('Expected a string'); - } + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } - return str.replace(matchOperatorsRe, '\\$&'); -}; + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } -var ansiStyles$2 = {exports: {}}; + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } -var conversions$5 = {exports: {}}; + return tokens; +} -var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; -/* MIT license */ + for (let ele of arr) { + let { string } = ele; -var cssKeywords$1 = colorName$1; + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} -var reverseKeywords$1 = {}; -for (var key$1 in cssKeywords$1) { - if (cssKeywords$1.hasOwnProperty(key$1)) { - reverseKeywords$1[cssKeywords$1[key$1]] = key$1; - } +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; } -var convert$6 = conversions$5.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; +function compare$c(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} -// hide .channels and .labels properties -for (var model in convert$6) { - if (convert$6.hasOwnProperty(model)) { - if (!('channels' in convert$6[model])) { - throw new Error('missing channels property: ' + model); - } +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} - if (!('labels' in convert$6[model])) { - throw new Error('missing channel labels property: ' + model); - } +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} - if (convert$6[model].labels.length !== convert$6[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} - var channels = convert$6[model].channels; - var labels$1 = convert$6[model].labels; - delete convert$6[model].channels; - delete convert$6[model].labels; - Object.defineProperty(convert$6[model], 'channels', {value: channels}); - Object.defineProperty(convert$6[model], 'labels', {value: labels$1}); - } +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; } -convert$6.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} - h = Math.min(h * 60, 360); +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } - if (h < 0) { - h += 360; - } + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; - l = (min + max) / 2; + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } +/** + * Cache + */ - return [h, s * 100, l * 100]; -}; +toRegexRange$1.cache = {}; +toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {}); -convert$6.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; +/** + * Expose `toRegexRange` + */ - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; +var toRegexRange_1 = toRegexRange$1; - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } +const util$3 = require$$0$4; +const toRegexRange = toRegexRange_1; - return [ - h * 360, - s * 100, - v * 100 - ]; +const isObject$2 = val => val !== null && typeof val === 'object' && !Array.isArray(val); + +const transform$3 = toNumber => { + return value => toNumber === true ? Number(value) : String(value); }; -convert$6.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert$6.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); +const isValidValue = value => { + return typeof value === 'number' || (typeof value === 'string' && value !== ''); +}; - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); +const isNumber$1 = num => Number.isInteger(+num); - return [h, w * 100, b * 100]; +const zeros = input => { + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while (value[++index] === '0'); + return index > 0; }; -convert$6.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; +const stringify$5 = (start, end, options) => { + if (typeof start === 'string' || typeof end === 'string') { + return true; + } + return options.stringify === true; +}; - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; +const pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); + } + if (toNumber === false) { + return String(input); + } + return input; +}; - return [c * 100, m * 100, y * 100, k * 100]; +const toMaxLen = (input, maxLength) => { + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = '0' + input; + return negative ? ('-' + input) : input; }; -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance$1(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); -} - -convert$6.rgb.keyword = function (rgb) { - var reversed = reverseKeywords$1[rgb]; - if (reversed) { - return reversed; - } +const toSequence = (parts, options) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); - var currentClosestDistance = Infinity; - var currentClosestKeyword; + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; - for (var keyword in cssKeywords$1) { - if (cssKeywords$1.hasOwnProperty(keyword)) { - var value = cssKeywords$1[keyword]; + if (parts.positives.length) { + positives = parts.positives.join('|'); + } - // Compute comparative distance - var distance = comparativeDistance$1(rgb, value); + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.join('|')})`; + } - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } - return currentClosestKeyword; -}; + if (options.wrap) { + return `(${prefix}${result})`; + } -convert$6.keyword.rgb = function (keyword) { - return cssKeywords$1[keyword]; + return result; }; -convert$6.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; +const toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + let start = String.fromCharCode(a); + if (a === b) return start; - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; - return [x * 100, y * 100, z * 100]; +const toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return toRegexRange(start, end, options); }; -convert$6.rgb.lab = function (rgb) { - var xyz = convert$6.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; +const rangeError = (...args) => { + return new RangeError('Invalid range arguments: ' + util$3.inspect(...args)); +}; - x /= 95.047; - y /= 100; - z /= 108.883; +const invalidRange = (start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; +}; - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); +const invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; +}; - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); +const fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); - return [l, a, b]; -}; + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } -convert$6.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; - if (s === 0) { - val = l * 255; - return [val, val, val]; - } + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify$5(start, end, options) === false; + let format = options.transform || transform$3(toNumber); - t1 = 2 * l - t2; + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } + let parts = { negatives: [], positives: [] }; + let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } - rgb[i] = val * 255; - } + if (options.toRegex === true) { + return step > 1 + ? toSequence(parts, options) + : toRegex(range, null, { wrap: false, ...options }); + } - return rgb; + return range; }; -convert$6.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; +const fillLetters = (start, end, step = 1, options = {}) => { + if ((!isNumber$1(start) && start.length > 1) || (!isNumber$1(end) && end.length > 1)) { + return invalidRange(start, end, options); + } - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - return [h, sv * 100, v * 100]; -}; + let format = options.transform || (val => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); -convert$6.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; + let range = []; + let index = 0; -convert$6.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } - return [h, sl * 100, l * 100]; + return range; }; -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert$6.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; +const fill$2 = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } - if ((i & 0x01) !== 0) { - f = 1 - f; - } + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } - n = wh + f * (v - wh); // linear interpolation + if (typeof step === 'function') { + return fill$2(start, end, 1, { transform: step }); + } - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } + if (isObject$2(step)) { + return fill$2(start, end, 0, step); + } - return [r * 255, g * 255, b * 255]; -}; + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; -convert$6.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; + if (!isNumber$1(step)) { + if (step != null && !isObject$2(step)) return invalidStep(step, opts); + return fill$2(start, end, 1, step); + } - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); + if (isNumber$1(start) && isNumber$1(end)) { + return fillNumbers(start, end, step, opts); + } - return [r * 255, g * 255, b * 255]; + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); }; -convert$6.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; +var fillRange = fill$2; - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); +const fill$1 = fillRange; +const utils$1 = utils$3; - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; +const compile$1 = (ast, options = {}) => { + let walk = (node, parent = {}) => { + let invalidBlock = utils$1.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + return prefix + node.value; + } - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; + if (node.type === 'open') { + return invalid ? (prefix + node.value) : '('; + } - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); + if (node.type === 'close') { + return invalid ? (prefix + node.value) : ')'; + } - return [r * 255, g * 255, b * 255]; -}; + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); + } -convert$6.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; + if (node.value) { + return node.value; + } - x /= 95.047; - y /= 100; - z /= 108.883; + if (node.nodes && node.ranges > 0) { + let args = utils$1.reduce(node.nodes); + let range = fill$1(...args, { ...options, wrap: false, toRegex: true }); - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); + if (node.nodes) { + for (let child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; - return [l, a, b]; + return walk(ast); }; -convert$6.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; +var compile_1 = compile$1; - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; +const fill = fillRange; +const stringify$4 = stringify$6; +const utils = utils$3; - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; +const append = (queue = '', stash = '', enclose = false) => { + let result = []; - x *= 95.047; - y *= 100; - z *= 108.883; + queue = [].concat(queue); + stash = [].concat(stash); - return [x, y, z]; + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (let item of queue) { + if (Array.isArray(item)) { + for (let value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); + } + } + } + return utils.flatten(result); }; -convert$6.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; +const expand$4 = (ast, options = {}) => { + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; + let walk = (node, parent = {}) => { + node.queue = []; - if (h < 0) { - h += 360; - } + let p = parent; + let q = parent.queue; - c = Math.sqrt(a * a + b * b); + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } - return [l, c, h]; -}; + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify$4(node, options))); + return; + } -convert$6.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); - return [l, a, b]; -}; + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } -convert$6.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert$6.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + let range = fill(...args, options); + if (range.length === 0) { + range = stringify$4(node, options); + } - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } - if (value === 2) { - ansi += 60; - } + let enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; - return ansi; -}; + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } -convert$6.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert$6.rgb.ansi16(convert$6.hsv.rgb(args), args[2]); -}; + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i]; -convert$6.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } - if (r > 248) { - return 231; - } + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } - return Math.round(((r - 8) / 247) * 24) + 232; - } + if (child.nodes) { + walk(child, node); + } + } - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); + return queue; + }; - return ansi; + return utils.flatten(walk(ast)); }; -convert$6.ansi16.rgb = function (args) { - var color = args % 10; +var expand_1 = expand$4; - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } +var constants$2 = { + MAX_LENGTH: 1024 * 64, - color = color / 10.5 * 255; + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ - return [color, color, color]; - } + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ - return [r, g, b]; + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ }; -convert$6.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } +const stringify$3 = stringify$6; - args -= 16; +/** + * Constants + */ - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; +const { + MAX_LENGTH: MAX_LENGTH$3, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA: CHAR_COMMA$1, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */ + CHAR_DOUBLE_QUOTE: CHAR_DOUBLE_QUOTE$1, /* " */ + CHAR_SINGLE_QUOTE: CHAR_SINGLE_QUOTE$1, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = constants$2; - return [r, g, b]; -}; +/** + * parse + */ -convert$6.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); +const parse$c = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; + let opts = options || {}; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$3, opts.maxLength) : MAX_LENGTH$3; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } -convert$6.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } + let ast = { type: 'root', input, nodes: [] }; + let stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; - var colorString = match[0]; + /** + * Helpers + */ - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } - return [r, g, b]; -}; + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; -convert$6.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; + push({ type: 'bos' }); - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } + /** + * Invalid chars + */ - hue /= 6; - hue %= 1; + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } - return [hue * 360, chroma * 100, grayscale * 100]; -}; + /** + * Escaped chars + */ -convert$6.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } + /** + * Right square bracket (literal): ']' + */ - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } + if (value === CHAR_RIGHT_SQUARE_BRACKET$1) { + push({ type: 'text', value: '\\' + value }); + continue; + } - return [hsl[0], c * 100, f * 100]; -}; + /** + * Left square bracket: '[' + */ -convert$6.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; + if (value === CHAR_LEFT_SQUARE_BRACKET$1) { + brackets++; + let next; - var c = s * v; - var f = 0; + while (index < length && (next = advance())) { + value += next; - if (c < 1.0) { - f = (v - c) / (1 - c); - } + if (next === CHAR_LEFT_SQUARE_BRACKET$1) { + brackets++; + continue; + } - return [hsv[0], c * 100, f * 100]; -}; + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } -convert$6.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; + if (next === CHAR_RIGHT_SQUARE_BRACKET$1) { + brackets--; - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } + if (brackets === 0) { + break; + } + } + } - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; + push({ type: 'text', value }); + continue; + } - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } + /** + * Parentheses + */ - mg = (1.0 - c) * g; + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } -convert$6.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; + /** + * Quotes: '|"|` + */ - var v = c + g * (1.0 - c); - var f = 0; + if (value === CHAR_DOUBLE_QUOTE$1 || value === CHAR_SINGLE_QUOTE$1 || value === CHAR_BACKTICK) { + let open = value; + let next; - if (v > 0.0) { - f = c / v; - } + if (options.keepQuotes !== true) { + value = ''; + } - return [hcg[0], f * 100, v * 100]; -}; + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } -convert$6.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; + value += next; + } - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } + push({ type: 'text', value }); + continue; + } - return [hcg[0], s * 100, l * 100]; -}; + /** + * Left curly brace: '{' + */ -convert$6.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; -convert$6.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; + let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + let brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; - if (c < 1) { - g = (v - c) / (1 - c); - } + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } - return [hwb[0], c * 100, g * 100]; -}; + /** + * Right curly brace: '}' + */ -convert$6.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } -convert$6.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; + let type = 'close'; + block = stack.pop(); + block.close = true; -convert$6.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; + push({ type, value }); + depth--; -convert$6.gray.hsl = convert$6.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; + block = stack[stack.length - 1]; + continue; + } -convert$6.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; + /** + * Comma: ',' + */ -convert$6.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; + if (value === CHAR_COMMA$1 && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify$3(block) }]; + } -convert$6.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; + push({ type: 'comma', value }); + block.commas++; + continue; + } -convert$6.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; + /** + * Dot: '.' + */ - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + let siblings = block.nodes; -convert$6.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; - -var conversions$4 = conversions$5.exports; - -/* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph$1() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions$4); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS$1(fromModel) { - var graph = buildGraph$1(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions$4[current]); + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } - return graph; -} + block.ranges++; + block.args = []; + continue; + } -function link$2(from, to) { - return function (args) { - return to(from(args)); - }; -} + if (prev.type === 'range') { + siblings.pop(); -function wrapConversion$1(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions$4[graph[toModel].parent][toModel]; + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link$2(conversions$4[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } + push({ type: 'dot', value }); + continue; + } - fn.conversion = path; - return fn; -} + /** + * Text + */ -var route$3 = function (fromModel) { - var graph = deriveBFS$1(fromModel); - var conversion = {}; + push({ type: 'text', value }); + } - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); - conversion[toModel] = wrapConversion$1(toModel, graph); - } + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); - return conversion; + push({ type: 'eos' }); + return ast; }; -var conversions$3 = conversions$5.exports; -var route$2 = route$3; - -var convert$5 = {}; - -var models$4 = Object.keys(conversions$3); - -function wrapRaw$1(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded$1(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } +var parse_1$1 = parse$c; - return wrappedFn; -} +const stringify$2 = stringify$6; +const compile = compile_1; +const expand$3 = expand_1; +const parse$b = parse_1$1; -models$4.forEach(function (fromModel) { - convert$5[fromModel] = {}; +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ - Object.defineProperty(convert$5[fromModel], 'channels', {value: conversions$3[fromModel].channels}); - Object.defineProperty(convert$5[fromModel], 'labels', {value: conversions$3[fromModel].labels}); +const braces$1 = (input, options = {}) => { + let output = []; - var routes = route$2(fromModel); - var routeModels = Object.keys(routes); + if (Array.isArray(input)) { + for (let pattern of input) { + let result = braces$1.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces$1.create(input, options)); + } - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; - convert$5[fromModel][toModel] = wrapRounded$1(fn); - convert$5[fromModel][toModel].raw = wrapRaw$1(fn); - }); -}); +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ -var colorConvert$1 = convert$5; +braces$1.parse = (input, options = {}) => parse$b(input, options); -(function (module) { -const colorConvert = colorConvert$1; +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ -const wrapAnsi16 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${code + offset}m`; +braces$1.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify$2(braces$1.parse(input, options), options); + } + return stringify$2(input, options); }; -const wrapAnsi256 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};5;${code}m`; -}; +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ -const wrapAnsi16m = (fn, offset) => function () { - const rgb = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +braces$1.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces$1.parse(input, options); + } + return compile(input, options); }; -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39], - - // Bright color - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Fix humans - styles.color.grey = styles.color.gray; - - for (const groupName of Object.keys(styles)) { - const group = styles[groupName]; - - for (const styleName of Object.keys(group)) { - const style = group[styleName]; - - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - } - - const ansi2ansi = n => n; - const rgb2rgb = (r, g, b) => [r, g, b]; - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = { - ansi: wrapAnsi16(ansi2ansi, 0) - }; - styles.color.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 0) - }; - styles.color.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 0) - }; - - styles.bgColor.ansi = { - ansi: wrapAnsi16(ansi2ansi, 10) - }; - styles.bgColor.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 10) - }; - styles.bgColor.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 10) - }; - - for (let key of Object.keys(colorConvert)) { - if (typeof colorConvert[key] !== 'object') { - continue; - } - - const suite = colorConvert[key]; - - if (key === 'ansi16') { - key = 'ansi'; - } - - if ('ansi16' in suite) { - styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); - styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); - } +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ - if ('ansi256' in suite) { - styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); - styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); - } +braces$1.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces$1.parse(input, options); + } - if ('rgb' in suite) { - styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); - styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); - } - } + let result = expand$3(input, options); - return styles; -} + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); -}(ansiStyles$2)); + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } -var hasFlag$5 = (flag, argv) => { - argv = argv || process.argv; - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const pos = argv.indexOf(prefix + flag); - const terminatorPos = argv.indexOf('--'); - return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); + return result; }; -const os$3 = require$$0__default$1['default']; -const hasFlag$4 = hasFlag$5; - -const env$2 = process.env; - -let forceColor$2; -if (hasFlag$4('no-color') || - hasFlag$4('no-colors') || - hasFlag$4('color=false')) { - forceColor$2 = false; -} else if (hasFlag$4('color') || - hasFlag$4('colors') || - hasFlag$4('color=true') || - hasFlag$4('color=always')) { - forceColor$2 = true; -} -if ('FORCE_COLOR' in env$2) { - forceColor$2 = env$2.FORCE_COLOR.length === 0 || parseInt(env$2.FORCE_COLOR, 10) !== 0; -} - -function translateLevel$2(level) { - if (level === 0) { - return false; - } - - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -} - -function supportsColor$2(stream) { - if (forceColor$2 === false) { - return 0; - } +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ - if (hasFlag$4('color=16m') || - hasFlag$4('color=full') || - hasFlag$4('color=truecolor')) { - return 3; - } +braces$1.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } - if (hasFlag$4('color=256')) { - return 2; - } + return options.expand !== true + ? braces$1.compile(input, options) + : braces$1.expand(input, options); +}; - if (stream && !stream.isTTY && forceColor$2 !== true) { - return 0; - } +/** + * Expose "braces" + */ - const min = forceColor$2 ? 1 : 0; +var braces_1 = braces$1; - if (process.platform === 'win32') { - // Node.js 7.5.0 is the first version of Node.js to include a patch to - // libuv that enables 256 color output on Windows. Anything earlier and it - // won't work. However, here we target Node.js 8 at minimum as it is an LTS - // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows - // release that supports 256 colors. Windows 10 build 14931 is the first release - // that supports 16m/TrueColor. - const osRelease = os$3.release().split('.'); - if ( - Number(process.versions.node.split('.')[0]) >= 8 && - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } - - return 1; - } - - if ('CI' in env$2) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env$2) || env$2.CI_NAME === 'codeship') { - return 1; - } +var require$$0$1 = [ + "3dm", + "3ds", + "3g2", + "3gp", + "7z", + "a", + "aac", + "adp", + "ai", + "aif", + "aiff", + "alz", + "ape", + "apk", + "appimage", + "ar", + "arj", + "asf", + "au", + "avi", + "bak", + "baml", + "bh", + "bin", + "bk", + "bmp", + "btif", + "bz2", + "bzip2", + "cab", + "caf", + "cgm", + "class", + "cmx", + "cpio", + "cr2", + "cur", + "dat", + "dcm", + "deb", + "dex", + "djvu", + "dll", + "dmg", + "dng", + "doc", + "docm", + "docx", + "dot", + "dotm", + "dra", + "DS_Store", + "dsk", + "dts", + "dtshd", + "dvb", + "dwg", + "dxf", + "ecelp4800", + "ecelp7470", + "ecelp9600", + "egg", + "eol", + "eot", + "epub", + "exe", + "f4v", + "fbs", + "fh", + "fla", + "flac", + "flatpak", + "fli", + "flv", + "fpx", + "fst", + "fvt", + "g3", + "gh", + "gif", + "graffle", + "gz", + "gzip", + "h261", + "h263", + "h264", + "icns", + "ico", + "ief", + "img", + "ipa", + "iso", + "jar", + "jpeg", + "jpg", + "jpgv", + "jpm", + "jxr", + "key", + "ktx", + "lha", + "lib", + "lvp", + "lz", + "lzh", + "lzma", + "lzo", + "m3u", + "m4a", + "m4v", + "mar", + "mdi", + "mht", + "mid", + "midi", + "mj2", + "mka", + "mkv", + "mmr", + "mng", + "mobi", + "mov", + "movie", + "mp3", + "mp4", + "mp4a", + "mpeg", + "mpg", + "mpga", + "mxu", + "nef", + "npx", + "numbers", + "nupkg", + "o", + "odp", + "ods", + "odt", + "oga", + "ogg", + "ogv", + "otf", + "ott", + "pages", + "pbm", + "pcx", + "pdb", + "pdf", + "pea", + "pgm", + "pic", + "png", + "pnm", + "pot", + "potm", + "potx", + "ppa", + "ppam", + "ppm", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx", + "psd", + "pya", + "pyc", + "pyo", + "pyv", + "qt", + "rar", + "ras", + "raw", + "resources", + "rgb", + "rip", + "rlc", + "rmf", + "rmvb", + "rpm", + "rtf", + "rz", + "s3m", + "s7z", + "scpt", + "sgi", + "shar", + "snap", + "sil", + "sketch", + "slk", + "smv", + "snk", + "so", + "stl", + "suo", + "sub", + "swf", + "tar", + "tbz", + "tbz2", + "tga", + "tgz", + "thmx", + "tif", + "tiff", + "tlz", + "ttc", + "ttf", + "txz", + "udf", + "uvh", + "uvi", + "uvm", + "uvp", + "uvs", + "uvu", + "viv", + "vob", + "war", + "wav", + "wax", + "wbmp", + "wdp", + "weba", + "webm", + "webp", + "whl", + "wim", + "wm", + "wma", + "wmv", + "wmx", + "woff", + "woff2", + "wrm", + "wvx", + "xbm", + "xif", + "xla", + "xlam", + "xls", + "xlsb", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx", + "xm", + "xmind", + "xpi", + "xpm", + "xwd", + "xz", + "z", + "zip", + "zipx" +]; - return min; - } +var binaryExtensions$1 = require$$0$1; - if ('TEAMCITY_VERSION' in env$2) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0; - } +const path$8 = path$b; +const binaryExtensions = binaryExtensions$1; - if (env$2.COLORTERM === 'truecolor') { - return 3; - } +const extensions = new Set(binaryExtensions); - if ('TERM_PROGRAM' in env$2) { - const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10); +var isBinaryPath$1 = filePath => extensions.has(path$8.extname(filePath).slice(1).toLowerCase()); - switch (env$2.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default - } - } +var constants$1 = {}; - if (/-256(color)?$/i.test(env$2.TERM)) { - return 2; - } +(function (exports) { - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) { - return 1; - } +const {sep} = path$b; +const {platform} = process; +const os = require$$0$2; - if ('COLORTERM' in env$2) { - return 1; - } +exports.EV_ALL = 'all'; +exports.EV_READY = 'ready'; +exports.EV_ADD = 'add'; +exports.EV_CHANGE = 'change'; +exports.EV_ADD_DIR = 'addDir'; +exports.EV_UNLINK = 'unlink'; +exports.EV_UNLINK_DIR = 'unlinkDir'; +exports.EV_RAW = 'raw'; +exports.EV_ERROR = 'error'; - if (env$2.TERM === 'dumb') { - return min; - } +exports.STR_DATA = 'data'; +exports.STR_END = 'end'; +exports.STR_CLOSE = 'close'; - return min; -} +exports.FSEVENT_CREATED = 'created'; +exports.FSEVENT_MODIFIED = 'modified'; +exports.FSEVENT_DELETED = 'deleted'; +exports.FSEVENT_MOVED = 'moved'; +exports.FSEVENT_CLONED = 'cloned'; +exports.FSEVENT_UNKNOWN = 'unknown'; +exports.FSEVENT_TYPE_FILE = 'file'; +exports.FSEVENT_TYPE_DIRECTORY = 'directory'; +exports.FSEVENT_TYPE_SYMLINK = 'symlink'; -function getSupportLevel$2(stream) { - const level = supportsColor$2(stream); - return translateLevel$2(level); -} +exports.KEY_LISTENERS = 'listeners'; +exports.KEY_ERR = 'errHandlers'; +exports.KEY_RAW = 'rawEmitters'; +exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW]; -var supportsColor_1$2 = { - supportsColor: getSupportLevel$2, - stdout: getSupportLevel$2(process.stdout), - stderr: getSupportLevel$2(process.stderr) -}; +exports.DOT_SLASH = `.${sep}`; -const TEMPLATE_REGEX$1 = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; -const STYLE_REGEX$1 = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; -const STRING_REGEX$1 = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX$1 = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; +exports.BACK_SLASH_RE = /\\/g; +exports.DOUBLE_SLASH_RE = /\/\//; +exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; +exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; +exports.REPLACER_RE = /^\.[/\\]/; -const ESCAPES$1 = new Map([ - ['n', '\n'], - ['r', '\r'], - ['t', '\t'], - ['b', '\b'], - ['f', '\f'], - ['v', '\v'], - ['0', '\0'], - ['\\', '\\'], - ['e', '\u001B'], - ['a', '\u0007'] -]); +exports.SLASH = '/'; +exports.SLASH_SLASH = '//'; +exports.BRACE_START = '{'; +exports.BANG = '!'; +exports.ONE_DOT = '.'; +exports.TWO_DOTS = '..'; +exports.STAR = '*'; +exports.GLOBSTAR = '**'; +exports.ROOT_GLOBSTAR = '/**/*'; +exports.SLASH_GLOBSTAR = '/**'; +exports.DIR_SUFFIX = 'Dir'; +exports.ANYMATCH_OPTS = {dot: true}; +exports.STRING_TYPE = 'string'; +exports.FUNCTION_TYPE = 'function'; +exports.EMPTY_STR = ''; +exports.EMPTY_FN = () => {}; +exports.IDENTITY_FN = val => val; -function unescape$1(c) { - if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { - return String.fromCharCode(parseInt(c.slice(1), 16)); - } +exports.isWindows = platform === 'win32'; +exports.isMacos = platform === 'darwin'; +exports.isLinux = platform === 'linux'; +exports.isIBMi = os.type() === 'OS400'; +}(constants$1)); - return ESCAPES$1.get(c) || c; -} +const fs$8 = require$$0$3; +const sysPath$2 = path$b; +const { promisify: promisify$2 } = require$$0$4; +const isBinaryPath = isBinaryPath$1; +const { + isWindows: isWindows$3, + isLinux, + EMPTY_FN: EMPTY_FN$2, + EMPTY_STR: EMPTY_STR$1, + KEY_LISTENERS, + KEY_ERR, + KEY_RAW, + HANDLER_KEYS, + EV_CHANGE: EV_CHANGE$2, + EV_ADD: EV_ADD$2, + EV_ADD_DIR: EV_ADD_DIR$2, + EV_ERROR: EV_ERROR$2, + STR_DATA: STR_DATA$1, + STR_END: STR_END$2, + BRACE_START: BRACE_START$1, + STAR +} = constants$1; -function parseArguments$1(name, args) { - const results = []; - const chunks = args.trim().split(/\s*,\s*/g); - let matches; +const THROTTLE_MODE_WATCH = 'watch'; - for (const chunk of chunks) { - if (!isNaN(chunk)) { - results.push(Number(chunk)); - } else if ((matches = chunk.match(STRING_REGEX$1))) { - results.push(matches[2].replace(ESCAPE_REGEX$1, (m, escape, chr) => escape ? unescape$1(escape) : chr)); - } else { - throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); - } - } +const open = promisify$2(fs$8.open); +const stat$2 = promisify$2(fs$8.stat); +const lstat$1 = promisify$2(fs$8.lstat); +const close = promisify$2(fs$8.close); +const fsrealpath = promisify$2(fs$8.realpath); - return results; -} +const statMethods$1 = { lstat: lstat$1, stat: stat$2 }; -function parseStyle$1(style) { - STYLE_REGEX$1.lastIndex = 0; +// TODO: emit errors properly. Example: EMFILE on Macos. +const foreach = (val, fn) => { + if (val instanceof Set) { + val.forEach(fn); + } else { + fn(val); + } +}; - const results = []; - let matches; +const addAndConvert = (main, prop, item) => { + let container = main[prop]; + if (!(container instanceof Set)) { + main[prop] = container = new Set([container]); + } + container.add(item); +}; - while ((matches = STYLE_REGEX$1.exec(style)) !== null) { - const name = matches[1]; +const clearItem = cont => key => { + const set = cont[key]; + if (set instanceof Set) { + set.clear(); + } else { + delete cont[key]; + } +}; - if (matches[2]) { - const args = parseArguments$1(name, matches[2]); - results.push([name].concat(args)); - } else { - results.push([name]); - } - } +const delFromSet = (main, prop, item) => { + const container = main[prop]; + if (container instanceof Set) { + container.delete(item); + } else if (container === item) { + delete main[prop]; + } +}; - return results; -} +const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; -function buildStyle$1(chalk, styles) { - const enabled = {}; +/** + * @typedef {String} Path + */ - for (const layer of styles) { - for (const style of layer.styles) { - enabled[style[0]] = layer.inverse ? null : style.slice(1); - } - } +// fs_watch helpers - let current = chalk; - for (const styleName of Object.keys(enabled)) { - if (Array.isArray(enabled[styleName])) { - if (!(styleName in current)) { - throw new Error(`Unknown Chalk style: ${styleName}`); - } +// object to hold per-process fs_watch instances +// (may be shared across chokidar FSWatcher instances) - if (enabled[styleName].length > 0) { - current = current[styleName].apply(current, enabled[styleName]); - } else { - current = current[styleName]; - } - } - } +/** + * @typedef {Object} FsWatchContainer + * @property {Set} listeners + * @property {Set} errHandlers + * @property {Set} rawEmitters + * @property {fs.FSWatcher=} watcher + * @property {Boolean=} watcherUnusable + */ - return current; -} +/** + * @type {Map} + */ +const FsWatchInstances = new Map(); -var templates$1 = (chalk, tmp) => { - const styles = []; - const chunks = []; - let chunk = []; +/** + * Instantiates the fs_watch interface + * @param {String} path to be watched + * @param {Object} options to be passed to fs_watch + * @param {Function} listener main event handler + * @param {Function} errHandler emits info about errors + * @param {Function} emitRaw emits raw event data + * @returns {fs.FSWatcher} new fsevents instance + */ +function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { + const handleEvent = (rawEvent, evPath) => { + listener(path); + emitRaw(rawEvent, evPath, {watchedPath: path}); - // eslint-disable-next-line max-params - tmp.replace(TEMPLATE_REGEX$1, (m, escapeChar, inverse, style, close, chr) => { - if (escapeChar) { - chunk.push(unescape$1(escapeChar)); - } else if (style) { - const str = chunk.join(''); - chunk = []; - chunks.push(styles.length === 0 ? str : buildStyle$1(chalk, styles)(str)); - styles.push({inverse, styles: parseStyle$1(style)}); - } else if (close) { - if (styles.length === 0) { - throw new Error('Found extraneous } in Chalk template literal'); - } + // emit based on events occurring for files from a directory's watcher in + // case the file's watcher misses it (and rely on throttling to de-dupe) + if (evPath && path !== evPath) { + fsWatchBroadcast( + sysPath$2.resolve(path, evPath), KEY_LISTENERS, sysPath$2.join(path, evPath) + ); + } + }; + try { + return fs$8.watch(path, options, handleEvent); + } catch (error) { + errHandler(error); + } +} - chunks.push(buildStyle$1(chalk, styles)(chunk.join(''))); - chunk = []; - styles.pop(); - } else { - chunk.push(chr); - } - }); +/** + * Helper for passing fs_watch event data to a collection of listeners + * @param {Path} fullPath absolute path bound to fs_watch instance + * @param {String} type listener type + * @param {*=} val1 arguments to be passed to listeners + * @param {*=} val2 + * @param {*=} val3 + */ +const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { + const cont = FsWatchInstances.get(fullPath); + if (!cont) return; + foreach(cont[type], (listener) => { + listener(val1, val2, val3); + }); +}; - chunks.push(chunk.join('')); +/** + * Instantiates the fs_watch interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path + * @param {String} fullPath absolute path + * @param {Object} options to be passed to fs_watch + * @param {Object} handlers container for event listener functions + */ +const setFsWatchListener = (path, fullPath, options, handlers) => { + const {listener, errHandler, rawEmitter} = handlers; + let cont = FsWatchInstances.get(fullPath); - if (styles.length > 0) { - const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; - throw new Error(errMsg); - } + /** @type {fs.FSWatcher=} */ + let watcher; + if (!options.persistent) { + watcher = createFsWatchInstance( + path, options, listener, errHandler, rawEmitter + ); + return watcher.close.bind(watcher); + } + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_ERR, errHandler); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + watcher = createFsWatchInstance( + path, + options, + fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), + errHandler, // no need to use broadcast here + fsWatchBroadcast.bind(null, fullPath, KEY_RAW) + ); + if (!watcher) return; + watcher.on(EV_ERROR$2, async (error) => { + const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); + cont.watcherUnusable = true; // documented since Node 10.4.1 + // Workaround for https://github.com/joyent/node/issues/4337 + if (isWindows$3 && error.code === 'EPERM') { + try { + const fd = await open(path, 'r'); + await close(fd); + broadcastErr(error); + } catch (err) {} + } else { + broadcastErr(error); + } + }); + cont = { + listeners: listener, + errHandlers: errHandler, + rawEmitters: rawEmitter, + watcher + }; + FsWatchInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); - return chunks.join(''); + // removes this instance's listeners and closes the underlying fs_watch + // instance if there are no more listeners left + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_ERR, errHandler); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + // Check to protect against issue gh-730. + // if (cont.watcherUnusable) { + cont.watcher.close(); + // } + FsWatchInstances.delete(fullPath); + HANDLER_KEYS.forEach(clearItem(cont)); + cont.watcher = undefined; + Object.freeze(cont); + } + }; }; -(function (module) { -const escapeStringRegexp = escapeStringRegexp$3; -const ansiStyles = ansiStyles$2.exports; -const stdoutColor = supportsColor_1$2.stdout; +// fs_watchFile helpers -const template = templates$1; +// object to hold per-process fs_watchFile instances +// (may be shared across chokidar FSWatcher instances) +const FsWatchFileInstances = new Map(); -const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); +/** + * Instantiates the fs_watchFile interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path to be watched + * @param {String} fullPath absolute path + * @param {Object} options options to be passed to fs_watchFile + * @param {Object} handlers container for event listener functions + * @returns {Function} closer + */ +const setFsWatchFileListener = (path, fullPath, options, handlers) => { + const {listener, rawEmitter} = handlers; + let cont = FsWatchFileInstances.get(fullPath); -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; + const copts = cont && cont.options; + if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { + fs$8.unwatchFile(fullPath); + cont = undefined; + } -// `color-convert` models to exclude from the Chalk API due to conflicts and such -const skipModels = new Set(['gray']); + /* eslint-enable no-unused-vars, prefer-destructuring */ -const styles = Object.create(null); + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + // TODO + // listeners.add(listener); + // rawEmitters.add(rawEmitter); + cont = { + listeners: listener, + rawEmitters: rawEmitter, + options, + watcher: fs$8.watchFile(fullPath, options, (curr, prev) => { + foreach(cont.rawEmitters, (rawEmitter) => { + rawEmitter(EV_CHANGE$2, fullPath, {curr, prev}); + }); + const currmtime = curr.mtimeMs; + if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { + foreach(cont.listeners, (listener) => listener(path, curr)); + } + }) + }; + FsWatchFileInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); -function applyOptions(obj, options) { - options = options || {}; + // Removes this instance's listeners and closes the underlying fs_watchFile + // instance if there are no more listeners left. + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + FsWatchFileInstances.delete(fullPath); + fs$8.unwatchFile(fullPath); + cont.options = cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; - // Detect level if not set manually - const scLevel = stdoutColor ? stdoutColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +/** + * @mixin + */ +class NodeFsHandler$1 { + +/** + * @param {import("../index").FSWatcher} fsW + */ +constructor(fsW) { + this.fsw = fsW; + this._boundHandleError = (error) => fsW._handleError(error); } -function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); +/** + * Watch file for changes with fs_watchFile or fs_watch. + * @param {String} path to file or dir + * @param {Function} listener on fs change + * @returns {Function} closer for the watcher instance + */ +_watchWithNodeFs(path, listener) { + const opts = this.fsw.options; + const directory = sysPath$2.dirname(path); + const basename = sysPath$2.basename(path); + const parent = this.fsw._getWatchedDir(directory); + parent.add(basename); + const absolutePath = sysPath$2.resolve(path); + const options = {persistent: opts.persistent}; + if (!listener) listener = EMPTY_FN$2; - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; + let closer; + if (opts.usePolling) { + options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ? + opts.binaryInterval : opts.interval; + closer = setFsWatchFileListener(path, absolutePath, options, { + listener, + rawEmitter: this.fsw._emitRaw + }); + } else { + closer = setFsWatchListener(path, absolutePath, options, { + listener, + errHandler: this._boundHandleError, + rawEmitter: this.fsw._emitRaw + }); + } + return closer; +} - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); +/** + * Watch a file and emit add event if warranted. + * @param {Path} file Path + * @param {fs.Stats} stats result of fs_stat + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @returns {Function} closer for the watcher instance + */ +_handleFile(file, stats, initialAdd) { + if (this.fsw.closed) { + return; + } + const dirname = sysPath$2.dirname(file); + const basename = sysPath$2.basename(file); + const parent = this.fsw._getWatchedDir(dirname); + // stats is always present + let prevStats = stats; - chalk.template.constructor = Chalk; + // if the file is already being watched, do nothing + if (parent.has(basename)) return; - return chalk.template; - } + const listener = async (path, newStats) => { + if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; + if (!newStats || newStats.mtimeMs === 0) { + try { + const newStats = await stat$2(file); + if (this.fsw.closed) return; + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE$2, file, newStats); + } + if (isLinux && prevStats.ino !== newStats.ino) { + this.fsw._closeFile(path); + prevStats = newStats; + this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener)); + } else { + prevStats = newStats; + } + } catch (error) { + // Fix issues where mtime is null but file is still present + this.fsw._remove(dirname, basename); + } + // add is about to be emitted if file not already tracked in parent + } else if (parent.has(basename)) { + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE$2, file, newStats); + } + prevStats = newStats; + } + }; + // kick off the watcher + const closer = this._watchWithNodeFs(file, listener); - applyOptions(this, options); -} + // emit an add event if we're supposed to + if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { + if (!this.fsw._throttle(EV_ADD$2, file, 0)) return; + this.fsw._emit(EV_ADD$2, file, stats); + } -// Use bright blue on Windows as the normal blue color is illegible -if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; + return closer; } -for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); - } - }; -} +/** + * Handle symlinks encountered while reading a dir. + * @param {Object} entry returned by readdirp + * @param {String} directory path of dir being read + * @param {String} path of this item + * @param {String} item basename of this item + * @returns {Promise} true if no more processing is needed for this entry. + */ +async _handleSymlink(entry, directory, path, item) { + if (this.fsw.closed) { + return; + } + const full = entry.fullPath; + const dir = this.fsw._getWatchedDir(directory); -styles.visible = { - get() { - return build.call(this, this._styles || [], true, 'visible'); - } -}; + if (!this.fsw.options.followSymlinks) { + // watch symlink directly (don't follow) and detect changes + this.fsw._incrReadyCount(); + const linkPath = await fsrealpath(path); + if (this.fsw.closed) return; + if (dir.has(item)) { + if (this.fsw._symlinkPaths.get(full) !== linkPath) { + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_CHANGE$2, path, entry.stats); + } + } else { + dir.add(item); + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_ADD$2, path, entry.stats); + } + this.fsw._emitReady(); + return true; + } -ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); -for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } + // don't follow the same symlink more than once + if (this.fsw._symlinkPaths.has(full)) { + return true; + } - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; + this.fsw._symlinkPaths.set(full, true); } -ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); -for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } - - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} +_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { + // Normalize the directory name on Windows + directory = sysPath$2.join(directory, EMPTY_STR$1); -const proto = Object.defineProperties(() => {}, styles); + if (!wh.hasGlob) { + throttler = this.fsw._throttle('readdir', directory, 1000); + if (!throttler) return; + } -function build(_styles, _empty, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; + const previous = this.fsw._getWatchedDir(wh.path); + const current = new Set(); - builder._styles = _styles; - builder._empty = _empty; + let stream = this.fsw._readdirp(directory, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + depth: 0 + }).on(STR_DATA$1, async (entry) => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const item = entry.path; + let path = sysPath$2.join(directory, item); + current.add(item); - const self = this; + if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { + return; + } - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - } - }); + if (this.fsw.closed) { + stream = undefined; + return; + } + // Files that present in current directory snapshot + // but absent in previous are added to watch list and + // emit `add` event. + if (item === target || !target && !previous.has(item)) { + this.fsw._incrReadyCount(); - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - } - }); + // ensure relativeness of path is preserved in case of watcher reuse + path = sysPath$2.join(dir, sysPath$2.relative(dir, path)); - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; + this._addToNodeFs(path, initialAdd, wh, depth + 1); + } + }).on(EV_ERROR$2, this._boundHandleError); - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto + return new Promise(resolve => + stream.once(STR_END$2, () => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const wasThrottled = throttler ? throttler.clear() : false; - return builder; -} + resolve(); -function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); + // Files that absent in current directory snapshot + // but present in previous emit `remove` event + // and are removed from @watched[directory]. + previous.getChildren().filter((item) => { + return item !== directory && + !current.has(item) && + // in case of intersecting globs; + // a path may have been filtered out of this readdir, but + // shouldn't be removed because it matches a different glob + (!wh.hasGlob || wh.filterPath({ + fullPath: sysPath$2.resolve(directory, item) + })); + }).forEach((item) => { + this.fsw._remove(directory, item); + }); - if (argsLen === 0) { - return ''; - } + stream = undefined; - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || this.level <= 0 || !str) { - return this._empty ? '' : str; - } + // one more time for any missed in case changes came in extremely quickly + if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); + }) + ); +} - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } +/** + * Read directory to add / remove files from `@watched` list and re-read it on change. + * @param {String} dir fs path + * @param {fs.Stats} stats + * @param {Boolean} initialAdd + * @param {Number} depth relative to user-supplied path + * @param {String} target child path targeted for watch + * @param {Object} wh Common watch helpers for this path + * @param {String} realpath + * @returns {Promise} closer for the watcher instance. + */ +async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { + const parentDir = this.fsw._getWatchedDir(sysPath$2.dirname(dir)); + const tracked = parentDir.has(sysPath$2.basename(dir)); + if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { + if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats); + } - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; + // ensure dir is tracked (harmless if redundant) + parentDir.add(sysPath$2.basename(dir)); + this.fsw._getWatchedDir(dir); + let throttler; + let closer; - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } + const oDepth = this.fsw.options.depth; + if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) { + if (!target) { + await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); + if (this.fsw.closed) return; + } - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; + closer = this._watchWithNodeFs(dir, (dirPath, stats) => { + // if current directory is removed, do nothing + if (stats && stats.mtimeMs === 0) return; - return str; + this._handleRead(dirPath, false, wh, target, dir, depth, throttler); + }); + } + return closer; } -function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } +/** + * Handle added file, directory, or glob pattern. + * Delegates call to _handleFile / _handleDir after checks. + * @param {String} path to file or ir + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @param {Object} priorWh depth relative to user-supplied path + * @param {Number} depth Child path actually targeted for watch + * @param {String=} target Child path actually targeted for watch + * @returns {Promise} + */ +async _addToNodeFs(path, initialAdd, priorWh, depth, target) { + const ready = this.fsw._emitReady; + if (this.fsw._isIgnored(path) || this.fsw.closed) { + ready(); + return false; + } - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; + const wh = this.fsw._getWatchHelpers(path, depth); + if (!wh.hasGlob && priorWh) { + wh.hasGlob = priorWh.hasGlob; + wh.globFilter = priorWh.globFilter; + wh.filterPath = entry => priorWh.filterPath(entry); + wh.filterDir = entry => priorWh.filterDir(entry); + } - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods$1[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + ready(); + return false; + } - return template(chalk, parts.join('')); -} + const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START$1); + let closer; + if (stats.isDirectory()) { + const absPath = sysPath$2.resolve(path); + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); + if (this.fsw.closed) return; + // preserve this symlink's target path + if (absPath !== targetPath && targetPath !== undefined) { + this.fsw._symlinkPaths.set(absPath, targetPath); + } + } else if (stats.isSymbolicLink()) { + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + const parent = sysPath$2.dirname(wh.watchPath); + this.fsw._getWatchedDir(parent).add(wh.watchPath); + this.fsw._emit(EV_ADD$2, wh.watchPath, stats); + closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); + if (this.fsw.closed) return; -Object.defineProperties(Chalk.prototype, styles); + // preserve this symlink's target path + if (targetPath !== undefined) { + this.fsw._symlinkPaths.set(sysPath$2.resolve(path), targetPath); + } + } else { + closer = this._handleFile(wh.watchPath, stats, initialAdd); + } + ready(); -module.exports = Chalk(); // eslint-disable-line new-cap -module.exports.supportsColor = stdoutColor; -module.exports.default = module.exports; // For TypeScript -}(chalk$2)); + this.fsw._addPathCloser(path, closer); + return false; -Object.defineProperty(lib$8, "__esModule", { - value: true -}); -lib$8.shouldHighlight = shouldHighlight; -lib$8.getChalk = getChalk; -lib$8.default = highlight; + } catch (error) { + if (this.fsw._handleError(error)) { + ready(); + return path; + } + } +} -var _jsTokens = jsTokens; +} -var _helperValidatorIdentifier = lib$7; +var nodefsHandler = NodeFsHandler$1; -var _chalk = chalk$2.exports; +var fseventsHandler = {exports: {}}; -const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); +const fs$7 = require$$0$3; +const sysPath$1 = path$b; +const { promisify: promisify$1 } = require$$0$4; -function getDefs$1(chalk) { - return { - keyword: chalk.cyan, - capitalized: chalk.yellow, - jsxIdentifier: chalk.yellow, - punctuator: chalk.yellow, - number: chalk.magenta, - string: chalk.green, - regex: chalk.magenta, - comment: chalk.grey, - invalid: chalk.white.bgRed.bold - }; +let fsevents; +try { + fsevents = undefined; +} catch (error) { + if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error); } -const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; -const BRACKET = /^[()[\]{}]$/; -let tokenize$3; -{ - const JSX_TAG = /^[a-z][\w-]*$/i; +if (fsevents) { + // TODO: real check + const mtch = process.version.match(/v(\d+)\.(\d+)/); + if (mtch && mtch[1] && mtch[2]) { + const maj = Number.parseInt(mtch[1], 10); + const min = Number.parseInt(mtch[2], 10); + if (maj === 8 && min < 16) { + fsevents = undefined; + } + } +} - const getTokenType = function (token, offset, text) { - if (token.type === "name") { - if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) { - return "keyword"; - } +const { + EV_ADD: EV_ADD$1, + EV_CHANGE: EV_CHANGE$1, + EV_ADD_DIR: EV_ADD_DIR$1, + EV_UNLINK: EV_UNLINK$1, + EV_ERROR: EV_ERROR$1, + STR_DATA, + STR_END: STR_END$1, + FSEVENT_CREATED, + FSEVENT_MODIFIED, + FSEVENT_DELETED, + FSEVENT_MOVED, + // FSEVENT_CLONED, + FSEVENT_UNKNOWN, + FSEVENT_TYPE_FILE, + FSEVENT_TYPE_DIRECTORY, + FSEVENT_TYPE_SYMLINK, - if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == " isNaN(value) ? {} : {depth: value}; - if (token.type === "punctuator" && BRACKET.test(token.value)) { - return "bracket"; - } +const stat$1 = promisify$1(fs$7.stat); +const lstat = promisify$1(fs$7.lstat); +const realpath$1 = promisify$1(fs$7.realpath); - if (token.type === "invalid" && (token.value === "@" || token.value === "#")) { - return "punctuator"; - } +const statMethods = { stat: stat$1, lstat }; - return token.type; - }; +/** + * @typedef {String} Path + */ - tokenize$3 = function* (text) { - let match; +/** + * @typedef {Object} FsEventsWatchContainer + * @property {Set} listeners + * @property {Function} rawEmitter + * @property {{stop: Function}} watcher + */ - while (match = _jsTokens.default.exec(text)) { - const token = _jsTokens.matchToToken(match); +// fsevents instance helper functions +/** + * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) + * @type {Map} + */ +const FSEventsWatchers = new Map(); - yield { - type: getTokenType(token, match.index, text), - value: token.value - }; - } - }; -} +// Threshold of duplicate path prefixes at which to start +// consolidating going forward +const consolidateThreshhold = 10; -function highlightTokens(defs, text) { - let highlighted = ""; +const wrongEventFlags = new Set([ + 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 +]); - for (const { - type, - value - } of tokenize$3(text)) { - const colorize = defs[type]; +/** + * Instantiates the fsevents interface + * @param {Path} path path to be watched + * @param {Function} callback called when fsevents is bound and ready + * @returns {{stop: Function}} new fsevents instance + */ +const createFSEventsInstance = (path, callback) => { + const stop = fsevents.watch(path, callback); + return {stop}; +}; - if (colorize) { - highlighted += value.split(NEWLINE$1).map(str => colorize(str)).join("\n"); - } else { - highlighted += value; - } - } +/** + * Instantiates the fsevents interface or binds listeners to an existing one covering + * the same file tree. + * @param {Path} path - to be watched + * @param {Path} realPath - real path for symlinks + * @param {Function} listener - called when fsevents emits events + * @param {Function} rawEmitter - passes data to listeners of the 'raw' event + * @returns {Function} closer + */ +function setFSEventsListener(path, realPath, listener, rawEmitter) { + let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath; - return highlighted; -} + const parentPath = sysPath$1.dirname(watchPath); + let cont = FSEventsWatchers.get(watchPath); -function shouldHighlight(options) { - return !!_chalk.supportsColor || options.forceColor; -} + // If we've accumulated a substantial number of paths that + // could have been consolidated by watching one directory + // above the current one, create a watcher on the parent + // path instead, so that we do consolidate going forward. + if (couldConsolidate(parentPath)) { + watchPath = parentPath; + } -function getChalk(options) { - return options.forceColor ? new _chalk.constructor({ - enabled: true, - level: 1 - }) : _chalk; -} + const resolvedPath = sysPath$1.resolve(path); + const hasSymlink = resolvedPath !== realPath; -function highlight(code, options = {}) { - if (shouldHighlight(options)) { - const chalk = getChalk(options); - const defs = getDefs$1(chalk); - return highlightTokens(defs, code); - } else { - return code; + const filteredListener = (fullPath, flags, info) => { + if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); + if ( + fullPath === resolvedPath || + !fullPath.indexOf(resolvedPath + sysPath$1.sep) + ) listener(fullPath, flags, info); + }; + + // check if there is already a watcher on a parent path + // modifies `watchPath` to the parent path when it finds a match + let watchedParent = false; + for (const watchedPath of FSEventsWatchers.keys()) { + if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) { + watchPath = watchedPath; + cont = FSEventsWatchers.get(watchPath); + watchedParent = true; + break; + } } -} -Object.defineProperty(lib$9, "__esModule", { - value: true -}); -lib$9.codeFrameColumns = codeFrameColumns$1; -lib$9.default = _default$1; + if (cont || watchedParent) { + cont.listeners.add(filteredListener); + } else { + cont = { + listeners: new Set([filteredListener]), + rawEmitter, + watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { + if (!cont.listeners.size) return; + const info = fsevents.getInfo(fullPath, flags); + cont.listeners.forEach(list => { + list(fullPath, flags, info); + }); -var _highlight = lib$8; + cont.rawEmitter(info.event, fullPath, info); + }) + }; + FSEventsWatchers.set(watchPath, cont); + } -let deprecationWarningShown = false; + // removes this instance's listeners and closes the underlying fsevents + // instance if there are no more listeners left + return () => { + const lst = cont.listeners; -function getDefs(chalk) { - return { - gutter: chalk.grey, - marker: chalk.red.bold, - message: chalk.red.bold + lst.delete(filteredListener); + if (!lst.size) { + FSEventsWatchers.delete(watchPath); + if (cont.watcher) return cont.watcher.stop().then(() => { + cont.rawEmitter = cont.watcher = undefined; + Object.freeze(cont); + }); + } }; } -const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; +// Decide whether or not we should start a new higher-level +// parent watcher +const couldConsolidate = (path) => { + let count = 0; + for (const watchPath of FSEventsWatchers.keys()) { + if (watchPath.indexOf(path) === 0) { + count++; + if (count >= consolidateThreshhold) { + return true; + } + } + } -function getMarkerLines(loc, source, opts) { - const startLoc = Object.assign({ - column: 0, - line: -1 - }, loc.start); - const endLoc = Object.assign({}, startLoc, loc.end); - const { - linesAbove = 2, - linesBelow = 3 - } = opts || {}; - const startLine = startLoc.line; - const startColumn = startLoc.column; - const endLine = endLoc.line; - const endColumn = endLoc.column; - let start = Math.max(startLine - (linesAbove + 1), 0); - let end = Math.min(source.length, endLine + linesBelow); + return false; +}; - if (startLine === -1) { - start = 0; - } +// returns boolean indicating whether fsevents can be used +const canUse = () => fsevents && FSEventsWatchers.size < 128; - if (endLine === -1) { - end = source.length; +// determines subdirectory traversal levels from root to path +const calcDepth = (path, root) => { + let i = 0; + while (!path.indexOf(root) && (path = sysPath$1.dirname(path)) !== root) i++; + return i; +}; + +// returns boolean indicating whether the fsevents' event info has the same type +// as the one returned by fs.stat +const sameTypes = (info, stats) => ( + info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || + info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || + info.type === FSEVENT_TYPE_FILE && stats.isFile() +); + +/** + * @mixin + */ +class FsEventsHandler$1 { + +/** + * @param {import('../index').FSWatcher} fsw + */ +constructor(fsw) { + this.fsw = fsw; +} +checkIgnored(path, stats) { + const ipaths = this.fsw._ignoredPaths; + if (this.fsw._isIgnored(path, stats)) { + ipaths.add(path); + if (stats && stats.isDirectory()) { + ipaths.add(path + ROOT_GLOBSTAR); + } + return true; } - const lineDiff = endLine - startLine; - const markerLines = {}; + ipaths.delete(path); + ipaths.delete(path + ROOT_GLOBSTAR); +} - if (lineDiff) { - for (let i = 0; i <= lineDiff; i++) { - const lineNumber = i + startLine; +addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1; + this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts); +} - if (!startColumn) { - markerLines[lineNumber] = true; - } else if (i === 0) { - const sourceLength = source[lineNumber - 1].length; - markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]; - } else if (i === lineDiff) { - markerLines[lineNumber] = [0, endColumn]; - } else { - const sourceLength = source[lineNumber - i].length; - markerLines[lineNumber] = [0, sourceLength]; - } +async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + try { + const stats = await stat$1(path); + if (this.fsw.closed) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } - } else { - if (startColumn === endColumn) { - if (startColumn) { - markerLines[startLine] = [startColumn, 0]; - } else { - markerLines[startLine] = true; - } + } catch (error) { + if (error.code === 'EACCES') { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); } else { - markerLines[startLine] = [startColumn, endColumn - startColumn]; + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } } - - return { - start, - end, - markerLines - }; } -function codeFrameColumns$1(rawLines, loc, opts = {}) { - const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts); - const chalk = (0, _highlight.getChalk)(opts); - const defs = getDefs(chalk); +handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { + if (this.fsw.closed || this.checkIgnored(path)) return; - const maybeHighlight = (chalkFn, string) => { - return highlighted ? chalkFn(string) : string; - }; + if (event === EV_UNLINK$1) { + const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY; + // suppress unlink events on never before seen files + if (isDirectory || watchedDir.has(item)) { + this.fsw._remove(parent, item, isDirectory); + } + } else { + if (event === EV_ADD$1) { + // track new directories + if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path); - const lines = rawLines.split(NEWLINE); - const { - start, - end, - markerLines - } = getMarkerLines(loc, lines, opts); - const hasColumns = loc.start && typeof loc.start.column === "number"; - const numberMaxWidth = String(end).length; - const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines; - let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => { - const number = start + 1 + index; - const paddedNumber = ` ${number}`.slice(-numberMaxWidth); - const gutter = ` ${paddedNumber} |`; - const hasMarker = markerLines[number]; - const lastMarkerLine = !markerLines[number + 1]; + if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { + // push symlinks back to the top of the stack to get handled + const curDepth = opts.depth === undefined ? + undefined : calcDepth(fullPath, realPath) + 1; + return this._addToFsEvents(path, false, true, curDepth); + } - if (hasMarker) { - let markerLine = ""; + // track new paths + // (other than symlinks being followed, which will be tracked soon) + this.fsw._getWatchedDir(parent).add(item); + } + /** + * @type {'add'|'addDir'|'unlink'|'unlinkDir'} + */ + const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; + this.fsw._emit(eventName, path); + if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true); + } +} - if (Array.isArray(hasMarker)) { - const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); - const numberOfMarkers = hasMarker[1] || 1; - markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); +/** + * Handle symlinks encountered during directory scan + * @param {String} watchPath - file/dir path to be watched with fsevents + * @param {String} realPath - real path (in case of symlinks) + * @param {Function} transform - path transformer + * @param {Function} globFilter - path filter in case a glob pattern was provided + * @returns {Function} closer for the watcher instance +*/ +_watchWithFsEvents(watchPath, realPath, transform, globFilter) { + if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; + const opts = this.fsw.options; + const watchCallback = async (fullPath, flags, info) => { + if (this.fsw.closed) return; + if ( + opts.depth !== undefined && + calcDepth(fullPath, realPath) > opts.depth + ) return; + const path = transform(sysPath$1.join( + watchPath, sysPath$1.relative(watchPath, fullPath) + )); + if (globFilter && !globFilter(path)) return; + // ensure directories are tracked + const parent = sysPath$1.dirname(path); + const item = sysPath$1.basename(path); + const watchedDir = this.fsw._getWatchedDir( + info.type === FSEVENT_TYPE_DIRECTORY ? path : parent + ); - if (lastMarkerLine && opts.message) { - markerLine += " " + maybeHighlight(defs.message, opts.message); + // correct for wrong events emitted + if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { + if (typeof opts.ignored === FUNCTION_TYPE$1) { + let stats; + try { + stats = await stat$1(path); + } catch (error) {} + if (this.fsw.closed) return; + if (this.checkIgnored(path, stats)) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); } + } else { + this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); } - - return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); } else { - return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`; + switch (info.event) { + case FSEVENT_CREATED: + case FSEVENT_MODIFIED: + return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + case FSEVENT_DELETED: + case FSEVENT_MOVED: + return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } } - }).join("\n"); + }; - if (opts.message && !hasColumns) { - frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`; + const closer = setFSEventsListener( + watchPath, + realPath, + watchCallback, + this.fsw._emitRaw + ); + + this.fsw._emitReady(); + return closer; +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} linkPath path to symlink + * @param {String} fullPath absolute path to the symlink + * @param {Function} transform pre-existing path transformer + * @param {Number} curDepth level of subdirectories traversed to where symlink is + * @returns {Promise} + */ +async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { + // don't follow the same symlink more than once + if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; + + this.fsw._symlinkPaths.set(fullPath, true); + this.fsw._incrReadyCount(); + + try { + const linkTarget = await realpath$1(linkPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(linkTarget)) { + return this.fsw._emitReady(); + } + + this.fsw._incrReadyCount(); + + // add the linkTarget for watching with a wrapper for transform + // that causes emitted paths to incorporate the link's path + this._addToFsEvents(linkTarget || linkPath, (path) => { + let aliasedPath = linkPath; + if (linkTarget && linkTarget !== DOT_SLASH) { + aliasedPath = path.replace(linkTarget, linkPath); + } else if (path !== DOT_SLASH) { + aliasedPath = sysPath$1.join(linkPath, path); + } + return transform(aliasedPath); + }, false, curDepth); + } catch(error) { + if (this.fsw._handleError(error)) { + return this.fsw._emitReady(); + } } +} - if (highlighted) { - return chalk.reset(frame); - } else { - return frame; +/** + * + * @param {Path} newPath + * @param {fs.Stats} stats + */ +emitAdd(newPath, stats, processPath, opts, forceAdd) { + const pp = processPath(newPath); + const isDir = stats.isDirectory(); + const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp)); + const base = sysPath$1.basename(pp); + + // ensure empty dirs get tracked + if (isDir) this.fsw._getWatchedDir(pp); + if (dirObj.has(base)) return; + dirObj.add(base); + + if (!opts.ignoreInitial || forceAdd === true) { + this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats); } } -function _default$1(rawLines, lineNumber, colNumber, opts = {}) { - if (!deprecationWarningShown) { - deprecationWarningShown = true; - const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; +initWatch(realPath, path, wh, processPath) { + if (this.fsw.closed) return; + const closer = this._watchWithFsEvents( + wh.watchPath, + sysPath$1.resolve(realPath || wh.watchPath), + processPath, + wh.globFilter + ); + this.fsw._addPathCloser(path, closer); +} - if (process.emitWarning) { - process.emitWarning(message, "DeprecationWarning"); - } else { - const deprecationError = new Error(message); - deprecationError.name = "DeprecationWarning"; - console.warn(new Error(message)); - } +/** + * Handle added path with fsevents + * @param {String} path file/dir path or glob pattern + * @param {Function|Boolean=} transform converts working path to what the user expects + * @param {Boolean=} forceAdd ensure add is emitted + * @param {Number=} priorDepth Level of subdirectories already traversed. + * @returns {Promise} + */ +async _addToFsEvents(path, transform, forceAdd, priorDepth) { + if (this.fsw.closed) { + return; } + const opts = this.fsw.options; + const processPath = typeof transform === FUNCTION_TYPE$1 ? transform : IDENTITY_FN; - colNumber = Math.max(colNumber, 0); - const location = { - start: { - column: colNumber, - line: lineNumber + const wh = this.fsw._getWatchHelpers(path); + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + throw null; } - }; - return codeFrameColumns$1(rawLines, location, opts); -} + if (stats.isDirectory()) { + // emit addDir unless this is a glob parent + if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd); -const errorEx = errorEx_1; -const fallback = jsonParseEvenBetterErrors; -const {default: LinesAndColumns} = require$$2; -const {codeFrameColumns} = lib$9; + // don't recurse further if it would exceed depth setting + if (priorDepth && priorDepth > opts.depth) return; -const JSONError = errorEx('JSONError', { - fileName: errorEx.append('in %s'), - codeFrame: errorEx.append('\n\n%s\n') -}); + // scan the contents of the dir + this.fsw._readdirp(wh.watchPath, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + ...Depth(opts.depth - (priorDepth || 0)) + }).on(STR_DATA, (entry) => { + // need to check filterPath on dirs b/c filterDir is less restrictive + if (this.fsw.closed) { + return; + } + if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; -const parseJson = (string, reviver, filename) => { - if (typeof reviver === 'string') { - filename = reviver; - reviver = null; - } + const joinedPath = sysPath$1.join(wh.watchPath, entry.path); + const {fullPath} = entry; - try { - try { - return JSON.parse(string, reviver); - } catch (error) { - fallback(string, reviver); - throw error; - } - } catch (error) { - error.message = error.message.replace(/\n/g, ''); - const indexMatch = error.message.match(/in JSON at position (\d+) while parsing/); + if (wh.followSymlinks && entry.stats.isSymbolicLink()) { + // preserve the current depth here since it can't be derived from + // real paths past the symlink + const curDepth = opts.depth === undefined ? + undefined : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1; - const jsonError = new JSONError(error); - if (filename) { - jsonError.fileName = filename; - } + this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); + } else { + this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); + } + }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => { + this.fsw._emitReady(); + }); + } else { + this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); + this.fsw._emitReady(); + } + } catch (error) { + if (!error || this.fsw._handleError(error)) { + // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__- + this.fsw._emitReady(); + this.fsw._emitReady(); + } + } - if (indexMatch && indexMatch.length > 0) { - const lines = new LinesAndColumns(string); - const index = Number(indexMatch[1]); - const location = lines.locationForIndex(index); + if (opts.persistent && forceAdd !== true) { + if (typeof transform === FUNCTION_TYPE$1) { + // realpath has already been resolved + this.initWatch(undefined, path, wh, processPath); + } else { + let realPath; + try { + realPath = await realpath$1(wh.watchPath); + } catch (e) {} + this.initWatch(realPath, path, wh, processPath); + } + } +} - const codeFrame = codeFrameColumns( - string, - {start: {line: location.line + 1, column: location.column + 1}}, - {highlightCode: true} - ); +} - jsonError.codeFrame = codeFrame; - } +fseventsHandler.exports = FsEventsHandler$1; +fseventsHandler.exports.canUse = canUse; - throw jsonError; - } -}; +const { EventEmitter } = require$$0$5; +const fs$6 = require$$0$3; +const sysPath = path$b; +const { promisify } = require$$0$4; +const readdirp = readdirp_1; +const anymatch = anymatch$2.exports.default; +const globParent = globParent$1; +const isGlob = isGlob$2; +const braces = braces_1; +const normalizePath = normalizePath$2; -parseJson.JSONError = JSONError; +const NodeFsHandler = nodefsHandler; +const FsEventsHandler = fseventsHandler.exports; +const { + EV_ALL, + EV_READY, + EV_ADD, + EV_CHANGE, + EV_UNLINK, + EV_ADD_DIR, + EV_UNLINK_DIR, + EV_RAW, + EV_ERROR, -var parseJson_1 = parseJson; + STR_CLOSE, + STR_END, -var src = {exports: {}}; + BACK_SLASH_RE, + DOUBLE_SLASH_RE, + SLASH_OR_BACK_SLASH_RE, + DOT_RE, + REPLACER_RE, -var browser = {exports: {}}; + SLASH: SLASH$1, + SLASH_SLASH, + BRACE_START, + BANG, + ONE_DOT, + TWO_DOTS, + GLOBSTAR: GLOBSTAR$1, + SLASH_GLOBSTAR, + ANYMATCH_OPTS, + STRING_TYPE, + FUNCTION_TYPE, + EMPTY_STR, + EMPTY_FN, + + isWindows: isWindows$2, + isMacos, + isIBMi +} = constants$1; + +const stat = promisify(fs$6.stat); +const readdir = promisify(fs$6.readdir); /** - * Helpers. + * @typedef {String} Path + * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName + * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType */ -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - /** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public + * @typedef {Object} WatchHelpers + * @property {Boolean} followSymlinks + * @property {'stat'|'lstat'} statMethod + * @property {Path} path + * @property {Path} watchPath + * @property {Function} entryPath + * @property {Boolean} hasGlob + * @property {Object} globFilter + * @property {Function} filterPath + * @property {Function} filterDir */ -var ms = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse$c(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); +const arrify = (value = []) => Array.isArray(value) ? value : [value]; +const flatten$1 = (list, result = []) => { + list.forEach(item => { + if (Array.isArray(item)) { + flatten$1(item, result); + } else { + result.push(item); + } + }); + return result; }; -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ +const unifyPaths = (paths_) => { + /** + * @type {Array} + */ + const paths = flatten$1(arrify(paths_)); + if (!paths.every(p => typeof p === STRING_TYPE)) { + throw new TypeError(`Non-string provided as watch path: ${paths}`); + } + return paths.map(normalizePathToUnix); +}; -function parse$c(str) { - str = String(str); - if (str.length > 100) { - return; +// If SLASH_SLASH occurs at the beginning of path, it is not replaced +// because "//StoragePC/DrivePool/Movies" is a valid network path +const toUnix = (string) => { + let str = string.replace(BACK_SLASH_RE, SLASH$1); + let prepend = false; + if (str.startsWith(SLASH_SLASH)) { + prepend = true; } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; + while (str.match(DOUBLE_SLASH_RE)) { + str = str.replace(DOUBLE_SLASH_RE, SLASH$1); } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; + if (prepend) { + str = SLASH$1 + str; } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ + return str; +}; -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; +// Our version of upath.normalize +// TODO: this is not equal to path-normalize module - investigate why +const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path))); + +const normalizeIgnored = (cwd = EMPTY_STR) => (path) => { + if (typeof path !== STRING_TYPE) return path; + return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path)); +}; + +const getAbsolutePath = (path, cwd) => { + if (sysPath.isAbsolute(path)) { + return path; } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; + if (path.startsWith(BANG)) { + return BANG + sysPath.join(cwd, path.slice(1)); } - return ms + 'ms'; -} + return sysPath.join(cwd, path); +}; + +const undef = (opts, key) => opts[key] === undefined; /** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private + * Directory entry. + * @property {Path} path + * @property {Set} items */ +class DirEntry { + /** + * @param {Path} dir + * @param {Function} removeWatcher + */ + constructor(dir, removeWatcher) { + this.path = dir; + this._removeWatcher = removeWatcher; + /** @type {Set} */ + this.items = new Set(); + } -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural$1(ms, msAbs, d, 'day'); + add(item) { + const {items} = this; + if (!items) return; + if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); } - if (msAbs >= h) { - return plural$1(ms, msAbs, h, 'hour'); + + async remove(item) { + const {items} = this; + if (!items) return; + items.delete(item); + if (items.size > 0) return; + + const dir = this.path; + try { + await readdir(dir); + } catch (err) { + if (this._removeWatcher) { + this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); + } + } } - if (msAbs >= m) { - return plural$1(ms, msAbs, m, 'minute'); + + has(item) { + const {items} = this; + if (!items) return; + return items.has(item); } - if (msAbs >= s) { - return plural$1(ms, msAbs, s, 'second'); + + /** + * @returns {Array} + */ + getChildren() { + const {items} = this; + if (!items) return; + return [...items.values()]; + } + + dispose() { + this.items.clear(); + delete this.path; + delete this._removeWatcher; + delete this.items; + Object.freeze(this); } - return ms + ' ms'; } -/** - * Pluralization helper. - */ +const STAT_METHOD_F = 'stat'; +const STAT_METHOD_L = 'lstat'; +class WatchHelper { + constructor(path, watchPath, follow, fsw) { + this.fsw = fsw; + this.path = path = path.replace(REPLACER_RE, EMPTY_STR); + this.watchPath = watchPath; + this.fullWatchPath = sysPath.resolve(watchPath); + this.hasGlob = watchPath !== path; + /** @type {object|boolean} */ + if (path === EMPTY_STR) this.hasGlob = false; + this.globSymlink = this.hasGlob && follow ? undefined : false; + this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; + this.dirParts = this.getDirParts(path); + this.dirParts.forEach((parts) => { + if (parts.length > 1) parts.pop(); + }); + this.followSymlinks = follow; + this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; + } -function plural$1(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + checkGlobSymlink(entry) { + // only need to resolve once + // first entry should always have entry.parentDir === EMPTY_STR + if (this.globSymlink === undefined) { + this.globSymlink = entry.fullParentDir === this.fullWatchPath ? + false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath}; + } + + if (this.globSymlink) { + return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); + } + + return entry.fullPath; + } + + entryPath(entry) { + return sysPath.join(this.watchPath, + sysPath.relative(this.watchPath, this.checkGlobSymlink(entry)) + ); + } + + filterPath(entry) { + const {stats} = entry; + if (stats && stats.isSymbolicLink()) return this.filterDir(entry); + const resolvedPath = this.entryPath(entry); + const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? + this.globFilter(resolvedPath) : true; + return matchesGlob && + this.fsw._isntIgnored(resolvedPath, stats) && + this.fsw._hasReadPermissions(stats); + } + + getDirParts(path) { + if (!this.hasGlob) return []; + const parts = []; + const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path]; + expandedPath.forEach((path) => { + parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); + }); + return parts; + } + + filterDir(entry) { + if (this.hasGlob) { + const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); + let globstar = false; + this.unmatchedGlob = !this.dirParts.some((parts) => { + return parts.every((part, i) => { + if (part === GLOBSTAR$1) globstar = true; + return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); + }); + }); + } + return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); + } } /** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. + * Watches files & directories for changes. Emitted events: + * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` + * + * new FSWatcher() + * .add(directories) + * .on('add', path => log('File', path, 'was added')) */ +class FSWatcher extends EventEmitter { +// Not indenting methods for history sake; for now. +constructor(_opts) { + super(); -function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = ms; - createDebug.destroy = destroy; + const opts = {}; + if (_opts) Object.assign(opts, _opts); // for frozen objects - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); + /** @type {Map} */ + this._watched = new Map(); + /** @type {Map} */ + this._closers = new Map(); + /** @type {Set} */ + this._ignoredPaths = new Set(); - /** - * The currently active debug mode names, and names to skip. - */ + /** @type {Map} */ + this._throttled = new Map(); - createDebug.names = []; - createDebug.skips = []; + /** @type {Map} */ + this._symlinkPaths = new Map(); - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; + this._streams = new Set(); + this.closed = false; - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; + // Set up default options. + if (undef(opts, 'persistent')) opts.persistent = true; + if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false; + if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false; + if (undef(opts, 'interval')) opts.interval = 100; + if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300; + if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false; + opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } + // Enable fsevents on OS X when polling isn't explicitly enabled. + if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; + // If we can't use fsevents, ensure the options reflect it's disabled. + const canUseFsEvents = FsEventsHandler.canUse(); + if (!canUseFsEvents) opts.useFsEvents = false; - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; + // Use polling on Mac if not using fsevents. + // Other platforms use non-polling fs_watch. + if (undef(opts, 'usePolling') && !opts.useFsEvents) { + opts.usePolling = isMacos; + } - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } + // Always default to polling on IBM i because fs.watch() is not available on IBM i. + if(isIBMi) { + opts.usePolling = true; + } - const self = debug; + // Global override (useful for end-developers that need to force polling for all + // instances of chokidar, regardless of usage/dependency depth) + const envPoll = process.env.CHOKIDAR_USEPOLLING; + if (envPoll !== undefined) { + const envLower = envPoll.toLowerCase(); - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; + if (envLower === 'false' || envLower === '0') { + opts.usePolling = false; + } else if (envLower === 'true' || envLower === '1') { + opts.usePolling = true; + } else { + opts.usePolling = !!envLower; + } + } + const envInterval = process.env.CHOKIDAR_INTERVAL; + if (envInterval) { + opts.interval = Number.parseInt(envInterval, 10); + } - args[0] = createDebug.coerce(args[0]); + // Editor atomic write normalization enabled by default with fs.watch + if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; + if (opts.atomic) this._pendingUnlinks = new Map(); - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } + if (undef(opts, 'followSymlinks')) opts.followSymlinks = true; - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return '%'; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); + if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false; + if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; + const awf = opts.awaitWriteFinish; + if (awf) { + if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; + if (!awf.pollInterval) awf.pollInterval = 100; + this._pendingWrites = new Map(); + } + if (opts.ignored) opts.ignored = arrify(opts.ignored); - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); + let readyCalls = 0; + this._emitReady = () => { + readyCalls++; + if (readyCalls >= this._readyCount) { + this._emitReady = EMPTY_FN; + this._readyEmitted = true; + // use process.nextTick to allow time for listener to be bound + process.nextTick(() => this.emit(EV_READY)); + } + }; + this._emitRaw = (...args) => this.emit(EV_RAW, ...args); + this._readyEmitted = false; + this.options = opts; - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); + // Initialize with proper watcher. + if (opts.useFsEvents) { + this._fsEventsHandler = new FsEventsHandler(this); + } else { + this._nodeFsHandler = new NodeFsHandler(this); + } - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } + // You’re frozen when your heart’s not open. + Object.freeze(opts); +} - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. +// Public methods - Object.defineProperty(debug, 'enabled', { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } +/** + * Adds paths to be watched on an existing FSWatcher instance + * @param {Path|Array} paths_ + * @param {String=} _origAdd private; for handling non-existent paths to be watched + * @param {Boolean=} _internal private; indicates a non-user add + * @returns {FSWatcher} for chaining + */ +add(paths_, _origAdd, _internal) { + const {cwd, disableGlobbing} = this.options; + this.closed = false; + let paths = unifyPaths(paths_); + if (cwd) { + paths = paths.map((path) => { + const absPath = getAbsolutePath(path, cwd); - return enabledCache; - }, - set: v => { - enableOverride = v; - } - }); + // Check `path` instead of `absPath` because the cwd portion can't be a glob + if (disableGlobbing || !isGlob(path)) { + return absPath; + } + return normalizePath(absPath); + }); + } - // Env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } + // set aside negated glob strings + paths = paths.filter((path) => { + if (path.startsWith(BANG)) { + this._ignoredPaths.add(path.slice(1)); + return false; + } - return debug; - } + // if a path is being added that was previously ignored, stop ignoring it + this._ignoredPaths.delete(path); + this._ignoredPaths.delete(path + SLASH_GLOBSTAR); - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; + return true; + }); - createDebug.names = []; - createDebug.skips = []; + if (this.options.useFsEvents && this._fsEventsHandler) { + if (!this._readyCount) this._readyCount = paths.length; + if (this.options.persistent) this._readyCount *= 2; + paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path)); + } else { + if (!this._readyCount) this._readyCount = 0; + this._readyCount += paths.length; + Promise.all( + paths.map(async path => { + const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd); + if (res) this._emitReady(); + return res; + }) + ).then(results => { + if (this.closed) return; + results.filter(item => item).forEach(item => { + this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); + }); + }); + } - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; + return this; +} - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } +/** + * Close watchers or start ignoring events from specified paths. + * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs + * @returns {FSWatcher} for chaining +*/ +unwatch(paths_) { + if (this.closed) return this; + const paths = unifyPaths(paths_); + const {cwd} = this.options; - namespaces = split[i].replace(/\*/g, '.*?'); + paths.forEach((path) => { + // convert to absolute path unless relative path already matches + if (!sysPath.isAbsolute(path) && !this._closers.has(path)) { + if (cwd) path = sysPath.join(cwd, path); + path = sysPath.resolve(path); + } - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - } + this._closePath(path); - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - let i; - let len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - - /** - * XXX DO NOT USE. This is a temporary stub function. - * XXX It WILL be removed in the next major release. - */ - function destroy() { - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } + this._ignoredPaths.add(path); + if (this._watched.has(path)) { + this._ignoredPaths.add(path + SLASH_GLOBSTAR); + } - createDebug.enable(createDebug.load()); + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + }); - return createDebug; + return this; } -var common$4 = setup; - -/* eslint-env browser */ - -(function (module, exports) { /** - * This is the web browser implementation of `debug()`. - */ + * Close watchers and remove all listeners from watched paths. + * @returns {Promise}. +*/ +close() { + if (this.closed) return this._closePromise; + this.closed = true; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = localstorage(); -exports.destroy = (() => { - let warned = false; + // Memory management. + this.removeAllListeners(); + const closers = []; + this._closers.forEach(closerList => closerList.forEach(closer => { + const promise = closer(); + if (promise instanceof Promise) closers.push(promise); + })); + this._streams.forEach(stream => stream.destroy()); + this._userIgnored = undefined; + this._readyCount = 0; + this._readyEmitted = false; + this._watched.forEach(dirent => dirent.dispose()); + ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => { + this[`_${key}`].clear(); + }); - return () => { - if (!warned) { - warned = true; - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - }; -})(); + this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve(); + return this._closePromise; +} /** - * Colors. - */ + * Expose list of watched paths + * @returns {Object} for chaining +*/ +getWatched() { + const watchList = {}; + this._watched.forEach((entry, dir) => { + const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; + watchList[key || ONE_DOT] = entry.getChildren().sort(); + }); + return watchList; +} -exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' -]; +emitWithAll(event, args) { + this.emit(...args); + if (event !== EV_ERROR) this.emit(EV_ALL, ...args); +} + +// Common helpers +// -------------- /** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors + * Normalize and emit events. + * Calling _emit DOES NOT MEAN emit() would be called! + * @param {EventName} event Type of event + * @param {Path} path File or directory path + * @param {*=} val1 arguments to be passed with event + * @param {*=} val2 + * @param {*=} val3 + * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag */ +async _emit(event, path, val1, val2, val3) { + if (this.closed) return; -// eslint-disable-next-line complexity -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } - - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } + const opts = this.options; + if (isWindows$2) path = sysPath.normalize(path); + if (opts.cwd) path = sysPath.relative(opts.cwd, path); + /** @type Array */ + const args = [event, path]; + if (val3 !== undefined) args.push(val1, val2, val3); + else if (val2 !== undefined) args.push(val1, val2); + else if (val1 !== undefined) args.push(val1); - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} + const awf = opts.awaitWriteFinish; + let pw; + if (awf && (pw = this._pendingWrites.get(path))) { + pw.lastChange = new Date(); + return this; + } -/** - * Colorize log arguments if enabled. - * - * @api public - */ + if (opts.atomic) { + if (event === EV_UNLINK) { + this._pendingUnlinks.set(path, args); + setTimeout(() => { + this._pendingUnlinks.forEach((entry, path) => { + this.emit(...entry); + this.emit(EV_ALL, ...entry); + this._pendingUnlinks.delete(path); + }); + }, typeof opts.atomic === 'number' ? opts.atomic : 100); + return this; + } + if (event === EV_ADD && this._pendingUnlinks.has(path)) { + event = args[0] = EV_CHANGE; + this._pendingUnlinks.delete(path); + } + } -function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); + if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { + const awfEmit = (err, stats) => { + if (err) { + event = args[0] = EV_ERROR; + args[1] = err; + this.emitWithAll(event, args); + } else if (stats) { + // if stats doesn't exist the file must have been deleted + if (args.length > 2) { + args[2] = stats; + } else { + args.push(stats); + } + this.emitWithAll(event, args); + } + }; - if (!this.useColors) { - return; - } + this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit); + return this; + } - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); + if (event === EV_CHANGE) { + const isThrottled = !this._throttle(EV_CHANGE, path, 50); + if (isThrottled) return this; + } - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); + if (opts.alwaysStat && val1 === undefined && + (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE) + ) { + const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path; + let stats; + try { + stats = await stat(fullPath); + } catch (err) {} + // Suppress event when fs_stat fails, to avoid sending undefined 'stat' + if (!stats || this.closed) return; + args.push(stats); + } + this.emitWithAll(event, args); - args.splice(lastC, 0, c); + return this; } /** - * Invokes `console.debug()` when available. - * No-op when `console.debug` is not a "function". - * If `console.debug` is not available, falls back - * to `console.log`. - * - * @api public - */ -exports.log = console.debug || console.log || (() => {}); - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private + * Common handler for errors + * @param {Error} error + * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag */ -function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } +_handleError(error) { + const code = error && error.code; + if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && + (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) + ) { + this.emit(EV_ERROR, error); + } + return error || this.closed; } /** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private + * Helper utility for throttling + * @param {ThrottleType} actionType type being throttled + * @param {Path} path being acted upon + * @param {Number} timeout duration of time to suppress duplicate actions + * @returns {Object|false} tracking object or false if action should be suppressed */ -function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } +_throttle(actionType, path, timeout) { + if (!this._throttled.has(actionType)) { + this._throttled.set(actionType, new Map()); + } - return r; -} + /** @type {Map} */ + const action = this._throttled.get(actionType); + /** @type {Object} */ + const actionPath = action.get(path); -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ + if (actionPath) { + actionPath.count++; + return false; + } -function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } + let timeoutObject; + const clear = () => { + const item = action.get(path); + const count = item ? item.count : 0; + action.delete(path); + clearTimeout(timeoutObject); + if (item) clearTimeout(item.timeoutObject); + return count; + }; + timeoutObject = setTimeout(clear, timeout); + const thr = {timeoutObject, clear, count: 0}; + action.set(path, thr); + return thr; } -module.exports = common$4(exports); - -const {formatters} = module.exports; +_incrReadyCount() { + return this._readyCount++; +} /** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + * Awaits write operation to finish. + * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. + * @param {Path} path being acted upon + * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished + * @param {EventName} event + * @param {Function} awfEmit Callback to be called when ready for event to be emitted. */ +_awaitWriteFinish(path, threshold, event, awfEmit) { + let timeoutHandler; -formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } -}; -}(browser, browser.exports)); - -var node = {exports: {}}; + let fullPath = path; + if (this.options.cwd && !sysPath.isAbsolute(path)) { + fullPath = sysPath.join(this.options.cwd, path); + } -var hasFlag$3 = (flag, argv = process.argv) => { - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf('--'); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); -}; + const now = new Date(); -const os$2 = require$$0__default$1['default']; -const tty = require$$1__default['default']; -const hasFlag$2 = hasFlag$3; + const awaitWriteFinish = (prevStat) => { + fs$6.stat(fullPath, (err, curStat) => { + if (err || !this._pendingWrites.has(path)) { + if (err && err.code !== 'ENOENT') awfEmit(err); + return; + } -const {env: env$1} = process; + const now = Number(new Date()); -let forceColor$1; -if (hasFlag$2('no-color') || - hasFlag$2('no-colors') || - hasFlag$2('color=false') || - hasFlag$2('color=never')) { - forceColor$1 = 0; -} else if (hasFlag$2('color') || - hasFlag$2('colors') || - hasFlag$2('color=true') || - hasFlag$2('color=always')) { - forceColor$1 = 1; + if (prevStat && curStat.size !== prevStat.size) { + this._pendingWrites.get(path).lastChange = now; + } + const pw = this._pendingWrites.get(path); + const df = now - pw.lastChange; + + if (df >= threshold) { + this._pendingWrites.delete(path); + awfEmit(undefined, curStat); + } else { + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval, + curStat + ); + } + }); + }; + + if (!this._pendingWrites.has(path)) { + this._pendingWrites.set(path, { + lastChange: now, + cancelWait: () => { + this._pendingWrites.delete(path); + clearTimeout(timeoutHandler); + return event; + } + }); + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval + ); + } } -if ('FORCE_COLOR' in env$1) { - if (env$1.FORCE_COLOR === 'true') { - forceColor$1 = 1; - } else if (env$1.FORCE_COLOR === 'false') { - forceColor$1 = 0; - } else { - forceColor$1 = env$1.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env$1.FORCE_COLOR, 10), 3); - } +_getGlobIgnored() { + return [...this._ignoredPaths.values()]; } -function translateLevel$1(level) { - if (level === 0) { - return false; - } +/** + * Determines whether user has asked to ignore this path. + * @param {Path} path filepath or dir + * @param {fs.Stats=} stats result of fs.stat + * @returns {Boolean} + */ +_isIgnored(path, stats) { + if (this.options.atomic && DOT_RE.test(path)) return true; + if (!this._userIgnored) { + const {cwd} = this.options; + const ign = this.options.ignored; - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -} + const ignored = ign && ign.map(normalizeIgnored(cwd)); + const paths = arrify(ignored) + .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) + .map((path) => path + SLASH_GLOBSTAR); + const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); + this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); + } -function supportsColor$1(haveStream, streamIsTTY) { - if (forceColor$1 === 0) { - return 0; - } + return this._userIgnored([path, stats]); +} - if (hasFlag$2('color=16m') || - hasFlag$2('color=full') || - hasFlag$2('color=truecolor')) { - return 3; - } +_isntIgnored(path, stat) { + return !this._isIgnored(path, stat); +} - if (hasFlag$2('color=256')) { - return 2; - } +/** + * Provides a set of common helpers and properties relating to symlink and glob handling. + * @param {Path} path file, directory, or glob pattern being watched + * @param {Number=} depth at any depth > 0, this isn't a glob + * @returns {WatchHelper} object containing helpers for this path + */ +_getWatchHelpers(path, depth) { + const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path); + const follow = this.options.followSymlinks; - if (haveStream && !streamIsTTY && forceColor$1 === undefined) { - return 0; - } + return new WatchHelper(path, watchPath, follow, this); +} - const min = forceColor$1 || 0; +// Directory helpers +// ----------------- - if (env$1.TERM === 'dumb') { - return min; - } +/** + * Provides directory tracking objects + * @param {String} directory path of the directory + * @returns {DirEntry} the directory's tracking object + */ +_getWatchedDir(directory) { + if (!this._boundRemove) this._boundRemove = this._remove.bind(this); + const dir = sysPath.resolve(directory); + if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); + return this._watched.get(dir); +} - if (process.platform === 'win32') { - // Windows 10 build 10586 is the first Windows release that supports 256 colors. - // Windows 10 build 14931 is the first release that supports 16m/TrueColor. - const osRelease = os$2.release().split('.'); - if ( - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } +// File helpers +// ------------ - return 1; - } +/** + * Check for read permissions. + * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 + * @param {fs.Stats} stats - object, result of fs_stat + * @returns {Boolean} indicates whether the file can be read +*/ +_hasReadPermissions(stats) { + if (this.options.ignorePermissionErrors) return true; - if ('CI' in env$1) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env$1) || env$1.CI_NAME === 'codeship') { - return 1; - } + // stats.mode may be bigint + const md = stats && Number.parseInt(stats.mode, 10); + const st = md & 0o777; + const it = Number.parseInt(st.toString(8)[0], 10); + return Boolean(4 & it); +} - return min; - } +/** + * Handles emitting unlink events for + * files and directories, and via recursion, for + * files and directories within directories that are unlinked + * @param {String} directory within which the following item is located + * @param {String} item base path of item/directory + * @returns {void} +*/ +_remove(directory, item, isDirectory) { + // if what is being deleted is a directory, get that directory's paths + // for recursive deleting and cleaning of watched object + // if it is not a directory, nestedDirectoryChildren will be empty array + const path = sysPath.join(directory, item); + const fullPath = sysPath.resolve(path); + isDirectory = isDirectory != null + ? isDirectory + : this._watched.has(path) || this._watched.has(fullPath); - if ('TEAMCITY_VERSION' in env$1) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0; - } + // prevent duplicate handling in case of arriving here nearly simultaneously + // via multiple paths (such as _handleFile and _handleDir) + if (!this._throttle('remove', path, 100)) return; - if (env$1.COLORTERM === 'truecolor') { - return 3; - } + // if the only watched file is removed, watch for its return + if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) { + this.add(directory, item, true); + } - if ('TERM_PROGRAM' in env$1) { - const version = parseInt((env$1.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + // This will create a new entry in the watched object in either case + // so we got to do the directory check beforehand + const wp = this._getWatchedDir(path); + const nestedDirectoryChildren = wp.getChildren(); - switch (env$1.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default - } - } + // Recursively remove children directories / files. + nestedDirectoryChildren.forEach(nested => this._remove(path, nested)); - if (/-256(color)?$/i.test(env$1.TERM)) { - return 2; - } + // Check if item was on the watched list and remove it + const parent = this._getWatchedDir(directory); + const wasTracked = parent.has(item); + parent.remove(item); - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) { - return 1; - } + // Fixes issue #1042 -> Relative paths were detected and added as symlinks + // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612), + // but never removed from the map in case the path was deleted. + // This leads to an incorrect state if the path was recreated: + // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553 + if (this._symlinkPaths.has(fullPath)) { + this._symlinkPaths.delete(fullPath); + } - if ('COLORTERM' in env$1) { - return 1; - } + // If we wait for this file to be fully written, cancel the wait. + let relPath = path; + if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path); + if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { + const event = this._pendingWrites.get(relPath).cancelWait(); + if (event === EV_ADD) return; + } - return min; -} + // The Entry will either be a directory that just got removed + // or a bogus entry to a file, in either case we have to remove it + this._watched.delete(path); + this._watched.delete(fullPath); + const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK; + if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); -function getSupportLevel$1(stream) { - const level = supportsColor$1(stream, stream && stream.isTTY); - return translateLevel$1(level); + // Avoid conflicts if we later create another file with the same name + if (!this.options.useFsEvents) { + this._closePath(path); + } } -var supportsColor_1$1 = { - supportsColor: getSupportLevel$1, - stdout: translateLevel$1(supportsColor$1(true, tty.isatty(1))), - stderr: translateLevel$1(supportsColor$1(true, tty.isatty(2))) -}; - /** - * Module dependencies. + * Closes all watchers for a path + * @param {Path} path */ - -(function (module, exports) { -const tty = require$$1__default['default']; -const util = require$$0__default['default']; +_closePath(path) { + this._closeFile(path); + const dir = sysPath.dirname(path); + this._getWatchedDir(dir).remove(sysPath.basename(path)); +} /** - * This is the Node.js implementation of `debug()`. + * Closes only file-specific watchers + * @param {Path} path */ - -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.destroy = util.deprecate( - () => {}, - 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' -); +_closeFile(path) { + const closers = this._closers.get(path); + if (!closers) return; + closers.forEach(closer => closer()); + this._closers.delete(path); +} /** - * Colors. + * + * @param {Path} path + * @param {Function} closer */ +_addPathCloser(path, closer) { + if (!closer) return; + let list = this._closers.get(path); + if (!list) { + list = []; + this._closers.set(path, list); + } + list.push(closer); +} -exports.colors = [6, 2, 3, 4, 5, 1]; - -try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = supportsColor_1$1; +_readdirp(root, opts) { + if (this.closed) return; + const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; + let stream = readdirp(root, options); + this._streams.add(stream); + stream.once(STR_CLOSE, () => { + stream = undefined; + }); + stream.once(STR_END, () => { + if (stream) { + this._streams.delete(stream); + stream = undefined; + } + }); + return stream; +} - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } -} catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. } +// Export FSWatcher class +chokidar.FSWatcher = FSWatcher; + /** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + * Instantiates watcher with paths to be tracked. + * @param {String|Array} paths file/directory paths and/or globs + * @param {Object=} options chokidar opts + * @returns an instance of FSWatcher for chaining. */ +const watch = (paths, options) => { + const watcher = new FSWatcher(options); + watcher.add(paths); + return watcher; +}; -exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); -}).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } - - obj[prop] = val; - return obj; -}, {}); +chokidar.watch = watch; /** - * Is stdout a TTY? Colored output is enabled when `true`. + * @typedef {import('vfile').VFile} VFile + * @typedef {import('vfile-message').VFileMessage} VFileMessage + * + * @typedef Statistics + * @property {number} fatal Fatal errors (`fatal: true`) + * @property {number} warn warning errors (`fatal: false`) + * @property {number} info informational messages (`fatal: null|undefined`) + * @property {number} nonfatal warning + info + * @property {number} total nonfatal + fatal */ -function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); -} - /** - * Adds ANSI color escape codes if enabled. + * Get stats for a file, list of files, or list of messages. * - * @api public + * @param {Array.|VFile|VFileMessage} [value] + * @returns {Statistics} */ +function statistics(value) { + var result = {true: 0, false: 0, null: 0}; -function formatArgs(args) { - const {namespace: name, useColors} = this; + if (value) { + if (Array.isArray(value)) { + list(value); + } else { + one(value); + } + } - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; + return { + fatal: result.true, + nonfatal: result.false + result.null, + warn: result.false, + info: result.null, + total: result.true + result.false + result.null + } - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } -} + /** + * @param {Array.} value + * @returns {void} + */ + function list(value) { + var index = -1; -function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; -} + while (++index < value.length) { + one(value[index]); + } + } -/** - * Invokes `util.format()` with the specified arguments and writes to stderr. - */ + /** + * @param {VFile|VFileMessage} value + * @returns {void} + */ + function one(value) { + if ('messages' in value) return list(value.messages) -function log(...args) { - return process.stderr.write(util.format(...args) + '\n'); + result[ + value.fatal === undefined || value.fatal === null + ? null + : Boolean(value.fatal) + ]++; + } } /** - * Save `namespaces`. + * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback + * @typedef {(...input: any[]) => any} Middleware * - * @param {String} namespaces - * @api private + * @typedef {(...input: any[]) => void} Run Call all middleware. + * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. + * @typedef {{run: Run, use: Use}} Pipeline */ -function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } -} /** - * Load `namespaces`. + * Create new middleware. * - * @return {String} returns the previously persisted debug modes - * @api private + * @returns {Pipeline} */ +function trough() { + /** @type {Middleware[]} */ + const fns = []; + /** @type {Pipeline} */ + const pipeline = {run, use}; -function load() { - return process.env.DEBUG; -} + return pipeline -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init(debug) { - debug.inspectOpts = {}; + /** @type {Run} */ + function run(...values) { + let middlewareIndex = -1; + /** @type {Callback} */ + const callback = values.pop(); - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} + if (typeof callback !== 'function') { + throw new TypeError('Expected function as last argument, not ' + callback) + } -module.exports = common$4(exports); + next(null, ...values); -const {formatters} = module.exports; + /** + * Run the next `fn`, or we’re done. + * + * @param {Error|null|undefined} error + * @param {any[]} output + */ + function next(error, ...output) { + const fn = fns[++middlewareIndex]; + let index = -1; -/** - * Map %o to `util.inspect()`, all on a single line. - */ + if (error) { + callback(error); + return + } -formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n') - .map(str => str.trim()) - .join(' '); -}; + // Copy non-nullish input into values. + while (++index < values.length) { + if (output[index] === null || output[index] === undefined) { + output[index] = values[index]; + } + } -/** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ + // Save the newly created `output` for the next call. + values = output; -formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; -}(node, node.exports)); + // Next or done. + if (fn) { + wrap(fn, next)(...output); + } else { + callback(null, ...output); + } + } + } -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ + /** @type {Use} */ + function use(middelware) { + if (typeof middelware !== 'function') { + throw new TypeError( + 'Expected `middelware` to be a function, not ' + middelware + ) + } -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - src.exports = browser.exports; -} else { - src.exports = node.exports; + fns.push(middelware); + return pipeline + } } -var resolveFrom$1 = {exports: {}}; - -const path$l = require$$0__default$2['default']; -const Module = require$$1__default$1['default']; -const fs$j = require$$0__default$3['default']; - -const resolveFrom = (fromDirectory, moduleId, silent) => { - if (typeof fromDirectory !== 'string') { - throw new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDirectory}\``); - } - - if (typeof moduleId !== 'string') { - throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``); - } - - try { - fromDirectory = fs$j.realpathSync(fromDirectory); - } catch (error) { - if (error.code === 'ENOENT') { - fromDirectory = path$l.resolve(fromDirectory); - } else if (silent) { - return; - } else { - throw error; - } - } - - const fromFile = path$l.join(fromDirectory, 'noop.js'); - - const resolveFileName = () => Module._resolveFilename(moduleId, { - id: fromFile, - filename: fromFile, - paths: Module._nodeModulePaths(fromDirectory) - }); - - if (silent) { - try { - return resolveFileName(); - } catch (error) { - return; - } - } - - return resolveFileName(); -}; +/** + * Wrap `middleware`. + * Can be sync or async; return a promise, receive a callback, or return new + * values and errors. + * + * @param {Middleware} middleware + * @param {Callback} callback + */ +function wrap(middleware, callback) { + /** @type {boolean} */ + let called; -resolveFrom$1.exports = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId); -resolveFrom$1.exports.silent = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId, true); + return wrapped -var libnpmconfig = {}; + /** + * Call `middleware`. + * @param {any[]} parameters + * @returns {void} + */ + function wrapped(...parameters) { + const fnExpectsCallback = middleware.length > parameters.length; + /** @type {any} */ + let result; -class FiggyPudding { - constructor (specs, opts, providers) { - this.__specs = specs || {}; - Object.keys(this.__specs).forEach(alias => { - if (typeof this.__specs[alias] === 'string') { - const key = this.__specs[alias]; - const realSpec = this.__specs[key]; - if (realSpec) { - const aliasArr = realSpec.aliases || []; - aliasArr.push(alias, key); - realSpec.aliases = [...(new Set(aliasArr))]; - this.__specs[alias] = realSpec; - } else { - throw new Error(`Alias refers to invalid key: ${key} -> ${alias}`) - } - } - }); - this.__opts = opts || {}; - this.__providers = reverse((providers).filter( - x => x != null && typeof x === 'object' - )); - this.__isFiggyPudding = true; - } - get (key) { - return pudGet(this, key, true) - } - get [Symbol.toStringTag] () { return 'FiggyPudding' } - forEach (fn, thisArg = this) { - for (let [key, value] of this.entries()) { - fn.call(thisArg, value, key, this); - } - } - toJSON () { - const obj = {}; - this.forEach((val, key) => { - obj[key] = val; - }); - return obj - } - * entries (_matcher) { - for (let key of Object.keys(this.__specs)) { - yield [key, this.get(key)]; - } - const matcher = _matcher || this.__opts.other; - if (matcher) { - const seen = new Set(); - for (let p of this.__providers) { - const iter = p.entries ? p.entries(matcher) : entries(p); - for (let [key, val] of iter) { - if (matcher(key) && !seen.has(key)) { - seen.add(key); - yield [key, val]; - } - } - } - } - } - * [Symbol.iterator] () { - for (let [key, value] of this.entries()) { - yield [key, value]; - } - } - * keys () { - for (let [key] of this.entries()) { - yield key; - } - } - * values () { - for (let [, value] of this.entries()) { - yield value; + if (fnExpectsCallback) { + parameters.push(done); } - } - concat (...moreConfig) { - return new Proxy(new FiggyPudding( - this.__specs, - this.__opts, - reverse(this.__providers).concat(moreConfig) - ), proxyHandler) - } -} -try { - const util = require$$0__default['default']; - FiggyPudding.prototype[util.inspect.custom] = function (depth, opts) { - return ( - this[Symbol.toStringTag] + ' ' - ) + util.inspect(this.toJSON(), opts) - }; -} catch (e) {} -function BadKeyError (key) { - throw Object.assign(new Error( - `invalid config key requested: ${key}` - ), {code: 'EBADKEY'}) -} + try { + result = middleware(...parameters); + } catch (error) { + /** @type {Error} */ + const exception = error; -function pudGet (pud, key, validate) { - let spec = pud.__specs[key]; - if (validate && !spec && (!pud.__opts.other || !pud.__opts.other(key))) { - BadKeyError(key); - } else { - if (!spec) { spec = {}; } - let ret; - for (let p of pud.__providers) { - ret = tryGet(key, p); - if (ret === undefined && spec.aliases && spec.aliases.length) { - for (let alias of spec.aliases) { - if (alias === key) { continue } - ret = tryGet(alias, p); - if (ret !== undefined) { - break - } - } - } - if (ret !== undefined) { - break + // Well, this is quite the pickle. + // `middleware` received a callback and called it synchronously, but that + // threw an error. + // The only thing left to do is to throw the thing instead. + if (fnExpectsCallback && called) { + throw exception } + + return done(exception) } - if (ret === undefined && spec.default !== undefined) { - if (typeof spec.default === 'function') { - return spec.default(pud) + + if (!fnExpectsCallback) { + if (result instanceof Promise) { + result.then(then, done); + } else if (result instanceof Error) { + done(result); } else { - return spec.default + then(result); } - } else { - return ret } } -} - -function tryGet (key, p) { - let ret; - if (p.__isFiggyPudding) { - ret = pudGet(p, key, false); - } else if (typeof p.get === 'function') { - ret = p.get(key); - } else { - ret = p[key]; - } - return ret -} -const proxyHandler = { - has (obj, prop) { - return prop in obj.__specs && pudGet(obj, prop, false) !== undefined - }, - ownKeys (obj) { - return Object.keys(obj.__specs) - }, - get (obj, prop) { - if ( - typeof prop === 'symbol' || - prop.slice(0, 2) === '__' || - prop in FiggyPudding.prototype - ) { - return obj[prop] - } - return obj.get(prop) - }, - set (obj, prop, value) { - if ( - typeof prop === 'symbol' || - prop.slice(0, 2) === '__' - ) { - obj[prop] = value; - return true - } else { - throw new Error('figgyPudding options cannot be modified. Use .concat() instead.') + /** + * Call `callback`, only once. + * @type {Callback} + */ + function done(error, ...output) { + if (!called) { + called = true; + callback(error, ...output); } - }, - deleteProperty () { - throw new Error('figgyPudding options cannot be deleted. Use .concat() and shadow them instead.') } -}; -var figgyPudding_1 = figgyPudding$1; -function figgyPudding$1 (specs, opts) { - function factory (...providers) { - return new Proxy(new FiggyPudding( - specs, - opts, - providers - ), proxyHandler) + /** + * Call `done` with one value. + * + * @param {any} [value] + */ + function then(value) { + done(null, value); } - return factory } -function reverse (arr) { - const ret = []; - arr.forEach(x => ret.unshift(x)); - return ret +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); } -function entries (obj) { - return Object.keys(obj).map(k => [k, obj[k]]) + +function isObject$1(subject) { + return (typeof subject === 'object') && (subject !== null); } -var findUp$2 = {exports: {}}; -var locatePath$1 = {exports: {}}; +function toArray(sequence) { + if (Array.isArray(sequence)) return sequence; + else if (isNothing(sequence)) return []; -var pathExists$1 = {exports: {}}; + return [ sequence ]; +} -const fs$i = require$$0__default$3['default']; -pathExists$1.exports = fp => new Promise(resolve => { - fs$i.access(fp, err => { - resolve(!err); - }); -}); +function extend$2(target, source) { + var index, length, key, sourceKeys; -pathExists$1.exports.sync = fp => { - try { - fs$i.accessSync(fp); - return true; - } catch (err) { - return false; - } -}; + if (source) { + sourceKeys = Object.keys(source); -var pLimit$2 = {exports: {}}; + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } -var pTry$2 = {exports: {}}; + return target; +} -const pTry$1 = (fn, ...arguments_) => new Promise(resolve => { - resolve(fn(...arguments_)); -}); -pTry$2.exports = pTry$1; -// TODO: remove this in the next major version -pTry$2.exports.default = pTry$1; +function repeat$1(string, count) { + var result = '', cycle; -const pTry = pTry$2.exports; + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } -const pLimit$1 = concurrency => { - if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { - return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up')); - } + return result; +} - const queue = []; - let activeCount = 0; - const next = () => { - activeCount--; +function isNegativeZero(number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} - if (queue.length > 0) { - queue.shift()(); - } - }; - const run = (fn, resolve, ...args) => { - activeCount++; +var isNothing_1 = isNothing; +var isObject_1 = isObject$1; +var toArray_1 = toArray; +var repeat_1 = repeat$1; +var isNegativeZero_1 = isNegativeZero; +var extend_1 = extend$2; - const result = pTry(fn, ...args); +var common$4 = { + isNothing: isNothing_1, + isObject: isObject_1, + toArray: toArray_1, + repeat: repeat_1, + isNegativeZero: isNegativeZero_1, + extend: extend_1 +}; - resolve(result); +// YAML error class. http://stackoverflow.com/questions/8458984 - result.then(next, next); - }; - const enqueue = (fn, resolve, ...args) => { - if (activeCount < concurrency) { - run(fn, resolve, ...args); - } else { - queue.push(run.bind(null, fn, resolve, ...args)); - } - }; +function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; - const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args)); - Object.defineProperties(generator, { - activeCount: { - get: () => activeCount - }, - pendingCount: { - get: () => queue.length - }, - clearQueue: { - value: () => { - queue.length = 0; - } - } - }); + if (!exception.mark) return message; - return generator; -}; + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } -pLimit$2.exports = pLimit$1; -pLimit$2.exports.default = pLimit$1; + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; -const pLimit = pLimit$2.exports; + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } -class EndError extends Error { - constructor(value) { - super(); - this.value = value; - } + return message + ' ' + where; } -// The input can also be a promise, so we `Promise.resolve()` it -const testElement = (el, tester) => Promise.resolve(el).then(tester); -// The input can also be a promise, so we `Promise.all()` them both -const finder$1 = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); +function YAMLException$1(reason, mark) { + // Super constructor + Error.call(this); -var pLocate$1 = (iterable, tester, opts) => { - opts = Object.assign({ - concurrency: Infinity, - preserveOrder: true - }, opts); + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); - const limit = pLimit(opts.concurrency); + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} - // Start all the promises concurrently with optional limit - const items = [...iterable].map(el => [el, limit(testElement, el, tester)]); - // Check the promises either serially or concurrently - const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity); +// Inherit from Error +YAMLException$1.prototype = Object.create(Error.prototype); +YAMLException$1.prototype.constructor = YAMLException$1; - return Promise.all(items.map(el => checkLimit(finder$1, el))) - .then(() => {}) - .catch(err => err instanceof EndError ? err.value : Promise.reject(err)); + +YAMLException$1.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); }; -const path$k = require$$0__default$2['default']; -const pathExists = pathExists$1.exports; -const pLocate = pLocate$1; -locatePath$1.exports = (iterable, options) => { - options = Object.assign({ - cwd: process.cwd() - }, options); +var exception = YAMLException$1; - return pLocate(iterable, el => pathExists(path$k.resolve(options.cwd, el)), options); -}; +// get snippet for a single line, respecting maxLength +function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; -locatePath$1.exports.sync = (iterable, options) => { - options = Object.assign({ - cwd: process.cwd() - }, options); + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } - for (const el of iterable) { - if (pathExists.sync(path$k.resolve(options.cwd, el))) { - return el; - } - } -}; + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } -const path$j = require$$0__default$2['default']; -const locatePath = locatePath$1.exports; + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} -findUp$2.exports = (filename, opts = {}) => { - const startDir = path$j.resolve(opts.cwd || ''); - const {root} = path$j.parse(startDir); - const filenames = [].concat(filename); - - return new Promise(resolve => { - (function find(dir) { - locatePath(filenames, {cwd: dir}).then(file => { - if (file) { - resolve(path$j.join(dir, file)); - } else if (dir === root) { - resolve(null); - } else { - find(path$j.dirname(dir)); - } - }); - })(startDir); - }); -}; - -findUp$2.exports.sync = (filename, opts = {}) => { - let dir = path$j.resolve(opts.cwd || ''); - const {root} = path$j.parse(dir); +function padStart(string, max) { + return common$4.repeat(' ', max - string.length) + string; +} - const filenames = [].concat(filename); - // eslint-disable-next-line no-constant-condition - while (true) { - const file = locatePath.sync(filenames, {cwd: dir}); +function makeSnippet(mark, options) { + options = Object.create(options || null); - if (file) { - return path$j.join(dir, file); - } + if (!mark.buffer) return null; - if (dir === root) { - return null; - } + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; - dir = path$j.dirname(dir); - } -}; + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; -var ini$1 = {}; + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); -ini$1.parse = ini$1.decode = decode$2; + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } -ini$1.stringify = ini$1.encode = encode$1; + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; -ini$1.safe = safe$8; -ini$1.unsafe = unsafe$1; + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); -var eol$2 = typeof process !== 'undefined' && - process.platform === 'win32' ? '\r\n' : '\n'; + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common$4.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } -function encode$1 (obj, opt) { - var children = []; - var out = ''; + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common$4.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common$4.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; - if (typeof opt === 'string') { - opt = { - section: opt, - whitespace: false, - }; - } else { - opt = opt || {}; - opt.whitespace = opt.whitespace === true; + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common$4.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; } - var separator = opt.whitespace ? ' = ' : '='; + return result.replace(/\n$/, ''); +} - Object.keys(obj).forEach(function (k, _, __) { - var val = obj[k]; - if (val && Array.isArray(val)) { - val.forEach(function (item) { - out += safe$8(k + '[]') + separator + safe$8(item) + '\n'; - }); - } else if (val && typeof val === 'object') - children.push(k); - else - out += safe$8(k) + separator + safe$8(val) + eol$2; - }); - if (opt.section && out.length) - out = '[' + safe$8(opt.section) + ']' + eol$2 + out; +var snippet = makeSnippet; - children.forEach(function (k, _, __) { - var nk = dotSplit(k).join('\\.'); - var section = (opt.section ? opt.section + '.' : '') + nk; - var child = encode$1(obj[k], { - section: section, - whitespace: opt.whitespace, - }); - if (out.length && child.length) - out += eol$2; +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + 'defaultStyle', + 'styleAliases' +]; - out += child; - }); +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; - return out -} +function compileStyleAliases(map) { + var result = {}; -function dotSplit (str) { - return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') - .replace(/\\\./g, '\u0001') - .split(/\./).map(function (part) { - return part.replace(/\1/g, '\\.') - .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') - }) -} + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } -function decode$2 (str) { - var out = {}; - var p = out; - var section = null; - // section |key = value - var re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i; - var lines = str.split(/[\r\n]+/g); + return result; +} - lines.forEach(function (line, _, __) { - if (!line || line.match(/^\s*[;#]/)) - return - var match = line.match(re); - if (!match) - return - if (match[1] !== undefined) { - section = unsafe$1(match[1]); - if (section === '__proto__') { - // not allowed - // keep parsing the section, but don't attach it. - p = {}; - return - } - p = out[section] = out[section] || {}; - return - } - var key = unsafe$1(match[2]); - if (key === '__proto__') - return - var value = match[3] ? unsafe$1(match[4]) : true; - switch (value) { - case 'true': - case 'false': - case 'null': value = JSON.parse(value); - } +function Type$1(tag, options) { + options = options || {}; - // Convert keys with '[]' suffix to an array - if (key.length > 2 && key.slice(-2) === '[]') { - key = key.substring(0, key.length - 2); - if (key === '__proto__') - return - if (!p[key]) - p[key] = []; - else if (!Array.isArray(p[key])) - p[key] = [p[key]]; + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); } - - // safeguard against resetting a previously defined - // array by accidentally forgetting the brackets - if (Array.isArray(p[key])) - p[key].push(value); - else - p[key] = value; }); - // {a:{y:1},"a.b":{x:2}} --> {a:{y:1,b:{x:2}}} - // use a filter to return the keys that have to be deleted. - Object.keys(out).filter(function (k, _, __) { - if (!out[k] || - typeof out[k] !== 'object' || - Array.isArray(out[k])) - return false + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); - // see if the parent section is also an object. - // if so, add it to that, and mark this one for deletion - var parts = dotSplit(k); - var p = out; - var l = parts.pop(); - var nl = l.replace(/\\\./g, '.'); - parts.forEach(function (part, _, __) { - if (part === '__proto__') - return - if (!p[part] || typeof p[part] !== 'object') - p[part] = {}; - p = p[part]; - }); - if (p === out && nl === l) - return false + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} - p[nl] = out[k]; - return true - }).forEach(function (del, _, __) { - delete out[del]; - }); +var type$1 = Type$1; - return out -} +/*eslint-disable max-len*/ -function isQuoted (val) { - return (val.charAt(0) === '"' && val.slice(-1) === '"') || - (val.charAt(0) === "'" && val.slice(-1) === "'") -} -function safe$8 (val) { - return (typeof val !== 'string' || - val.match(/[=\r\n]/) || - val.match(/^\[/) || - (val.length > 1 && - isQuoted(val)) || - val !== val.trim()) - ? JSON.stringify(val) - : val.replace(/;/g, '\\;').replace(/#/g, '\\#') -} -function unsafe$1 (val, doUnesc) { - val = (val || '').trim(); - if (isQuoted(val)) { - // remove the single quotes before calling JSON.parse - if (val.charAt(0) === "'") - val = val.substr(1, val.length - 2); - try { - val = JSON.parse(val); - } catch (_) {} - } else { - // walk the val to find the first not-escaped ; character - var esc = false; - var unesc = ''; - for (var i = 0, l = val.length; i < l; i++) { - var c = val.charAt(i); - if (esc) { - if ('\\;#'.indexOf(c) !== -1) - unesc += c; - else - unesc += '\\' + c; - esc = false; - } else if (';#'.indexOf(c) !== -1) - break - else if (c === '\\') - esc = true; - else - unesc += c; - } - if (esc) - unesc += '\\'; +function compileList(schema, name) { + var result = []; - return unesc.trim() - } - return val -} + schema[name].forEach(function (currentType) { + var newIndex = result.length; -const fs$h = require$$0__default$3['default']; -const figgyPudding = figgyPudding_1; -const findUp$1 = findUp$2.exports; -const ini = ini$1; -const os$1 = require$$0__default$1['default']; -const path$i = require$$0__default$2['default']; + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { -const NpmConfig = figgyPudding({}, { - // Open up the pudding object. - other () { return true } -}); + newIndex = previousIndex; + } + }); -const ConfigOpts = figgyPudding({ - cache: { default: path$i.join(os$1.homedir(), '.npm') }, - configNames: { default: ['npmrc', '.npmrc'] }, - envPrefix: { default: /^npm_config_/i }, - cwd: { default: () => process.cwd() }, - globalconfig: { - default: () => path$i.join(getGlobalPrefix(), 'etc', 'npmrc') - }, - userconfig: { default: path$i.join(os$1.homedir(), '.npmrc') } -}); + result[newIndex] = currentType; + }); -libnpmconfig.read = getNpmConfig; -function getNpmConfig (_opts, _builtin) { - const builtin = ConfigOpts(_builtin); - const env = {}; - for (let key of Object.keys(process.env)) { - if (!key.match(builtin.envPrefix)) continue - const newKey = key.toLowerCase() - .replace(builtin.envPrefix, '') - .replace(/(?!^)_/g, '-'); - env[newKey] = process.env[key]; - } - const cli = NpmConfig(_opts); - const userConfPath = ( - builtin.userconfig || - cli.userconfig || - env.userconfig - ); - const user = userConfPath && maybeReadIni(userConfPath); - const globalConfPath = ( - builtin.globalconfig || - cli.globalconfig || - env.globalconfig - ); - const global = globalConfPath && maybeReadIni(globalConfPath); - const projConfPath = findUp$1.sync(builtin.configNames, { cwd: builtin.cwd }); - let proj = {}; - if (projConfPath && projConfPath !== userConfPath) { - proj = maybeReadIni(projConfPath); - } - const newOpts = NpmConfig(builtin, global, user, proj, env, cli); - if (newOpts.cache) { - return newOpts.concat({ - cache: path$i.resolve( - ( - (cli.cache || env.cache) - ? builtin.cwd - : proj.cache - ? path$i.dirname(projConfPath) - : user.cache - ? path$i.dirname(userConfPath) - : global.cache - ? path$i.dirname(globalConfPath) - : path$i.dirname(userConfPath) - ), - newOpts.cache - ) - }) - } else { - return newOpts - } + return result; } -function maybeReadIni (f) { - let txt; - try { - txt = fs$h.readFileSync(f, 'utf8'); - } catch (err) { - if (err.code === 'ENOENT') { - return '' + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); } else { - throw err + result[type.kind][type.tag] = result['fallback'][type.tag] = type; } } - return ini.parse(txt) -} -function getGlobalPrefix () { - if (process.env.PREFIX) { - return process.env.PREFIX - } else if (process.platform === 'win32') { - // c:\node\node.exe --> prefix=c:\node\ - return path$i.dirname(process.execPath) - } else { - // /usr/local/bin/node --> prefix=/usr/local - let pref = path$i.dirname(path$i.dirname(process.execPath)); - // destdir only is respected on Unix - if (process.env.DESTDIR) { - pref = path$i.join(process.env.DESTDIR, pref); - } - return pref + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); } + return result; } -var fs$g = require$$0__default$3['default']; -var path$h = require$$0__default$2['default']; -var resolve = resolveFrom$1.exports.silent; -var readNpmConfig = libnpmconfig.read; - -var loadPlugin_1 = loadPlugin$1; -loadPlugin$1.resolve = resolvePlugin; - -var electron = process.versions.electron !== undefined; -var windows = process.platform === 'win32'; - -var argv = process.argv[1] || /* istanbul ignore next */ ''; -var nvm = process.env.NVM_BIN; -var appData = process.env.APPDATA; - -/* istanbul ignore next */ -var globalsLibrary = windows ? '' : 'lib'; - -var builtinNpmConfig; - -// The prefix config defaults to the location where node is installed. -// On Windows, this is in a place called `%AppData%`, which we have to -// pass to `libnpmconfig` explicitly: -/* istanbul ignore next */ -if (windows && appData) { - builtinNpmConfig = {prefix: path$h.join(appData, 'npm')}; -} - -var npmPrefix = readNpmConfig(null, builtinNpmConfig).prefix; -// If there is no prefix defined, use the defaults -// See: -/* istanbul ignore next */ -if (!npmPrefix) { - npmPrefix = windows - ? path$h.dirname(process.execPath) - : path$h.resolve(process.execPath, '../..'); +function Schema$1(definition) { + return this.extend(definition); } -var globally = electron || argv.indexOf(npmPrefix) === 0; -var globals = path$h.resolve(npmPrefix, globalsLibrary, 'node_modules'); -// If we’re in Electron, we’re running in a modified Node that cannot really -// install global node modules. -// To find the actual modules, the user has to set `prefix` somewhere in an -// `.npmrc` (which is picked up by `libnpmconfig`). -// Most people don’t do that, and some use NVM instead to manage different -// versions of Node. -// Luckily NVM leaks some environment variables that we can pick up on to try -// and detect the actual modules. -/* istanbul ignore next */ -if (electron && nvm && !fs$g.existsSync(globals)) { - globals = path$h.resolve(nvm, '..', globalsLibrary, 'node_modules'); -} +Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; -// Load the plugin found using `resolvePlugin`. -function loadPlugin$1(name, options) { - return commonjsRequire(resolvePlugin(name, options) || name) -} + if (definition instanceof type$1) { + // Schema.extend(type) + explicit.push(definition); -// Find a plugin. -// -// See also: -// -// -// -// Uses the standard node module loading strategy to find $name in each given -// `cwd` (and optionally the global `node_modules` directory). -// -// If a prefix is given and $name is not a path, `$prefix-$name` is also -// searched (preferring these over non-prefixed modules). -function resolvePlugin(name, options) { - var settings = options || {}; - var prefix = settings.prefix; - var cwd = settings.cwd; - var global = settings.global; - var filePath; - var sources; - var length; - var index; - var plugin; - var slash; - var scope = ''; + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); - if (global === null || global === undefined) { - global = globally; - } + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); - if (cwd && typeof cwd === 'object') { - sources = cwd.concat(); } else { - sources = [cwd || process.cwd()]; + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); } - // Non-path. - if (name.charAt(0) !== '.') { - if (global) { - sources.push(globals); + implicit.forEach(function (type$1$1) { + if (!(type$1$1 instanceof type$1)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); } - // Unprefix module. - if (prefix) { - prefix = prefix.charAt(prefix.length - 1) === '-' ? prefix : prefix + '-'; - - // Scope? - if (name.charAt(0) === '@') { - slash = name.indexOf('/'); - - // Let’s keep the algorithm simple. - // No need to care if this is a “valid” scope (I think?). - // But we do check for the slash. - if (slash !== -1) { - scope = name.slice(0, slash + 1); - name = name.slice(slash + 1); - } - } - - if (name.slice(0, prefix.length) !== prefix) { - plugin = scope + prefix + name; - } - - name = scope + name; + if (type$1$1.loadKind && type$1$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); } - } - length = sources.length; - index = -1; - - while (++index < length) { - cwd = sources[index]; - filePath = (plugin && resolve(cwd, plugin)) || resolve(cwd, name); + if (type$1$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); - if (filePath) { - return filePath + explicit.forEach(function (type$1$1) { + if (!(type$1$1 instanceof type$1)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); } - } + }); - return null -} + var result = Object.create(Schema$1.prototype); -var isPlainObj = value => { - if (Object.prototype.toString.call(value) !== '[object Object]') { - return false; - } + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); - const prototype = Object.getPrototypeOf(value); - return prototype === null || prototype === Object.prototype; + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; }; -var format$1 = {exports: {}}; -(function (module) { -(function() { +var schema$1 = Schema$1; - //// Export the API - var namespace; - - // CommonJS / Node module - { - namespace = module.exports = format; - } - - namespace.format = format; - namespace.vsprintf = vsprintf; - - if (typeof console !== 'undefined' && typeof console.log === 'function') { - namespace.printf = printf; - } - - function printf(/* ... */) { - console.log(format.apply(null, arguments)); - } +var str = new type$1('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); - function vsprintf(fmt, replacements) { - return format.apply(null, [fmt].concat(replacements)); - } +var seq = new type$1('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); - function format(fmt) { - var argIndex = 1 // skip initial format argument - , args = [].slice.call(arguments) - , i = 0 - , n = fmt.length - , result = '' - , c - , escaped = false - , arg - , tmp - , leadingZero = false - , precision - , nextArg = function() { return args[argIndex++]; } - , slurpNumber = function() { - var digits = ''; - while (/\d/.test(fmt[i])) { - digits += fmt[i++]; - c = fmt[i]; - } - return digits.length > 0 ? parseInt(digits) : null; - } - ; - for (; i < n; ++i) { - c = fmt[i]; - if (escaped) { - escaped = false; - if (c == '.') { - leadingZero = false; - c = fmt[++i]; - } - else if (c == '0' && fmt[i + 1] == '.') { - leadingZero = true; - i += 2; - c = fmt[i]; - } - else { - leadingZero = true; - } - precision = slurpNumber(); - switch (c) { - case 'b': // number in binary - result += parseInt(nextArg(), 10).toString(2); - break; - case 'c': // character - arg = nextArg(); - if (typeof arg === 'string' || arg instanceof String) - result += arg; - else - result += String.fromCharCode(parseInt(arg, 10)); - break; - case 'd': // number in decimal - result += parseInt(nextArg(), 10); - break; - case 'f': // floating point number - tmp = String(parseFloat(nextArg()).toFixed(precision || 6)); - result += leadingZero ? tmp : tmp.replace(/^0/, ''); - break; - case 'j': // JSON - result += JSON.stringify(nextArg()); - break; - case 'o': // number in octal - result += '0' + parseInt(nextArg(), 10).toString(8); - break; - case 's': // string - result += nextArg(); - break; - case 'x': // lowercase hexadecimal - result += '0x' + parseInt(nextArg(), 10).toString(16); - break; - case 'X': // uppercase hexadecimal - result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase(); - break; - default: - result += c; - break; - } - } else if (c === '%') { - escaped = true; - } else { - result += c; - } - } - return result; - } +var map$3 = new type$1('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); -}()); -}(format$1)); +var failsafe = new schema$1({ + explicit: [ + str, + seq, + map$3 + ] +}); -var formatter = format$1.exports; +function resolveYamlNull(data) { + if (data === null) return true; -var fault$3 = create$2(Error); + var max = data.length; -var fault_1 = fault$3; + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} -fault$3.eval = create$2(EvalError); -fault$3.range = create$2(RangeError); -fault$3.reference = create$2(ReferenceError); -fault$3.syntax = create$2(SyntaxError); -fault$3.type = create$2(TypeError); -fault$3.uri = create$2(URIError); +function constructYamlNull() { + return null; +} -fault$3.create = create$2; +function isNull(object) { + return object === null; +} -// Create a new `EConstructor`, with the formatted `format` as a first argument. -function create$2(EConstructor) { - FormattedError.displayName = EConstructor.displayName || EConstructor.name; +var _null = new type$1('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); - return FormattedError +function resolveYamlBoolean(data) { + if (data === null) return false; - function FormattedError(format) { - if (format) { - format = formatter.apply(null, arguments); - } + var max = data.length; - return new EConstructor(format) - } + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); } -var fs$f = require$$0__default$3['default']; -var path$g = require$$0__default$2['default']; -var fault$2 = fault_1; -var debug$d = src.exports('unified-engine:find-up'); -var wrap$1 = wrap_1; - -var findUp = FindUp$2; +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} -FindUp$2.prototype.load = load$4; +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} -function FindUp$2(options) { - var self = this; +var bool = new type$1('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); - self.cache = {}; - self.cwd = options.cwd; - self.detect = options.detect; - self.names = options.names; - self.create = options.create; +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} - if (options.filePath) { - self.givenFilePath = path$g.resolve(options.cwd, options.filePath); - } +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); } -function load$4(filePath, callback) { - var self = this; - var givenFile = self.givenFile; - var parent; +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} - if (self.givenFilePath) { - if (givenFile) { - apply(callback, givenFile); - } else { - givenFile = [callback]; - self.givenFile = givenFile; - debug$d('Checking given file `%s`', self.givenFilePath); - fs$f.readFile(self.givenFilePath, loadGiven); - } +function resolveYamlInteger(data) { + if (data === null) return false; - return - } + var max = data.length, + index = 0, + hasDigits = false, + ch; - if (!self.detect) { - return callback() - } + if (!max) return false; - filePath = path$g.resolve(self.cwd, filePath); - parent = path$g.dirname(filePath); + ch = data[index]; - if (parent in self.cache) { - apply(callback, self.cache[parent]); - } else { - self.cache[parent] = [callback]; - find(parent); + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; } - function loadGiven(error, buf) { - var cbs = self.givenFile; - var result; + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; - if (error) { - result = fault$2( - 'Cannot read given file `%s`\n%s', - path$g.relative(self.cwd, self.givenFilePath), - error.stack - ); - result.code = 'ENOENT'; - result.path = error.path; - result.syscall = error.syscall; - loaded(result); - } else { - wrap$1(self.create, onparse)(buf, self.givenFilePath); - } + // base 2, base 8, base 16 - function onparse(error, result) { - if (error) { - debug$d(error.message); - loaded( - fault$2( - 'Cannot parse given file `%s`\n%s', - path$g.relative(self.cwd, self.givenFilePath), - error.stack - ) - ); - } else { - debug$d('Read given file `%s`', self.givenFilePath); - loaded(result); - } - } + if (ch === 'b') { + // base 2 + index++; - function loaded(result) { - givenFile = result; - self.givenFile = result; - applyAll(cbs, result); + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; } - } - - function find(directory) { - var index = -1; - - next(); - function next() { - var parent; - // Try to read the next file. - // We do not use `readdir` because on huge directories, that could be - // *very* slow. - if (++index < self.names.length) { - fs$f.readFile(path$g.join(directory, self.names[index]), done); - } else { - parent = path$g.dirname(directory); + if (ch === 'x') { + // base 16 + index++; - if (directory === parent) { - debug$d('No files found for `%s`', filePath); - found(); - } else if (parent in self.cache) { - apply(found, self.cache[parent]); - } else { - self.cache[parent] = [found]; - find(parent); - } + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; } + return hasDigits && ch !== '_'; } - function done(error, buf) { - var fp = path$g.join(directory, self.names[index]); - - /* istanbul ignore if - Hard to test. */ - if (error) { - if (error.code === 'ENOENT') { - return next() - } - - debug$d(error.message); - return found( - fault$2( - 'Cannot read file `%s`\n%s', - path$g.relative(self.cwd, fp), - error.message - ) - ) - } - wrap$1(self.create, onparse)(buf, fp); + if (ch === 'o') { + // base 8 + index++; - function onparse(error, result) { - if (error) { - found( - fault$2( - 'Cannot parse file `%s`\n%s', - path$g.relative(self.cwd, fp), - error.message - ) - ); - } else if (result) { - debug$d('Read file `%s`', fp); - found(null, result); - } else { - next(); - } + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; } - } - - function found(error, result) { - var cbs = self.cache[directory]; - self.cache[directory] = error || result; - applyAll(cbs, error || result); + return hasDigits && ch !== '_'; } } - function applyAll(cbs, result) { - var index = cbs.length; + // base 10 (except 0) - while (index--) { - apply(cbs[index], result); - } - } + // value should not start with `_`; + if (ch === '_') return false; - function apply(cb, result) { - if ( - result !== null && - typeof result === 'object' && - typeof result[0] === 'function' - ) { - result.push(cb); - } else if (result instanceof Error) { - cb(result); - } else { - cb(null, result); + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; } + hasDigits = true; } -} - -var path$f = require$$0__default$2['default']; -var yaml = jsYaml$1; -var json$2 = parseJson_1; -var debug$c = src.exports('unified-engine:configuration'); -var loadPlugin = loadPlugin_1; -var plain$1 = isPlainObj; -var fault$1 = fault_1; -var FindUp$1 = findUp; - -var configuration = Config; - -var own$f = {}.hasOwnProperty; -var loaders = { - '.json': loadJson, - '.cjs': loadScriptOrModule, - '.mjs': loadScriptOrModule, - '.js': loadScriptOrModule, - '.yaml': loadYaml, - '.yml': loadYaml -}; + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; -var defaultLoader = loadJson; + return true; +} -Config.prototype.load = load$3; +function constructYamlInteger(data) { + var value = data, sign = 1, ch; -function Config(options) { - var names = []; + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } - this.cwd = options.cwd; - this.packageField = options.packageField; - this.pluginPrefix = options.pluginPrefix; - this.configTransform = options.configTransform; - this.defaultConfig = options.defaultConfig; + ch = value[0]; - if (options.rcName) { - names.push( - options.rcName, - options.rcName + '.js', - options.rcName + '.yml', - options.rcName + '.yaml' - ); - debug$c('Looking for `%s` configuration files', names); + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; } - if (options.packageField) { - names.push('package.json'); - debug$c( - 'Looking for `%s` fields in `package.json` files', - options.packageField - ); + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); } - this.given = {settings: options.settings, plugins: options.plugins}; - this.create = create$1.bind(this); + return sign * parseInt(value, 10); +} - this.findUp = new FindUp$1({ - filePath: options.rcPath, - cwd: options.cwd, - detect: options.detectConfig, - names: names, - create: this.create - }); +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common$4.isNegativeZero(object)); } -function load$3(filePath, callback) { - var self = this; +var int = new type$1('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); - self.findUp.load(filePath || path$f.resolve(this.cwd, 'stdin.js'), done); +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); - function done(error, file) { - if (error || file) { - return callback(error, file) - } +function resolveYamlFloat(data) { + if (data === null) return false; - self.create().then(function (result) { - callback(null, result); - }, callback); + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; } + + return true; } -async function create$1(buf, filePath) { - var self = this; - var fn = (filePath && loaders[path$f.extname(filePath)]) || defaultLoader; - var options = {prefix: self.pluginPrefix, cwd: self.cwd}; - var result = {settings: {}, plugins: []}; - var contents; +function constructYamlFloat(data) { + var value, sign; - if (filePath) { - contents = await fn.apply(self, arguments); - } + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; - if (self.configTransform && contents !== undefined) { - contents = self.configTransform(contents, filePath); + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); } - // Exit if we did find a `package.json`, but it does not have configuration. - if ( - buf && - contents === undefined && - path$f.basename(filePath) === 'package.json' - ) { - return + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; } + return sign * parseFloat(value, 10); +} - if (contents === undefined) { - if (self.defaultConfig) { - await merge$1( - result, - self.defaultConfig, - Object.assign({}, options, {root: self.cwd}) - ); + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; } - } else { - await merge$1( - result, - contents, - Object.assign({}, options, {root: path$f.dirname(filePath)}) - ); + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common$4.isNegativeZero(object)) { + return '-0.0'; } - await merge$1(result, self.given, Object.assign({}, options, {root: self.cwd})); + res = object.toString(10); - return result -} + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack -function loadScriptOrModule(_, filePath) { - return loadFromAbsolutePath(filePath, this.cwd) + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; } -function loadYaml(buf, filePath) { - return yaml.safeLoad(buf, {filename: path$f.basename(filePath)}) +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common$4.isNegativeZero(object)); } -function loadJson(buf, filePath) { - var result = json$2(buf, filePath); +var float = new type$1('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); - if (path$f.basename(filePath) === 'package.json') { - result = result[this.packageField]; - } +var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] +}); - return result +var core = json; + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; } -async function merge$1(target, raw, options) { - if (typeof raw === 'object' && raw !== null) { - await addPreset(raw); - } else { - throw new Error('Expected preset, not `' + raw + '`') - } +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; - return target + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - async function addPreset(result) { - var plugins = result.plugins; + if (match === null) throw new Error('Date resolve error'); - if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && plugins !== null) { - await ('length' in plugins ? addEach(plugins) : addIn(plugins)); - } else { - throw new Error( - 'Expected a list or object of plugins, not `' + plugins + '`' - ) - } + // match: [1] year [2] month [3] day - target.settings = Object.assign({}, target.settings, result.settings); + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); } - async function addEach(result) { - var index = -1; - var value; + // match: [4] hour [5] minute [6] second [7] fraction - while (++index < result.length) { - value = result[index]; + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); - // Keep order sequential instead of parallel. - // eslint-disable-next-line no-await-in-loop - await (value !== null && typeof value === 'object' && 'length' in value - ? use.apply(null, value) - : use(value)); + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; } + fraction = +fraction; } - async function addIn(result) { - var key; + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute - for (key in result) { - // Keep order sequential instead of parallel. - // eslint-disable-next-line no-await-in-loop - await use(key, result[key]); - } + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; } - async function use(usable, value) { - if (typeof usable === 'string') { - await addModule(usable, value); - } else if (typeof usable === 'function') { - addPlugin(usable, value); - } else { - await merge$1(target, usable, options); - } - } + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - async function addModule(id, value) { - var fp = loadPlugin.resolve(id, {cwd: options.root, prefix: options.prefix}); - var result; + if (delta) date.setTime(date.getTime() - delta); - if (fp) { - result = await loadFromAbsolutePath(fp, options.root); + return date; +} - try { - if (typeof result === 'function') { - addPlugin(result, value); - } else { - await merge$1( - target, - result, - Object.assign({}, options, {root: path$f.dirname(fp)}) - ); - } - } catch (_) { - throw fault$1( - 'Error: Expected preset or plugin, not %s, at `%s`', - result, - path$f.relative(options.root, fp) - ) - } - } else { - fp = path$f.relative(options.cwd, path$f.resolve(options.root, id)); - addPlugin( - failingModule(fp, new Error('Could not find module `' + id + '`')), - value - ); - } - } +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} - function addPlugin(result, value) { - var entry = find$2(target.plugins, result); +var timestamp = new type$1('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); - if (entry) { - reconfigure(entry, value); - } else { - target.plugins.push([result, value]); - } - } +function resolveYamlMerge(data) { + return data === '<<' || data === null; } -function reconfigure(entry, value) { - if (plain$1(entry[1]) && plain$1(value)) { - value = Object.assign({}, entry[1], value); +var merge$1 = new type$1('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +/*eslint-disable no-bitwise*/ + + + + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; } - entry[1] = value; + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; } -function find$2(entries, plugin) { - var index = -1; +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; - while (++index < entries.length) { - if (entries[index][0] === plugin) { - return entries[index] + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); } -} -function failingModule(id, error) { - var cache = failingModule.cache || (failingModule.cache = {}); - var submodule = own$f.call(cache, id) ? cache[id] : (cache[id] = fail); - return submodule - function fail() { - throw error + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); } + + return new Uint8Array(result); } -async function loadFromAbsolutePath(fp, base) { - var ext = path$f.extname(fp); - var result; +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; - /* istanbul ignore next - To do next major: Tests don’t run on Node 10 */ - if (ext !== '.mjs') { - try { - result = commonjsRequire(fp); - } catch (error) { - if (ext !== '.cjs' && error.code === 'ERR_REQUIRE_ESM') { - ext = '.mjs'; - } else { - throw fault$1( - 'Cannot parse script `%s`\n%s', - path$f.relative(base, fp), - error.stack - ) - } - } + // Convert every three bytes to 4 ASCII characters. - if (result && typeof result === 'object' && result.__esModule) { - result = result.default; + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; } - } - /* istanbul ignore next - To do next major: Tests don’t run on Node 10 */ - if (ext === '.mjs') { - result = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(fp)); })).default; + bits = (bits << 8) + object[idx]; } - return result -} + // Dump tail -var Configuration = configuration; + tail = max % 3; -var configure_1$2 = configure$6; + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } -function configure$6(context, settings) { - context.configuration = new Configuration(settings); + return result; } -// A simple implementation of make-array -function makeArray (subject) { - return Array.isArray(subject) - ? subject - : [subject] +function isBinary(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; } -const EMPTY = ''; -const SPACE = ' '; -const ESCAPE = '\\'; -const REGEX_TEST_BLANK_LINE = /^\s+$/; -const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; -const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; -const REGEX_SPLITALL_CRLF = /\r?\n/g; -// /foo, -// ./foo, -// ../foo, -// . -// .. -const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; +var binary = new type$1('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); -const SLASH$1 = '/'; -const KEY_IGNORE = typeof Symbol !== 'undefined' - ? Symbol.for('node-ignore') - /* istanbul ignore next */ - : 'node-ignore'; +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = Object.prototype.toString; -const define = (object, key, value) => - Object.defineProperty(object, key, {value}); +function resolveYamlOmap(data) { + if (data === null) return true; -const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -const sanitizeRange = range => range.replace( - REGEX_REGEXP_RANGE, - (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) - ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY -); + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; -// See fixtures #59 -const cleanRangeBackSlash = slashes => { - const {length} = slashes; - return slashes.slice(0, length - length % 2) -}; + if (_toString$2.call(pair) !== '[object Object]') return false; -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` + for (pairKey in pair) { + if (_hasOwnProperty$3.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } -// '`foo/`' should not continue with the '`..`' -const REPLACERS = [ + if (!pairHasKey) return false; - // > Trailing spaces are ignored unless they are quoted with backslash ("\") - [ - // (a\ ) -> (a ) - // (a ) -> (a) - // (a \ ) -> (a ) - /\\?\s+$/, - match => match.indexOf('\\') === 0 - ? SPACE - : EMPTY - ], + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } - // replace (\ ) with ' ' - [ - /\\\s/g, - () => SPACE - ], + return true; +} - // Escape metacharacters - // which is written down by users but means special for regular expressions. +function constructYamlOmap(data) { + return data !== null ? data : []; +} - // > There are 12 characters with special meanings: - // > - the backslash \, - // > - the caret ^, - // > - the dollar sign $, - // > - the period or dot ., - // > - the vertical bar or pipe symbol |, - // > - the question mark ?, - // > - the asterisk or star *, - // > - the plus sign +, - // > - the opening parenthesis (, - // > - the closing parenthesis ), - // > - and the opening square bracket [, - // > - the opening curly brace {, - // > These special characters are often called "metacharacters". - [ - /[\\$.|*+(){^]/g, - match => `\\${match}` - ], +var omap = new type$1('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); - [ - // > a question mark (?) matches a single character - /(?!\\)\?/g, - () => '[^/]' - ], +var _toString$1 = Object.prototype.toString; - // leading slash - [ +function resolveYamlPairs(data) { + if (data === null) return true; - // > A leading slash matches the beginning of the pathname. - // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". - // A leading slash matches the beginning of the pathname - /^\//, - () => '^' - ], + var index, length, pair, keys, result, + object = data; - // replace special metacharacter slash after the leading slash - [ - /\//g, - () => '\\/' - ], + result = new Array(object.length); - [ - // > A leading "**" followed by a slash means match in all directories. - // > For example, "**/foo" matches file or directory "foo" anywhere, - // > the same as pattern "foo". - // > "**/foo/bar" matches file or directory "bar" anywhere that is directly - // > under directory "foo". - // Notice that the '*'s have been replaced as '\\*' - /^\^*\\\*\\\*\\\//, + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; - // '**/foo' <-> 'foo' - () => '^(?:.*\\/)?' - ], + if (_toString$1.call(pair) !== '[object Object]') return false; - // starting - [ - // there will be no leading '/' - // (which has been replaced by section "leading slash") - // If starts with '**', adding a '^' to the regular expression also works - /^(?=[^^])/, - function startingReplacer () { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern + keys = Object.keys(pair); - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' + if (keys.length !== 1) return false; - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^' - } - ], + result[index] = [ keys[0], pair[keys[0]] ]; + } - // two globstars - [ - // Use lookahead assertions so that we could match more than one `'/**'` - /\\\/\\\*\\\*(?=\\\/|$)/g, + return true; +} - // Zero, one or several directories - // should not use '*', or it will be replaced by the next replacer +function constructYamlPairs(data) { + if (data === null) return []; - // Check if it is not the last `'/**'` - (_, index, str) => index + 6 < str.length + var index, length, pair, keys, result, + object = data; - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' + result = new Array(object.length); - // case: /** - // > A trailing `"/**"` matches everything inside. + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; - // #21: everything inside but it should not include the current folder - : '\\/.+' - ], + keys = Object.keys(pair); - // intermediate wildcards - [ - // Never replace escaped '*' - // ignore rule '\*' will match the path '*' + result[index] = [ keys[0], pair[keys[0]] ]; + } - // 'abc.*/' -> go - // 'abc.*' -> skip this rule - /(^|[^\\]+)\\\*(?=.+)/g, + return result; +} - // '*.js' matches '.js' - // '*.js' doesn't match 'abc' - (_, p1) => `${p1}[^\\/]*` - ], +var pairs = new type$1('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); - [ - // unescape, revert step 3 except for back slash - // For example, if a user escape a '\\*', - // after step 3, the result will be '\\\\\\*' - /\\\\\\(?=[$.|*+(){^])/g, - () => ESCAPE - ], +var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; - [ - // '\\\\' -> '\\' - /\\\\/g, - () => ESCAPE - ], +function resolveYamlSet(data) { + if (data === null) return true; - [ - // > The range notation, e.g. [a-zA-Z], - // > can be used to match one of the characters in a range. + var key, object = data; - // `\` is escaped by step 3 - /(\\)?\[([^\]/]*?)(\\*)($|\])/g, - (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` - : close === ']' - ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? `[${sanitizeRange(range)}${endEscape}]` - // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' - : '[]' - ], + for (key in object) { + if (_hasOwnProperty$2.call(object, key)) { + if (object[key] !== null) return false; + } + } - // ending - [ - // 'js' will not match 'js.' - // 'ab' will not match 'abc' - /(?:[^*])$/, + return true; +} - // WTF! - // https://git-scm.com/docs/gitignore - // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) - // which re-fixes #24, #38 +function constructYamlSet(data) { + return data !== null ? data : {}; +} - // > If there is a separator at the end of the pattern then the pattern - // > will only match directories, otherwise the pattern can match both - // > files and directories. +var set = new type$1('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); - // 'js*' will not match 'a.js' - // 'js/' will not match 'a.js' - // 'js' will match 'a.js' and 'a.js/' - match => /\/$/.test(match) - // foo/ will not match 'foo' - ? `${match}$` - // foo matches 'foo' and 'foo/' - : `${match}(?=$|\\/$)` +var _default$1 = core.extend({ + implicit: [ + timestamp, + merge$1 ], + explicit: [ + binary, + omap, + pairs, + set + ] +}); - // trailing wildcard - [ - /(\^|\\\/)?\\\*$/, - (_, p1) => { - const prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? `${p1}[^/]+` +/*eslint-disable max-len,no-use-before-define*/ - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*'; - return `${prefix}(?=$|\\/$)` - } - ], -]; -// A simple cache, because an ignore rule only has only one certain meaning -const regexCache = Object.create(null); -// @param {pattern} -const makeRegex = (pattern, negative, ignorecase) => { - const r = regexCache[pattern]; - if (r) { - return r - } - // const replacers = negative - // ? NEGATIVE_REPLACERS - // : POSITIVE_REPLACERS - const source = REPLACERS.reduce( - (prev, current) => prev.replace(current[0], current[1].bind(pattern)), - pattern - ); - return regexCache[pattern] = ignorecase - ? new RegExp(source, 'i') - : new RegExp(source) -}; +var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; -const isString = subject => typeof subject === 'string'; -// > A blank line matches no files, so it can serve as a separator for readability. -const checkPattern = pattern => pattern - && isString(pattern) - && !REGEX_TEST_BLANK_LINE.test(pattern) +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0; -const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF); +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; -class IgnoreRule { - constructor ( - origin, - pattern, - negative, - regex - ) { - this.origin = origin; - this.pattern = pattern; - this.negative = negative; - this.regex = regex; - } -} -const createRule = (pattern, ignorecase) => { - const origin = pattern; - let negative = false; +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; - // > An optional prefix "!" which negates the pattern; - if (pattern.indexOf('!') === 0) { - negative = true; - pattern = pattern.substr(1); - } - pattern = pattern - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); +function _class(obj) { return Object.prototype.toString.call(obj); } - const regex = makeRegex(pattern, negative, ignorecase); +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} - return new IgnoreRule( - origin, - pattern, - negative, - regex - ) -}; +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} -const throwError$1 = (message, Ctor) => { - throw new Ctor(message) -}; +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} -const checkPath = (path, originalPath, doThrow) => { - if (!isString(path)) { - return doThrow( - `path must be a string, but got \`${originalPath}\``, - TypeError - ) - } +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow(`path must not be empty`, TypeError) - } +function fromHexCode(c) { + var lc; - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - const r = '`path.relative()`d'; - return doThrow( - `path should be a ${r} string, but got "${originalPath}"`, - RangeError - ) + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; } - return true -}; - -const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path); - -checkPath.isNotRelative = isNotRelative; -checkPath.convert = p => p; + /*eslint-disable no-bitwise*/ + lc = c | 0x20; -class Ignore$2 { - constructor ({ - ignorecase = true - } = {}) { - this._rules = []; - this._ignorecase = ignorecase; - define(this, KEY_IGNORE, true); - this._initCache(); + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; } - _initCache () { - this._ignoreCache = Object.create(null); - this._testCache = Object.create(null); - } + return -1; +} - _addPattern (pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules); - this._added = true; - return - } +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} - if (checkPattern(pattern)) { - const rule = createRule(pattern, this._ignorecase); - this._added = true; - this._rules.push(rule); - } +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; } - // @param {Array | string | Ignore} pattern - add (pattern) { - this._added = false; - - makeArray( - isString(pattern) - ? splitPattern(pattern) - : pattern - ).forEach(this._addPattern, this); - - // Some rules have just added to the ignore, - // making the behavior changed. - if (this._added) { - this._initCache(); - } + return -1; +} - return this - } +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} - // legacy - addPattern (pattern) { - return this.add(pattern) +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} - // | ignored : unignored - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - // @param {boolean} whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. +function State$1(input, options) { + this.input = input; - // @returns {TestResult} true if a file is ignored - _testOne (path, checkUnignored) { - let ignored = false; - let unignored = false; + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default$1; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + this.legacy = options['legacy'] || false; - this._rules.forEach(rule => { - const {negative} = rule; - if ( - unignored === negative && ignored !== unignored - || negative && !ignored && !unignored && !checkUnignored - ) { - return - } + this.json = options['json'] || false; + this.listener = options['listener'] || null; - const matched = rule.regex.test(path); + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; - if (matched) { - ignored = !negative; - unignored = negative; - } - }); + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; - return { - ignored, - unignored - } - } + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; - // @returns {TestResult} - _test (originalPath, cache, checkUnignored, slices) { - const path = originalPath - // Supports nullable path - && checkPath.convert(originalPath); + this.documents = []; - checkPath(path, originalPath, throwError$1); + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ - return this._t(path, cache, checkUnignored, slices) - } +} - _t (path, cache, checkUnignored, slices) { - if (path in cache) { - return cache[path] - } - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH$1); - } +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; - slices.pop(); + mark.snippet = snippet(mark); - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._testOne(path, checkUnignored) - } + return new exception(message, mark); +} - const parent = this._t( - slices.join(SLASH$1) + SLASH$1, - cache, - checkUnignored, - slices - ); +function throwError$1(state, message) { + throw generateError(state, message); +} - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent - : this._testOne(path, checkUnignored) +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); } +} - ignores (path) { - return this._test(path, this._ignoreCache, false).ignored - } - createFilter () { - return path => !this.ignores(path) - } +var directiveHandlers = { - filter (paths) { - return makeArray(paths).filter(this.createFilter()) - } + YAML: function handleYamlDirective(state, name, args) { - // @returns {TestResult} - test (path) { - return this._test(path, this._testCache, true) - } -} + var match, major, minor; -const factory$5 = options => new Ignore$2(options); + if (state.version !== null) { + throwError$1(state, 'duplication of %YAML directive'); + } -const returnFalse = () => false; + if (args.length !== 1) { + throwError$1(state, 'YAML directive accepts exactly one argument'); + } -const isPathValid = path => - checkPath(path && checkPath.convert(path), path, returnFalse); + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); -factory$5.isPathValid = isPathValid; + if (match === null) { + throwError$1(state, 'ill-formed argument of the YAML directive'); + } -// Fixes typescript -factory$5.default = factory$5; + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); -var ignore$2 = factory$5; + if (major !== 1) { + throwError$1(state, 'unacceptable YAML version of the document'); + } -// Windows -// -------------------------------------------------------------- -/* istanbul ignore if */ -if ( - // Detect `process` so that it can run in browsers. - typeof process !== 'undefined' - && ( - process.env && process.env.IGNORE_TEST_WIN32 - || process.platform === 'win32' - ) -) { - /* eslint no-control-regex: "off" */ - const makePosix = str => /^\\\\\?\\/.test(str) - || /["<>|\u0000-\u001F]+/u.test(str) - ? str - : str.replace(/\\/g, '/'); + state.version = args[0]; + state.checkLineBreaks = (minor < 2); - checkPath.convert = makePosix; + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; - checkPath.isNotRelative = path => - REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) - || isNotRelative(path); -} + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; -var path$e = require$$0__default$2['default']; -var gitignore$1 = ignore$2; -var FindUp = findUp; + if (args.length !== 2) { + throwError$1(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; -var ignore$1 = Ignore$1; + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError$1(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } -Ignore$1.prototype.check = check$5; + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError$1(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } -function Ignore$1(options) { - this.cwd = options.cwd; - this.ignorePathResolveFrom = options.ignorePathResolveFrom; + if (!PATTERN_TAG_URI.test(prefix)) { + throwError$1(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } - this.findUp = new FindUp({ - filePath: options.ignorePath, - cwd: options.cwd, - detect: options.detectIgnore, - names: options.ignoreName ? [options.ignoreName] : [], - create: create - }); -} + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError$1(state, 'tag prefix is malformed: ' + prefix); + } -function check$5(filePath, callback) { - var self = this; + state.tagMap[handle] = prefix; + } +}; - self.findUp.load(filePath, done); - function done(error, ignore) { - var normal; +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; - if (error) { - callback(error); - } else if (ignore) { - normal = path$e.relative( - path$e.resolve( - self.cwd, - self.ignorePathResolveFrom === 'cwd' ? '.' : ignore.filePath - ), - path$e.resolve(self.cwd, filePath) - ); + if (start < end) { + _result = state.input.slice(start, end); - if ( - normal === '' || - normal === '..' || - normal.charAt(0) === path$e.sep || - normal.slice(0, 3) === '..' + path$e.sep - ) { - callback(null, false); - } else { - callback(null, ignore.ignores(normal)); + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError$1(state, 'expected valid JSON character'); + } } - } else { - callback(null, false); + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError$1(state, 'the stream contains non-printable characters'); } + + state.result += _result; } } -function create(buf, filePath) { - var ignore = gitignore$1().add(String(buf)); - ignore.filePath = path$e.dirname(filePath); - return ignore -} +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; -var old$1 = {}; + if (!common$4.isObject(source)) { + throwError$1(state, 'cannot merge mappings; the provided source object is unacceptable'); + } -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + sourceKeys = Object.keys(source); -var pathModule = require$$0__default$2['default']; -var isWindows$2 = process.platform === 'win32'; -var fs$e = require$$0__default$3['default']; + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; -// JavaScript implementation of realpath, ported from node pre-v6 + if (!_hasOwnProperty$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} -var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { -function rethrow() { - // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and - // is fairly slow to generate. - var callback; - if (DEBUG) { - var backtrace = new Error; - callback = debugCallback; - } else - callback = missingCallback; + var index, quantity; - return callback; + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); - function debugCallback(err) { - if (err) { - backtrace.message = err.message; - err = backtrace; - missingCallback(err); - } - } + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError$1(state, 'nested arrays are not supported inside keys'); + } - function missingCallback(err) { - if (err) { - if (process.throwDeprecation) - throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs - else if (!process.noDeprecation) { - var msg = 'fs: missing callback ' + (err.stack || err.message); - if (process.traceDeprecation) - console.trace(msg); - else - console.error(msg); + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; } } } -} -function maybeCallback(cb) { - return typeof cb === 'function' ? cb : rethrow(); -} + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } -pathModule.normalize; -// Regexp that finds the next partion of a (partial) path -// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] -if (isWindows$2) { - var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; -} else { - var nextPartRe = /(.*?)(?:[\/]+|$)/g; -} + keyNode = String(keyNode); -// Regex to find the device root, including trailing slash. E.g. 'c:\\'. -if (isWindows$2) { - var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; -} else { - var splitRootRe = /^[\/]*/; -} + if (_result === null) { + _result = {}; + } -old$1.realpathSync = function realpathSync(p, cache) { - // make p is absolute - p = pathModule.resolve(p); + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError$1(state, 'duplicated mapping key'); + } - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return cache[p]; + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; } - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; + return _result; +} - start(); +function readLineBreak(state) { + var ch; - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; + ch = state.input.charCodeAt(state.position); - // On windows, check that the root exists. On unix there is no need. - if (isWindows$2 && !knownHard[base]) { - fs$e.lstatSync(base); - knownHard[base] = true; + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; } + } else { + throwError$1(state, 'a line break is expected'); } - // walk down the path, swapping out linked pathparts for their real - // values - // NB: p.length changes. - while (pos < p.length) { - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - continue; - } + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; +} - var resolvedLink; - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // some known symbolic link. no need to stat again. - resolvedLink = cache[base]; - } else { - var stat = fs$e.lstatSync(base); - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - continue; - } +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); - // read the link if it wasn't read before - // dev/ino always return 0 on windows, so skip the check. - var linkTarget = null; - if (!isWindows$2) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - linkTarget = seenLinks[id]; - } - } - if (linkTarget === null) { - fs$e.statSync(base); - linkTarget = fs$e.readlinkSync(base); + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; } - resolvedLink = pathModule.resolve(previous, linkTarget); - // track this, if given a cache. - if (cache) cache[base] = resolvedLink; - if (!isWindows$2) seenLinks[id] = linkTarget; + ch = state.input.charCodeAt(++state.position); } - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } - - if (cache) cache[original] = p; + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } - return p; -}; + if (is_EOL(ch)) { + readLineBreak(state); + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; -old$1.realpath = function realpath(p, cache, cb) { - if (typeof cb !== 'function') { - cb = maybeCallback(cache); - cache = null; + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } } - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return process.nextTick(cb.bind(null, null, cache[p])); + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); } - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; + return lineBreaks; +} - start(); +function testDocumentSeparator(state) { + var _position = state.position, + ch; - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; + ch = state.input.charCodeAt(_position); - // On windows, check that the root exists. On unix there is no need. - if (isWindows$2 && !knownHard[base]) { - fs$e.lstat(base, function(err) { - if (err) return cb(err); - knownHard[base] = true; - LOOP(); - }); - } else { - process.nextTick(LOOP); - } - } + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { - // walk down the path, swapping out linked pathparts for their real - // values - function LOOP() { - // stop if scanned past end of path - if (pos >= p.length) { - if (cache) cache[original] = p; - return cb(null, p); - } + _position += 3; - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; + ch = state.input.charCodeAt(_position); - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - return process.nextTick(LOOP); + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; } + } - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // known symbolic link. no need to stat again. - return gotResolvedLink(cache[base]); - } + return false; +} - return fs$e.lstat(base, gotStat); +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common$4.repeat('\n', count - 1); } +} - function gotStat(err, stat) { - if (err) return cb(err); - // if not a symlink, skip to the next path part - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - return process.nextTick(LOOP); - } +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; - // stat & read the link if not read before - // call gotTarget as soon as the link target is known - // dev/ino always return 0 on windows, so skip the check. - if (!isWindows$2) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - return gotTarget(null, seenLinks[id], base); - } - } - fs$e.stat(base, function(err) { - if (err) return cb(err); + ch = state.input.charCodeAt(state.position); - fs$e.readlink(base, function(err, target) { - if (!isWindows$2) seenLinks[id] = target; - gotTarget(err, target); - }); - }); + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; } - function gotTarget(err, target, base) { - if (err) return cb(err); - - var resolvedLink = pathModule.resolve(previous, target); - if (cache) cache[base] = resolvedLink; - gotResolvedLink(resolvedLink); - } + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); - function gotResolvedLink(resolvedLink) { - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } } -}; -var fs_realpath = realpath$2; -realpath$2.realpath = realpath$2; -realpath$2.sync = realpathSync; -realpath$2.realpathSync = realpathSync; -realpath$2.monkeypatch = monkeypatch; -realpath$2.unmonkeypatch = unmonkeypatch; + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; -var fs$d = require$$0__default$3['default']; -var origRealpath = fs$d.realpath; -var origRealpathSync = fs$d.realpathSync; + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); -var version$2 = process.version; -var ok$2 = /^v[0-5]\./.test(version$2); -var old = old$1; + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } -function newError (er) { - return er && er.syscall === 'realpath' && ( - er.code === 'ELOOP' || - er.code === 'ENOMEM' || - er.code === 'ENAMETOOLONG' - ) -} + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); -function realpath$2 (p, cache, cb) { - if (ok$2) { - return origRealpath(p, cache, cb) - } + if (is_WS_OR_EOL(preceding)) { + break; + } - if (typeof cache === 'function') { - cb = cache; - cache = null; - } - origRealpath(p, cache, function (er, result) { - if (newError(er)) { - old.realpath(p, cache, cb); - } else { - cb(er, result); - } - }); -} + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; -function realpathSync (p, cache) { - if (ok$2) { - return origRealpathSync(p, cache) - } + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); - try { - return origRealpathSync(p, cache) - } catch (er) { - if (newError(er)) { - return old.realpathSync(p, cache) - } else { - throw er + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } } - } -} -function monkeypatch () { - fs$d.realpath = realpath$2; - fs$d.realpathSync = realpathSync; -} - -function unmonkeypatch () { - fs$d.realpath = origRealpath; - fs$d.realpathSync = origRealpathSync; -} + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } -var concatMap$1 = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (isArray$1(x)) res.push.apply(res, x); - else res.push(x); + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; } - return res; -}; -var isArray$1 = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; + ch = state.input.charCodeAt(++state.position); + } -var balancedMatch = balanced$1; -function balanced$1(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); + captureSegment(state, captureStart, captureEnd, false); - var r = range$3(a, b, str); + if (state.result) { + return true; + } - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; + state.kind = _kind; + state.result = _result; + return false; } -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; -balanced$1.range = range$3; -function range$3(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; + ch = state.input.charCodeAt(state.position); - if (ai >= 0 && bi > 0) { - if(a===b) { - return [ai, bi]; - } - begs = []; - left = str.length; + if (ch !== 0x27/* ' */) { + return false; + } - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; - bi = str.indexOf(b, i + 1); + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; } - i = ai < bi && ai >= 0 ? ai : bi; - } + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; - if (begs.length) { - result = [ left, right ]; + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError$1(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; } } - return result; + throwError$1(state, 'unexpected end of the stream within a single quoted scalar'); } -var concatMap = concatMap$1; -var balanced = balancedMatch; +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; -var braceExpansion = expandTop; + ch = state.input.charCodeAt(state.position); -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; + if (ch !== 0x22/* " */) { + return false; + } -function numeric$1(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; - var parts = []; - var m = balanced('{', '}', str); + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; - if (!m) - return str.split(','); + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } + } else { + throwError$1(state, 'expected hexadecimal character'); + } + } - parts.push.apply(parts, p); + state.result += charFromCodepoint(hexResult); - return parts; -} + state.position++; -function expandTop(str) { - if (!str) - return []; + } else { + throwError$1(state, 'unknown escape sequence'); + } - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } + captureStart = captureEnd = state.position; - return expand$4(escapeBraces(str), true).map(unescapeBraces); -} + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError$1(state, 'unexpected end of the document within a double quoted scalar'); -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError$1(state, 'unexpected end of the stream within a double quoted scalar'); } -function expand$4(str, isTop) { - var expansions = []; +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + keyNode, + keyTag, + valueNode, + ch; - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; + ch = state.input.charCodeAt(state.position); - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand$4(str); - } - return [str]; + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; } - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand$4(n[0], false).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand$4(m.post, false) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; } - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. + ch = state.input.charCodeAt(++state.position); - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand$4(m.post, false) - : ['']; + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); - var N; + ch = state.input.charCodeAt(state.position); - if (isSequence) { - var x = numeric$1(n[0]); - var y = numeric$1(n[1]); - var width = Math.max(n[0].length, n[1].length); - var incr = n.length == 3 - ? Math.abs(numeric$1(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError$1(state, 'missed comma between flow collection entries'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError$1(state, "expected the node content, but found ','"); } - var pad = n.some(isPadded); - N = []; + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); } - N.push(c); } - } else { - N = concatMap(n, function(el) { return expand$4(el, false) }); - } - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); + _line = state.line; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; } - } - return expansions; -} + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } -var minimatch_1 = minimatch$3; -minimatch$3.Minimatch = Minimatch$1; + skipSeparationSpace(state, true, nodeIndent); -var path$d = { sep: '/' }; -try { - path$d = require$$0__default$2['default']; -} catch (er) {} + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } -var GLOBSTAR$1 = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {}; -var expand$3 = braceExpansion; + throwError$1(state, 'unexpected end of the stream within a flow collection'); +} -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -}; +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]'; + ch = state.input.charCodeAt(state.position); -// * => any number of characters -var star$3 = qmark + '*?'; + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'; + state.kind = 'scalar'; + state.result = ''; -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'; + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!'); + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError$1(state, 'repeat of a chomping mode identifier'); + } -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true; - return set - }, {}) -} + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError$1(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError$1(state, 'repeat of an indentation width identifier'); + } -// normalizes slashes. -var slashSplit = /\/+/; + } else { + break; + } + } -minimatch$3.filter = filter; -function filter (pattern, options) { - options = options || {}; - return function (p, i, list) { - return minimatch$3(p, pattern, options) + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } } -} -function ext (a, b) { - a = a || {}; - b = b || {}; - var t = {}; - Object.keys(b).forEach(function (k) { - t[k] = b[k]; - }); - Object.keys(a).forEach(function (k) { - t[k] = a[k]; - }); - return t -} + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; -minimatch$3.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch$3 + ch = state.input.charCodeAt(state.position); - var orig = minimatch$3; + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - }; + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - }; + if (is_EOL(ch)) { + emptyLines++; + continue; + } - return m -}; + // End of the scalar. + if (state.lineIndent < textIndent) { -Minimatch$1.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch$1 - return minimatch$3.defaults(def).Minimatch -}; + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common$4.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } -function minimatch$3 (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } + // Break this `while` cycle and go to the funciton's epilogue. + break; + } - if (!options) options = {}; + // Folded style: use fancy rules to handle line breaks. + if (folding) { - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common$4.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - // "" only matches "" - if (pattern.trim() === '') return p === '' + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common$4.repeat('\n', emptyLines + 1); - return new Minimatch$1(pattern, options).match(p) -} + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } -function Minimatch$1 (pattern, options) { - if (!(this instanceof Minimatch$1)) { - return new Minimatch$1(pattern, options) - } + // Several line breaks - perceive as different lines. + } else { + state.result += common$4.repeat('\n', emptyLines); + } - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common$4.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } - if (!options) options = {}; - pattern = pattern.trim(); + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; - // windows support: need to use /, not \ - if (path$d.sep !== '/') { - pattern = pattern.split(path$d.sep).join('/'); - } + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } - this.options = options; - this.set = []; - this.pattern = pattern; - this.regexp = null; - this.negate = false; - this.comment = false; - this.empty = false; + captureSegment(state, captureStart, state.position, false); + } - // make the set of regexps etc. - this.make(); + return true; } -Minimatch$1.prototype.debug = function () {}; - -Minimatch$1.prototype.make = make; -function make () { - // don't do it more than once. - if (this._made) return +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; - var pattern = this.pattern; - var options = this.options; + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true; - return - } - if (!pattern) { - this.empty = true; - return + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; } - // step 1: figure out negation, etc. - this.parseNegate(); + ch = state.input.charCodeAt(state.position); - // step 2: expand braces - var set = this.globSet = this.braceExpand(); + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError$1(state, 'tab characters must not be used in indentation'); + } - if (options.debug) this.debug = console.error; + if (ch !== 0x2D/* - */) { + break; + } - this.debug(this.pattern, set); + following = state.input.charCodeAt(state.position + 1); - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }); + if (!is_WS_OR_EOL(following)) { + break; + } - this.debug(this.pattern, set); + detected = true; + state.position++; - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this); + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } - this.debug(this.pattern, set); + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }); + ch = state.input.charCodeAt(state.position); - this.debug(this.pattern, set); + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError$1(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } - this.set = set; + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; } -Minimatch$1.prototype.parseNegate = parseNegate; -function parseNegate () { - var pattern = this.pattern; - var negate = false; - var options = this.options; - var negateOffset = 0; +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; - if (options.nonegate) return + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate; - negateOffset++; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; } - if (negateOffset) this.pattern = pattern.substr(negateOffset); - this.negate = negate; -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch$3.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -}; - -Minimatch$1.prototype.braceExpand = braceExpand; + ch = state.input.charCodeAt(state.position); -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch$1) { - options = this.options; - } else { - options = {}; + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError$1(state, 'tab characters must not be used in indentation'); } - } - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern; + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } - return expand$3(pattern) -} + detected = true; + atExplicitKey = true; + allowCompact = true; -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch$1.prototype.parse = parse$b; -var SUBPARSE = {}; -function parse$b (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; - var options = this.options; + } else { + throwError$1(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR$1 - if (pattern === '') return '' + state.position += 1; + ch = following; - var re = ''; - var hasMagic = !!options.nocase; - var escaping = false; - // ? => one single character - var patternListStack = []; - var negativeLists = []; - var stateChar; - var inClass = false; - var reClassStart = -1; - var classStart = -1; - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)'; - var self = this; + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star$3; - hasMagic = true; - break - case '?': - re += qmark; - hasMagic = true; - break - default: - re += '\\' + stateChar; - break + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; } - self.debug('clearStateChar %j %j', stateChar, re); - stateChar = false; - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c); - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c; - escaping = false; - continue - } + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } - case '\\': - clearStateChar(); - escaping = true; - continue + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c); + if (!is_WS_OR_EOL(ch)) { + throwError$1(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class'); - if (c === '!' && i === classStart + 1) c = '^'; - re += c; - continue - } + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar); - clearStateChar(); - stateChar = c; - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar(); - continue + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; - case '(': - if (inClass) { - re += '('; - continue - } + } else if (detected) { + throwError$1(state, 'can not read an implicit mapping pair; a colon is missed'); - if (!stateChar) { - re += '\\('; - continue + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. } - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }); - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:'; - this.debug('plType %j %j', stateChar, re); - stateChar = false; - continue + } else if (detected) { + throwError$1(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - case ')': - if (inClass || !patternListStack.length) { - re += '\\)'; - continue - } + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } - clearStateChar(); - hasMagic = true; - var pl = patternListStack.pop(); - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close; - if (pl.type === '!') { - negativeLists.push(pl); - } - pl.reEnd = re.length; - continue + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|'; - escaping = false; - continue + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; } + } - clearStateChar(); - re += '|'; - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar(); + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } - if (inClass) { - re += '\\' + c; - continue - } + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } - inClass = true; - classStart = i; - reClassStart = re.length; - re += c; - continue + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError$1(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c; - escaping = false; - continue - } + // + // Epilogue. + // - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i); - try { - RegExp('[' + cs + ']'); - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE); - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'; - hasMagic = hasMagic || sp[1]; - inClass = false; - continue - } - } + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } - // finish up the class. - hasMagic = true; - inClass = false; - re += c; - continue + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } - default: - // swallow any state char that wasn't consumed - clearStateChar(); + return detected; +} - if (escaping) { - // no need - escaping = false; - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\'; - } +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; - re += c; + ch = state.input.charCodeAt(state.position); - } // switch - } // for + if (ch !== 0x21/* ! */) return false; - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1); - sp = this.parse(cs, SUBPARSE); - re = re.substr(0, reClassStart) + '\\[' + sp[0]; - hasMagic = hasMagic || sp[1]; + if (state.tag !== null) { + throwError$1(state, 'duplication of a tag property'); } - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length); - this.debug('setting tail', re, pl); - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\'; - } + ch = state.input.charCodeAt(++state.position); - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }); + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); - this.debug('tail=%j\n %s', tail, tail, pl, re); - var t = pl.type === '*' ? star$3 - : pl.type === '?' ? qmark - : '\\' + pl.type; + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); - hasMagic = true; - re = re.slice(0, pl.reStart) + t + '\\(' + tail; + } else { + tagHandle = '!'; } - // handle trailing things that only matter at the very end. - clearStateChar(); - if (escaping) { - // trailing \\ - re += '\\\\'; - } + _position = state.position; - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false; - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true; - } + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n]; + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError$1(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { - var nlBefore = re.slice(0, nl.reStart); - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8); - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd); - var nlAfter = re.slice(nl.reEnd); + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); - nlLast += nlAfter; + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError$1(state, 'named tag handle cannot contain such characters'); + } - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1; - var cleanAfter = nlAfter; - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, ''); + isNamed = true; + _position = state.position + 1; + } else { + throwError$1(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); } - nlAfter = cleanAfter; - var dollar = ''; - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$'; + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError$1(state, 'tag suffix cannot contain flow indicator characters'); } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast; - re = newRe; } - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re; + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError$1(state, 'tag name cannot contain such characters: ' + tagName); } - if (addPatternStart) { - re = patternStart + re; + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError$1(state, 'tag name is malformed: ' + tagName); } - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } + if (isVerbatim) { + state.tag = tagName; - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; - var flags = options.nocase ? 'i' : ''; - try { - var regExp = new RegExp('^' + re + '$', flags); - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } + } else if (tagHandle === '!') { + state.tag = '!' + tagName; - regExp._glob = pattern; - regExp._src = re; + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; - return regExp + } else { + throwError$1(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; } -minimatch$3.makeRe = function (pattern, options) { - return new Minimatch$1(pattern, options || {}).makeRe() -}; +function readAnchorProperty(state) { + var _position, + ch; -Minimatch$1.prototype.makeRe = makeRe; -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp + ch = state.input.charCodeAt(state.position); - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set; + if (ch !== 0x26/* & */) return false; - if (!set.length) { - this.regexp = false; - return this.regexp + if (state.anchor !== null) { + throwError$1(state, 'duplication of an anchor property'); } - var options = this.options; - var twoStar = options.noglobstar ? star$3 - : options.dot ? twoStarDot - : twoStarNoDot; - var flags = options.nocase ? 'i' : ''; + ch = state.input.charCodeAt(++state.position); + _position = state.position; - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR$1) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|'); + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$'; + if (state.position === _position) { + throwError$1(state, 'name of an anchor node must contain at least one character'); + } - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$'; + state.anchor = state.input.slice(_position, state.position); + return true; +} - try { - this.regexp = new RegExp(re, flags); - } catch (ex) { - this.regexp = false; +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); } - return this.regexp -} -minimatch$3.match = function (list, pattern, options) { - options = options || {}; - var mm = new Minimatch$1(pattern, options); - list = list.filter(function (f) { - return mm.match(f) - }); - if (mm.options.nonull && !list.length) { - list.push(pattern); + if (state.position === _position) { + throwError$1(state, 'name of an alias node must contain at least one character'); } - return list -}; -Minimatch$1.prototype.match = match; -function match (f, partial) { - this.debug('match', f, this.pattern); - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' + alias = state.input.slice(_position, state.position); - if (f === '/' && partial) return true + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError$1(state, 'unidentified alias "' + alias + '"'); + } - var options = this.options; + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} - // windows: need to use /, not \ - if (path$d.sep !== '/') { - f = f.split(path$d.sep).join('/'); +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this= 0; i--) { - filename = f[i]; - if (filename) break + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } } - for (i = 0; i < set.length; i++) { - var pattern = set[i]; - var file = f; - if (options.matchBase && pattern.length === 1) { - file = [filename]; - } - var hit = this.matchOne(file, pattern, partial); - if (hit) { - if (options.flipNegate) return true - return !this.negate + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } } } - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch$1.prototype.matchOne = function (file, pattern, partial) { - var options = this.options; + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }); + blockIndent = state.position - state.lineStart; - this.debug('matchOne', file.length, pattern.length); + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop'); - var p = pattern[pi]; - var f = file[fi]; + } else if (readAlias(state)) { + hasContent = true; - this.debug(pattern, p, f); + if (state.tag !== null || state.anchor !== null) { + throwError$1(state, 'alias node should not have any properties'); + } - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; - if (p === GLOBSTAR$1) { - this.debug('GLOBSTAR', [pattern, p, f]); + if (state.tag === null) { + state.tag = '?'; + } + } - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi; - var pr = pi + 1; - if (pr === pl) { - this.debug('** at the end'); - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; } - return true } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr]; + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee); + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError$1(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee); - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr); - break - } + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue'); - fr++; + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; } + break; } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr); - if (fr === fl) return true - } - return false } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit; - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase(); - } else { - hit = f === p; + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } } - this.debug('string match', p, f, hit); - } else { - hit = f.match(p); - this.debug('pattern match', p, f, hit); } - if (!hit) return false - } + if (!type) { + throwError$1(state, 'unknown tag !<' + state.tag + '>'); + } - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* + if (state.result !== null && type.kind !== state.kind) { + throwError$1(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === ''); - return emptyFileEnd + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError$1(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } } - // should be unreachable. - throw new Error('wtf?') -}; - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; } -var inherits$3 = {exports: {}}; +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; -var inherits_browser = {exports: {}}; + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - inherits_browser.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } - }; -} else { - // old school shim for old browsers - inherits_browser.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - }; -} + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); -try { - var util$3 = require$$0__default['default']; - /* istanbul ignore next */ - if (typeof util$3.inherits !== 'function') throw ''; - inherits$3.exports = util$3.inherits; -} catch (e) { - /* istanbul ignore next */ - inherits$3.exports = inherits_browser.exports; -} + ch = state.input.charCodeAt(state.position); -var pathIsAbsolute = {exports: {}}; + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } -function posix(path) { - return path.charAt(0) === '/'; -} + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; -pathIsAbsolute.exports = process.platform === 'win32' ? win32 : posix; -pathIsAbsolute.exports.posix = posix; -pathIsAbsolute.exports.win32 = win32; + if (directiveName.length < 1) { + throwError$1(state, 'directive name must not be less than one character in length'); + } -var common$3 = {}; + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } -common$3.setopts = setopts$2; -common$3.ownProp = ownProp$2; -common$3.makeAbs = makeAbs; -common$3.finish = finish; -common$3.mark = mark; -common$3.isIgnored = isIgnored$2; -common$3.childrenIgnored = childrenIgnored$2; + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } -function ownProp$2 (obj, field) { - return Object.prototype.hasOwnProperty.call(obj, field) -} + if (is_EOL(ch)) break; -var path$c = require$$0__default$2['default']; -var minimatch$2 = minimatch_1; -var isAbsolute$2 = pathIsAbsolute.exports; -var Minimatch = minimatch$2.Minimatch; + _position = state.position; -function alphasort (a, b) { - return a.localeCompare(b, 'en') -} + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } -function setupIgnores (self, options) { - self.ignore = options.ignore || []; + directiveArgs.push(state.input.slice(_position, state.position)); + } - if (!Array.isArray(self.ignore)) - self.ignore = [self.ignore]; + if (ch !== 0) readLineBreak(state); - if (self.ignore.length) { - self.ignore = self.ignore.map(ignoreMap); + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } } -} -// ignore patterns are always in dot:true mode. -function ignoreMap (pattern) { - var gmatcher = null; - if (pattern.slice(-3) === '/**') { - var gpattern = pattern.replace(/(\/\*\*)+$/, ''); - gmatcher = new Minimatch(gpattern, { dot: true }); - } + skipSeparationSpace(state, true, -1); - return { - matcher: new Minimatch(pattern, { dot: true }), - gmatcher: gmatcher + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError$1(state, 'directives end mark is expected'); } -} -function setopts$2 (self, pattern, options) { - if (!options) - options = {}; + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern; + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); } - self.silent = !!options.silent; - self.pattern = pattern; - self.strict = options.strict !== false; - self.realpath = !!options.realpath; - self.realpathCache = options.realpathCache || Object.create(null); - self.follow = !!options.follow; - self.dot = !!options.dot; - self.mark = !!options.mark; - self.nodir = !!options.nodir; - if (self.nodir) - self.mark = true; - self.sync = !!options.sync; - self.nounique = !!options.nounique; - self.nonull = !!options.nonull; - self.nosort = !!options.nosort; - self.nocase = !!options.nocase; - self.stat = !!options.stat; - self.noprocess = !!options.noprocess; - self.absolute = !!options.absolute; - - self.maxLength = options.maxLength || Infinity; - self.cache = options.cache || Object.create(null); - self.statCache = options.statCache || Object.create(null); - self.symlinks = options.symlinks || Object.create(null); + state.documents.push(state.result); - setupIgnores(self, options); + if (state.position === state.lineStart && testDocumentSeparator(state)) { - self.changedCwd = false; - var cwd = process.cwd(); - if (!ownProp$2(options, "cwd")) - self.cwd = cwd; - else { - self.cwd = path$c.resolve(options.cwd); - self.changedCwd = self.cwd !== cwd; + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; } - self.root = options.root || path$c.resolve(self.cwd, "/"); - self.root = path$c.resolve(self.root); - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/"); + if (state.position < (state.length - 1)) { + throwError$1(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} - // TODO: is an absolute `cwd` supposed to be resolved against `root`? - // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') - self.cwdAbs = isAbsolute$2(self.cwd) ? self.cwd : makeAbs(self, self.cwd); - if (process.platform === "win32") - self.cwdAbs = self.cwdAbs.replace(/\\/g, "/"); - self.nomount = !!options.nomount; - // disable comments and negation in Minimatch. - // Note that they are not supported in Glob itself anyway. - options.nonegate = true; - options.nocomment = true; +function loadDocuments(input, options) { + input = String(input); + options = options || {}; - self.minimatch = new Minimatch(pattern, options); - self.options = self.minimatch.options; -} + if (input.length !== 0) { -function finish (self) { - var nou = self.nounique; - var all = nou ? [] : Object.create(null); + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } - for (var i = 0, l = self.matches.length; i < l; i ++) { - var matches = self.matches[i]; - if (!matches || Object.keys(matches).length === 0) { - if (self.nonull) { - // do like the shell, and spit out the literal glob - var literal = self.minimatch.globSet[i]; - if (nou) - all.push(literal); - else - all[literal] = true; - } - } else { - // had matches - var m = Object.keys(matches); - if (nou) - all.push.apply(all, m); - else - m.forEach(function (m) { - all[m] = true; - }); + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); } } - if (!nou) - all = Object.keys(all); + var state = new State$1(input, options); - if (!self.nosort) - all = all.sort(alphasort); + var nullpos = input.indexOf('\0'); - // at *some* point we statted all of these - if (self.mark) { - for (var i = 0; i < all.length; i++) { - all[i] = self._mark(all[i]); - } - if (self.nodir) { - all = all.filter(function (e) { - var notDir = !(/\/$/.test(e)); - var c = self.cache[e] || self.cache[makeAbs(self, e)]; - if (notDir && c) - notDir = c !== 'DIR' && !Array.isArray(c); - return notDir - }); - } + if (nullpos !== -1) { + state.position = nullpos; + throwError$1(state, 'null byte is not allowed in input'); } - if (self.ignore.length) - all = all.filter(function(m) { - return !isIgnored$2(self, m) - }); + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; - self.found = all; + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; } -function mark (self, p) { - var abs = makeAbs(self, p); - var c = self.cache[abs]; - var m = p; - if (c) { - var isDir = c === 'DIR' || Array.isArray(c); - var slash = p.slice(-1) === '/'; - if (isDir && !slash) - m += '/'; - else if (!isDir && slash) - m = m.slice(0, -1); +function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } - if (m !== p) { - var mabs = makeAbs(self, m); - self.statCache[mabs] = self.statCache[abs]; - self.cache[mabs] = self.cache[abs]; - } + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; } - return m + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } } -// lotta situps... -function makeAbs (self, f) { - var abs = f; - if (f.charAt(0) === '/') { - abs = path$c.join(self.root, f); - } else if (isAbsolute$2(f) || f === '') { - abs = f; - } else if (self.changedCwd) { - abs = path$c.resolve(self.cwd, f); - } else { - abs = path$c.resolve(f); - } - if (process.platform === 'win32') - abs = abs.replace(/\\/g, '/'); +function load$1(input, options) { + var documents = loadDocuments(input, options); - return abs + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new exception('expected a single document in the stream, but found more'); } -// Return true, if pattern ends with globstar '**', for the accompanying parent directory. -// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored$2 (self, path) { - if (!self.ignore.length) - return false +var loadAll_1 = loadAll$1; +var load_1 = load$1; - return self.ignore.some(function(item) { - return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) - }) -} +var loader = { + loadAll: loadAll_1, + load: load_1 +}; -function childrenIgnored$2 (self, path) { - if (!self.ignore.length) - return false +/*eslint-disable no-use-before-define*/ - return self.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path)) - }) -} -var sync$3 = globSync$1; -globSync$1.GlobSync = GlobSync$1; -var fs$c = require$$0__default$3['default']; -var rp$1 = fs_realpath; -var minimatch$1 = minimatch_1; -var path$b = require$$0__default$2['default']; -var assert$1 = require$$5__default['default']; -var isAbsolute$1 = pathIsAbsolute.exports; -var common$2 = common$3; -var setopts$1 = common$2.setopts; -var ownProp$1 = common$2.ownProp; -var childrenIgnored$1 = common$2.childrenIgnored; -var isIgnored$1 = common$2.isIgnored; -function globSync$1 (pattern, options) { - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - return new GlobSync$1(pattern, options).found -} +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; -function GlobSync$1 (pattern, options) { - if (!pattern) - throw new Error('must provide pattern') +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') +var ESCAPE_SEQUENCES = {}; - if (!(this instanceof GlobSync$1)) - return new GlobSync$1(pattern, options) +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; - setopts$1(this, pattern, options); +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; - if (this.noprocess) - return this +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; - var n = this.minimatch.set.length; - this.matches = new Array(n); - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false); - } - this._finish(); -} +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; -GlobSync$1.prototype._finish = function () { - assert$1(this instanceof GlobSync$1); - if (this.realpath) { - var self = this; - this.matches.forEach(function (matchset, index) { - var set = self.matches[index] = Object.create(null); - for (var p in matchset) { - try { - p = self._makeAbs(p); - var real = rp$1.realpathSync(p, self.realpathCache); - set[real] = true; - } catch (er) { - if (er.syscall === 'stat') - set[self._makeAbs(p)] = true; - else - throw er - } - } - }); - } - common$2.finish(this); -}; + if (map === null) return {}; + result = {}; + keys = Object.keys(map); -GlobSync$1.prototype._process = function (pattern, index, inGlobStar) { - assert$1(this instanceof GlobSync$1); + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); - // Get the first [n] parts of pattern that are all strings. - var n = 0; - while (typeof pattern[n] === 'string') { - n ++; + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; } - // now n is the index of the first one that is *not* a string. - // See if there's anything else - var prefix; - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index); - return + return result; +} - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null; - break +function encodeHex(character) { + var string, handle, length; - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/'); - break + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); } - var remain = pattern.slice(n); + return '\\' + handle + common$4.repeat('0', length - string.length) + string; +} - // get the list of entries. - var read; - if (prefix === null) - read = '.'; - else if (isAbsolute$1(prefix) || isAbsolute$1(pattern.join('/'))) { - if (!prefix || !isAbsolute$1(prefix)) - prefix = '/' + prefix; - read = prefix; - } else - read = prefix; - var abs = this._makeAbs(read); +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; - //if ignored, skip processing - if (childrenIgnored$1(this, read)) - return - - var isGlobStar = remain[0] === minimatch$1.GLOBSTAR; - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar); - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar); -}; +function State(options) { + this.schema = options['schema'] || _default$1; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common$4.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; -GlobSync$1.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { - var entries = this._readdir(abs, inGlobStar); + this.tag = null; + this.result = ''; - // if the abs isn't a dir, then nothing can match! - if (!entries) - return + this.duplicates = []; + this.usedDuplicates = null; +} - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0]; - var negate = !!this.minimatch.negate; - var rawGlob = pn._glob; - var dotOk = this.dot || rawGlob.charAt(0) === '.'; +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common$4.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; - var matchedEntries = []; - for (var i = 0; i < entries.length; i++) { - var e = entries[i]; - if (e.charAt(0) !== '.' || dotOk) { - var m; - if (negate && !prefix) { - m = !e.match(pn); - } else { - m = e.match(pn); - } - if (m) - matchedEntries.push(e); + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; } + + if (line.length && line !== '\n') result += ind; + + result += line; } - var len = matchedEntries.length; - // If there are no matched entries, then nothing matches. - if (len === 0) - return + return result; +} - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. +function generateNextLine(state, level) { + return '\n' + common$4.repeat(' ', state.indent * level); +} - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null); +function testImplicitResolving(state, str) { + var index, length, type; - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i]; - if (prefix) { - if (prefix.slice(-1) !== '/') - e = prefix + '/' + e; - else - e = prefix + e; - } + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; - if (e.charAt(0) === '/' && !this.nomount) { - e = path$b.join(this.root, e); - } - this._emitMatch(index, e); + if (type.resolve(str)) { + return true; } - // This was the last one, and no stats were needed - return } - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift(); - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i]; - var newPattern; - if (prefix) - newPattern = [prefix, e]; - else - newPattern = [e]; - this._process(newPattern.concat(remain), index, inGlobStar); - } -}; + return false; +} +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} -GlobSync$1.prototype._emitMatch = function (index, e) { - if (isIgnored$1(this, e)) - return +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} - var abs = this._makeAbs(e); +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} - if (this.mark) - e = this._mark(e); +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} - if (this.absolute) { - e = abs; - } +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} - if (this.matches[index][e]) - return +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} - if (this.nodir) { - var c = this.cache[abs]; - if (c === 'DIR' || Array.isArray(c)) - return +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } } + return first; +} - this.matches[index][e] = true; +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} - if (this.stat) - this._stat(e); -}; +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { -GlobSync$1.prototype._readdirInGlobStar = function (abs) { - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false) + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); - var entries; - var lstat; - try { - lstat = fs$c.lstatSync(abs); - } catch (er) { - if (er.code === 'ENOENT') { - // lstat failed, doesn't exist - return null + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); } - - var isSym = lstat && lstat.isSymbolicLink(); - this.symlinks[abs] = isSym; - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) - this.cache[abs] = 'FILE'; - else - entries = this._readdir(abs, false); - - return entries -}; - -GlobSync$1.prototype._readdir = function (abs, inGlobStar) { - - if (inGlobStar && !ownProp$1(this.symlinks, abs)) - return this._readdirInGlobStar(abs) - - if (ownProp$1(this.cache, abs)) { - var c = this.cache[abs]; - if (!c || c === 'FILE') - return null - - if (Array.isArray(c)) - return c + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; } - - try { - return this._readdirEntries(abs, fs$c.readdirSync(abs)) - } catch (er) { - this._readdirError(abs, er); - return null + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; } -}; - -GlobSync$1.prototype._readdirEntries = function (abs, entries) { - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i]; - if (abs === '/') - e = abs + e; - else - e = abs + '/' + e; - this.cache[e] = true; - } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} - this.cache[abs] = entries; - - // mark and cache dir-ness - return entries -}; - -GlobSync$1.prototype._readdirError = function (f, er) { - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f); - this.cache[abs] = 'FILE'; - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd); - error.path = this.cwd; - error.code = er.code; - throw error +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false; - break + } - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false; - if (this.strict) - throw er - if (!this.silent) - console.error('glob error', er); - break - } -}; + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); -GlobSync$1.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } - var entries = this._readdir(abs, inGlobStar); + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); +} - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1); - var gspref = prefix ? [ prefix ] : []; - var noGlobStar = gspref.concat(remainWithoutGlobStar); +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false); + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); - var len = entries.length; - var isSym = this.symlinks[abs]; + return indentIndicator + chomp + '\n'; +} - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} - for (var i = 0; i < len; i++) { - var e = entries[i]; - if (e.charAt(0) === '.' && !this.dot) - continue +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar); - this._process(instead, index, true); + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; - var below = gspref.concat(entries[i], remain); - this._process(below, index, true); + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; } -}; -GlobSync$1.prototype._processSimple = function (prefix, index) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var exists = this._stat(prefix); + return result; +} - if (!this.matches[index]) - this.matches[index] = Object.create(null); +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; - // If it doesn't exist, then just mark the lack of results - if (!exists) - return + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; - if (prefix && isAbsolute$1(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix); - if (prefix.charAt(0) === '/') { - prefix = path$b.join(this.root, prefix); - } else { - prefix = path$b.resolve(this.root, prefix); - if (trail) - prefix += '/'; + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 } + curr = next; } - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/'); + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } - // Mark this as a match - this._emitMatch(index, prefix); -}; + return result.slice(1); // drop extra \n joiner +} -// Returns either 'DIR', 'FILE', or false -GlobSync$1.prototype._stat = function (f) { - var abs = this._makeAbs(f); - var needDir = f.slice(-1) === '/'; +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; - if (f.length > this.maxLength) - return false + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; - if (!this.stat && ownProp$1(this.cache, abs)) { - var c = this.cache[abs]; + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } - if (Array.isArray(c)) - c = 'DIR'; + return result; +} - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return c +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; - if (needDir && c === 'FILE') - return false + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - var stat = this.statCache[abs]; - if (!stat) { - var lstat; - try { - lstat = fs$c.lstatSync(abs); - } catch (er) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false; - return false - } + if (state.replacer) { + value = state.replacer.call(object, String(index), value); } - if (lstat && lstat.isSymbolicLink()) { - try { - stat = fs$c.statSync(abs); - } catch (er) { - stat = lstat; - } - } else { - stat = lstat; + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; } } - this.statCache[abs] = stat; + state.tag = _tag; + state.dump = '[' + _result + ']'; +} - var c = true; - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE'; +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; - this.cache[abs] = this.cache[abs] || c; + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; - if (needDir && c === 'FILE') - return false + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } - return c -}; + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { -GlobSync$1.prototype._mark = function (p) { - return common$2.mark(this, p) -}; + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } -GlobSync$1.prototype._makeAbs = function (f) { - return common$2.makeAbs(this, f) -}; + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -var wrappy_1 = wrappy$2; -function wrappy$2 (fn, cb) { - if (fn && cb) return wrappy$2(fn)(cb) + _result += state.dump; + } + } - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k]; - }); +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; - return wrapper + for (index = 0, length = objectKeyList.length; index < length; index += 1) { - function wrapper() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); } - var ret = fn.apply(this, args); - var cb = args[args.length-1]; - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k]; - }); + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; } - return ret - } -} -var once$3 = {exports: {}}; + if (state.dump.length > 1024) pairBuffer += '? '; -var wrappy$1 = wrappy_1; -once$3.exports = wrappy$1(once$2); -once$3.exports.strict = wrappy$1(onceStrict); + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); -once$2.proto = once$2(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once$2(this) - }, - configurable: true - }); + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }); -}); + pairBuffer += state.dump; -function once$2 (fn) { - var f = function () { - if (f.called) return f.value - f.called = true; - return f.value = fn.apply(this, arguments) - }; - f.called = false; - return f -} + // Both key and value are valid. + _result += pairBuffer; + } -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true; - return f.value = fn.apply(this, arguments) - }; - var name = fn.name || 'Function wrapped with `once`'; - f.onceError = name + " shouldn't be called more than once"; - f.called = false; - return f + state.tag = _tag; + state.dump = '{' + _result + '}'; } -var wrappy = wrappy_1; -var reqs = Object.create(null); -var once$1 = once$3.exports; - -var inflight_1 = wrappy(inflight$1); +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; -function inflight$1 (key, cb) { - if (reqs[key]) { - reqs[key].push(cb); - return null - } else { - reqs[key] = [cb]; - return makeres(key) + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); } -} -function makeres (key) { - return once$1(function RES () { - var cbs = reqs[key]; - var len = cbs.length; - var args = slice$2(arguments); + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; - // XXX It's somewhat ambiguous whether a new callback added in this - // pass should be queued for later execution if something in the - // list of callbacks throws, or if it should just be discarded. - // However, it's such an edge case that it hardly matters, and either - // choice is likely as surprising as the other. - // As it happens, we do go ahead and schedule it for later execution. - try { - for (var i = 0; i < len; i++) { - cbs[i].apply(null, args); - } - } finally { - if (cbs.length > len) { - // added more in the interim. - // de-zalgo, just in case, but don't call again. - cbs.splice(0, len); - process.nextTick(function () { - RES.apply(null, args); - }); - } else { - delete reqs[key]; - } + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); } - }) -} - -function slice$2 (args) { - var length = args.length; - var array = []; - for (var i = 0; i < length; i++) array[i] = args[i]; - return array -} + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } -var glob_1 = glob$1; + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } -var fs$b = require$$0__default$3['default']; -var rp = fs_realpath; -var minimatch = minimatch_1; -var inherits$2 = inherits$3.exports; -var EE = require$$0__default$4['default'].EventEmitter; -var path$a = require$$0__default$2['default']; -var assert = require$$5__default['default']; -var isAbsolute = pathIsAbsolute.exports; -var globSync = sync$3; -var common$1 = common$3; -var setopts = common$1.setopts; -var ownProp = common$1.ownProp; -var inflight = inflight_1; -var childrenIgnored = common$1.childrenIgnored; -var isIgnored = common$1.isIgnored; + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); -var once = once$3.exports; + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } -function glob$1 (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {}; - if (!options) options = {}; + pairBuffer += state.dump; - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) - } + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } - return new Glob(pattern, options, cb) -} + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } -glob$1.sync = globSync; -var GlobSync = glob$1.GlobSync = globSync.GlobSync; + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } -// old api surface -glob$1.glob = glob$1; + pairBuffer += state.dump; -function extend$3 (origin, add) { - if (add === null || typeof add !== 'object') { - return origin + // Both key and value are valid. + _result += pairBuffer; } - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. } -glob$1.hasMagic = function (pattern, options_) { - var options = extend$3({}, options_); - options.noprocess = true; +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; - var g = new Glob(pattern, options); - var set = g.minimatch.set; + typeList = explicit ? state.explicitTypes : state.implicitTypes; - if (!pattern) - return false + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; - if (set.length > 1) - return true + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true - } + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } - return false -}; + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; -glob$1.Glob = Glob; -inherits$2(Glob, EE); -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options; - options = null; - } + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } + state.dump = _result; + } - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) - - setopts(this, pattern, options); - this._didRealPath = false; + return true; + } + } - // process each pattern in the minimatch set - var n = this.minimatch.set.length; + return false; +} - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n); +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; - if (typeof cb === 'function') { - cb = once(cb); - this.on('error', cb); - this.on('end', function (matches) { - cb(null, matches); - }); + if (!detectType(state, object, false)) { + detectType(state, object, true); } - var self = this; - this._processing = 0; + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; - this._emitQueue = []; - this._processQueue = []; - this.paused = false; + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } - if (this.noprocess) - return this + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; - if (n === 0) - return done() + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } - var sync = true; - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done); + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; } - sync = false; - function done () { - --self._processing; - if (self._processing <= 0) { - if (sync) { - process.nextTick(function () { - self._finish(); - }); + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } } else { - self._finish(); + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); } - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob); - if (this.aborted) - return - if (this.realpath && !this._didRealpath) - return this._realpath() + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); - common$1.finish(this); - this.emit('end', this.found); -}; + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } -Glob.prototype._realpath = function () { - if (this._didRealpath) - return + state.dump = tagStr + ' ' + state.dump; + } + } - this._didRealpath = true; + return true; +} - var n = this.matches.length; - if (n === 0) - return this._finish() +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; - var self = this; - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next); + inspectNode(object, objects, duplicatesIndexes); - function next () { - if (--n === 0) - self._finish(); + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); } -}; - -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index]; - if (!matchset) - return cb() - - var found = Object.keys(matchset); - var self = this; - var n = found.length; - - if (n === 0) - return cb() + state.usedDuplicates = new Array(length); +} - var set = this.matches[index] = Object.create(null); - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p); - rp.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true; - else if (er.syscall === 'stat') - set[p] = true; - else - self.emit('error', er); // srsly wtf right here +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; - if (--n === 0) { - self.matches[index] = set; - cb(); + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); } - }); - }); -}; - -Glob.prototype._mark = function (p) { - return common$1.mark(this, p) -}; - -Glob.prototype._makeAbs = function (f) { - return common$1.makeAbs(this, f) -}; - -Glob.prototype.abort = function () { - this.aborted = true; - this.emit('abort'); -}; + } else { + objects.push(object); -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true; - this.emit('pause'); - } -}; + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume'); - this.paused = false; - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0); - this._emitQueue.length = 0; - for (var i = 0; i < eq.length; i ++) { - var e = eq[i]; - this._emitMatch(e[0], e[1]); - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0); - this._processQueue.length = 0; - for (var i = 0; i < pq.length; i ++) { - var p = pq[i]; - this._processing--; - this._process(p[0], p[1], p[2], p[3]); + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } } } } -}; +} -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob); - assert(typeof cb === 'function'); +function dump$1(input, options) { + options = options || {}; - if (this.aborted) - return + var state = new State(options); - this._processing++; - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]); - return - } + if (!state.noRefs) getDuplicateReferences(input, state); - //console.error('PROCESS %d', this._processing, pattern) + var value = input; - // Get the first [n] parts of pattern that are all strings. - var n = 0; - while (typeof pattern[n] === 'string') { - n ++; + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); } - // now n is the index of the first one that is *not* a string. - // see if there's anything else - var prefix; - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb); - return + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null; - break + return ''; +} - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/'); - break - } +var dump_1 = dump$1; - var remain = pattern.slice(n); +var dumper = { + dump: dump_1 +}; - // get the list of entries. - var read; - if (prefix === null) - read = '.'; - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix; - read = prefix; - } else - read = prefix; +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} - var abs = this._makeAbs(read); - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() +var Type = type$1; +var Schema = schema$1; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default$1; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; - var isGlobStar = remain[0] === minimatch.GLOBSTAR; - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb); - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb); +// Re-export all types in case user wants to create custom schema +var types$1 = { + binary: binary, + float: float, + map: map$3, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge$1, + omap: omap, + seq: seq, + str: str }; -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this; - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }); +// Removed functions from JS-YAML 3.0.x +var safeLoad = renamed('safeLoad', 'load'); +var safeLoadAll = renamed('safeLoadAll', 'loadAll'); +var safeDump = renamed('safeDump', 'dump'); + +var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types$1, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump }; -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { +var isArrayish$2 = function isArrayish(obj) { + if (!obj) { + return false; + } - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && obj.splice instanceof Function); +}; - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0]; - var negate = !!this.minimatch.negate; - var rawGlob = pn._glob; - var dotOk = this.dot || rawGlob.charAt(0) === '.'; +var util$2 = require$$0$4; +var isArrayish$1 = isArrayish$2; - var matchedEntries = []; - for (var i = 0; i < entries.length; i++) { - var e = entries[i]; - if (e.charAt(0) !== '.' || dotOk) { - var m; - if (negate && !prefix) { - m = !e.match(pn); - } else { - m = e.match(pn); - } - if (m) - matchedEntries.push(e); - } - } +var errorEx$1 = function errorEx(name, properties) { + if (!name || name.constructor !== String) { + properties = name || {}; + name = Error.name; + } - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + var errorExError = function ErrorEXError(message) { + if (!this) { + return new ErrorEXError(message); + } - var len = matchedEntries.length; - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() + message = message instanceof Error + ? message.message + : (message || this.message); - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. + Error.call(this, message); + Error.captureStackTrace(this, errorExError); - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null); + this.name = name; - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i]; - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e; - else - e = prefix + e; - } + Object.defineProperty(this, 'message', { + configurable: true, + enumerable: false, + get: function () { + var newMessage = message.split(/\r?\n/g); - if (e.charAt(0) === '/' && !this.nomount) { - e = path$a.join(this.root, e); - } - this._emitMatch(index, e); - } - // This was the last one, and no stats were needed - return cb() - } + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift(); - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i]; - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e; - else - e = prefix + e; - } - this._process([e].concat(remain), index, inGlobStar, cb); - } - cb(); -}; + var modifier = properties[key]; -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return + if ('message' in modifier) { + newMessage = modifier.message(this[key], newMessage) || newMessage; + if (!isArrayish$1(newMessage)) { + newMessage = [newMessage]; + } + } + } - if (isIgnored(this, e)) - return + return newMessage.join('\n'); + }, + set: function (v) { + message = v; + } + }); - if (this.paused) { - this._emitQueue.push([index, e]); - return - } + var overwrittenStack = null; - var abs = isAbsolute(e) ? e : this._makeAbs(e); + var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack'); + var stackGetter = stackDescriptor.get; + var stackValue = stackDescriptor.value; + delete stackDescriptor.value; + delete stackDescriptor.writable; - if (this.mark) - e = this._mark(e); + stackDescriptor.set = function (newstack) { + overwrittenStack = newstack; + }; - if (this.absolute) - e = abs; + stackDescriptor.get = function () { + var stack = (overwrittenStack || ((stackGetter) + ? stackGetter.call(this) + : stackValue)).split(/\r?\n+/g); - if (this.matches[index][e]) - return + // starting in Node 7, the stack builder caches the message. + // just replace it. + if (!overwrittenStack) { + stack[0] = this.name + ': ' + this.message; + } - if (this.nodir) { - var c = this.cache[abs]; - if (c === 'DIR' || Array.isArray(c)) - return - } + var lineCount = 1; + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } - this.matches[index][e] = true; + var modifier = properties[key]; - var st = this.statCache[abs]; - if (st) - this.emit('stat', e, st); + if ('line' in modifier) { + var line = modifier.line(this[key]); + if (line) { + stack.splice(lineCount++, 0, ' ' + line); + } + } - this.emit('match', e); -}; + if ('stack' in modifier) { + modifier.stack(this[key], stack); + } + } -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return + return stack.join('\n'); + }; - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) + Object.defineProperty(this, 'stack', stackDescriptor); + }; - var lstatkey = 'lstat\0' + abs; - var self = this; - var lstatcb = inflight(lstatkey, lstatcb_); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(errorExError.prototype, Error.prototype); + Object.setPrototypeOf(errorExError, Error); + } else { + util$2.inherits(errorExError, Error); + } - if (lstatcb) - fs$b.lstat(abs, lstatcb); + return errorExError; +}; - function lstatcb_ (er, lstat) { - if (er && er.code === 'ENOENT') - return cb() +errorEx$1.append = function (str, def) { + return { + message: function (v, message) { + v = v || def; - var isSym = lstat && lstat.isSymbolicLink(); - self.symlinks[abs] = isSym; + if (v) { + message[0] += ' ' + str.replace('%s', v.toString()); + } - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) { - self.cache[abs] = 'FILE'; - cb(); - } else - self._readdir(abs, false, cb); - } + return message; + } + }; }; -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return +errorEx$1.line = function (str, def) { + return { + line: function (v) { + v = v || def; - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb); - if (!cb) - return + if (v) { + return str.replace('%s', v.toString()); + } - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) + return null; + } + }; +}; - if (ownProp(this.cache, abs)) { - var c = this.cache[abs]; - if (!c || c === 'FILE') - return cb() +var errorEx_1 = errorEx$1; - if (Array.isArray(c)) - return cb(null, c) - } - fs$b.readdir(abs, readdirCb(this, abs, cb)); +const hexify = char => { + const h = char.charCodeAt(0).toString(16).toUpperCase(); + return '0x' + (h.length % 2 ? '0' : '') + h }; -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb); - else - self._readdirEntries(abs, entries, cb); +const parseError = (e, txt, context) => { + if (!txt) { + return { + message: e.message + ' while parsing empty string', + position: 0, + } } -} + const badToken = e.message.match(/^Unexpected token (.) .*position\s+(\d+)/i); + const errIdx = badToken ? +badToken[2] + : e.message.match(/^Unexpected end of JSON.*/i) ? txt.length - 1 + : null; -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return + const msg = badToken ? e.message.replace(/^Unexpected token ./, `Unexpected token ${ + JSON.stringify(badToken[1]) + } (${hexify(badToken[1])})`) + : e.message; - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i]; - if (abs === '/') - e = abs + e; - else - e = abs + '/' + e; - this.cache[e] = true; + if (errIdx !== null && errIdx !== undefined) { + const start = errIdx <= context ? 0 + : errIdx - context; + + const end = errIdx + context >= txt.length ? txt.length + : errIdx + context; + + const slice = (start === 0 ? '' : '...') + + txt.slice(start, end) + + (end === txt.length ? '' : '...'); + + const near = txt === slice ? '' : 'near '; + + return { + message: msg + ` while parsing ${near}${JSON.stringify(slice)}`, + position: errIdx, + } + } else { + return { + message: msg + ` while parsing '${txt.slice(0, context * 2)}'`, + position: 0, } } - - this.cache[abs] = entries; - return cb(null, entries) }; -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return +class JSONParseError extends SyntaxError { + constructor (er, txt, context, caller) { + context = context || 20; + const metadata = parseError(er, txt, context); + super(metadata.message); + Object.assign(this, metadata); + this.code = 'EJSONPARSE'; + this.systemError = er; + Error.captureStackTrace(this, caller || this.constructor); + } + get name () { return this.constructor.name } + set name (n) {} + get [Symbol.toStringTag] () { return this.constructor.name } +} - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f); - this.cache[abs] = 'FILE'; - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd); - error.path = this.cwd; - error.code = er.code; - this.emit('error', error); - this.abort(); - } - break +const kIndent = Symbol.for('indent'); +const kNewline = Symbol.for('newline'); +// only respect indentation if we got a line break, otherwise squash it +// things other than objects and arrays aren't indented, so ignore those +// Important: in both of these regexps, the $1 capture group is the newline +// or undefined, and the $2 capture group is the indent, or undefined. +const formatRE = /^\s*[{\[]((?:\r?\n)+)([\s\t]*)/; +const emptyRE = /^(?:\{\}|\[\])((?:\r?\n)+)?$/; - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false; - break +const parseJson$1 = (txt, reviver, context) => { + const parseText = stripBOM(txt); + context = context || 20; + try { + // get the indentation so that we can save it back nicely + // if the file starts with {" then we have an indent of '', ie, none + // otherwise, pick the indentation of the next line after the first \n + // If the pattern doesn't match, then it means no indentation. + // JSON.stringify ignores symbols, so this is reasonably safe. + // if the string is '{}' or '[]', then use the default 2-space indent. + const [, newline = '\n', indent = ' '] = parseText.match(emptyRE) || + parseText.match(formatRE) || + [, '', '']; - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false; - if (this.strict) { - this.emit('error', er); - // If the error is handled, then we abort - // if not, we threw out of here - this.abort(); - } - if (!this.silent) - console.error('glob error', er); - break - } + const result = JSON.parse(parseText, reviver); + if (result && typeof result === 'object') { + result[kNewline] = newline; + result[kIndent] = indent; + } + return result + } catch (e) { + if (typeof txt !== 'string' && !Buffer.isBuffer(txt)) { + const isEmptyArray = Array.isArray(txt) && txt.length === 0; + throw Object.assign(new TypeError( + `Cannot parse ${isEmptyArray ? 'an empty array' : String(txt)}` + ), { + code: 'EJSONPARSE', + systemError: e, + }) + } - return cb() + throw new JSONParseError(e, parseText, context, parseJson$1) + } }; -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this; - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb); - }); -}; +// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) +// because the buffer-to-string conversion in `fs.readFileSync()` +// translates it to FEFF, the UTF-16 BOM. +const stripBOM = txt => String(txt).replace(/^\uFEFF/, ''); +var jsonParseEvenBetterErrors = parseJson$1; +parseJson$1.JSONParseError = JSONParseError; -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) +parseJson$1.noExceptions = (txt, reviver) => { + try { + return JSON.parse(stripBOM(txt), reviver) + } catch (e) {} +}; - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() +var LF = '\n'; +var CR = '\r'; +var LinesAndColumns$1 = (function () { + function LinesAndColumns(string) { + this.string = string; + var offsets = [0]; + for (var offset = 0; offset < string.length;) { + switch (string[offset]) { + case LF: + offset += LF.length; + offsets.push(offset); + break; + case CR: + offset += CR.length; + if (string[offset] === LF) { + offset += LF.length; + } + offsets.push(offset); + break; + default: + offset++; + break; + } + } + this.offsets = offsets; + } + LinesAndColumns.prototype.locationForIndex = function (index) { + if (index < 0 || index > this.string.length) { + return null; + } + var line = 0; + var offsets = this.offsets; + while (offsets[line + 1] <= index) { + line++; + } + var column = index - offsets[line]; + return { line: line, column: column }; + }; + LinesAndColumns.prototype.indexForLocation = function (location) { + var line = location.line, column = location.column; + if (line < 0 || line >= this.offsets.length) { + return null; + } + if (column < 0 || column > this.lengthOfLine(line)) { + return null; + } + return this.offsets[line] + column; + }; + LinesAndColumns.prototype.lengthOfLine = function (line) { + var offset = this.offsets[line]; + var nextOffset = line === this.offsets.length - 1 ? this.string.length : this.offsets[line + 1]; + return nextOffset - offset; + }; + return LinesAndColumns; +}()); - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1); - var gspref = prefix ? [ prefix ] : []; - var noGlobStar = gspref.concat(remainWithoutGlobStar); +var dist = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': LinesAndColumns$1 +}); - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb); +var require$$2 = /*@__PURE__*/getAugmentedNamespace(dist); - var isSym = this.symlinks[abs]; - var len = entries.length; +var lib$4 = {}; - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() +var lib$3 = {}; - for (var i = 0; i < len; i++) { - var e = entries[i]; - if (e.charAt(0) === '.' && !this.dot) - continue +var jsTokens = {}; - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar); - this._process(instead, index, true, cb); +// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell +// License: MIT. (See LICENSE.) - var below = gspref.concat(entries[i], remain); - this._process(below, index, true, cb); - } +Object.defineProperty(jsTokens, "__esModule", { + value: true +}); - cb(); -}; +// This regex comes from regex.coffee, and is inserted here by generate-index.js +// (run `npm run build`). +jsTokens.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g; -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this; - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb); - }); +jsTokens.matchToToken = function(match) { + var token = {type: "invalid", value: match[0], closed: undefined}; + if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]); + else if (match[ 5]) token.type = "comment"; + else if (match[ 6]) token.type = "comment", token.closed = !!match[7]; + else if (match[ 8]) token.type = "regex"; + else if (match[ 9]) token.type = "number"; + else if (match[10]) token.type = "name"; + else if (match[11]) token.type = "punctuator"; + else if (match[12]) token.type = "whitespace"; + return token }; -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - //console.error('ps2', prefix, exists) +var lib$2 = {}; - if (!this.matches[index]) - this.matches[index] = Object.create(null); +var identifier = {}; - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() +Object.defineProperty(identifier, "__esModule", { + value: true +}); +identifier.isIdentifierStart = isIdentifierStart; +identifier.isIdentifierChar = isIdentifierChar; +identifier.isIdentifierName = isIdentifierName; +let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; +let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; +const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); +const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); +nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; +const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8952, 286, 50, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; +const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix); - if (prefix.charAt(0) === '/') { - prefix = path$a.join(this.root, prefix); - } else { - prefix = path$a.resolve(this.root, prefix); - if (trail) - prefix += '/'; - } +function isInAstralSet(code, set) { + let pos = 0x10000; + + for (let i = 0, length = set.length; i < length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; } - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/'); + return false; +} - // Mark this as a match - this._emitMatch(index, prefix); - cb(); -}; +function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f); - var needDir = f.slice(-1) === '/'; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } - if (f.length > this.maxLength) - return cb() + return isInAstralSet(code, astralIdentifierStartCodes); +} - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs]; +function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; - if (Array.isArray(c)) - c = 'DIR'; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + } - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); +} - if (needDir && c === 'FILE') - return cb() +function isIdentifierName(name) { + let isFirst = true; - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - var stat = this.statCache[abs]; - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE'; - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) + for (let i = 0; i < name.length; i++) { + let cp = name.charCodeAt(i); + + if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) { + const trail = name.charCodeAt(++i); + + if ((trail & 0xfc00) === 0xdc00) { + cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); + } } - } - var self = this; - var statcb = inflight('stat\0' + abs, lstatcb_); - if (statcb) - fs$b.lstat(abs, statcb); + if (isFirst) { + isFirst = false; - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return fs$b.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb); - else - self._stat2(f, abs, er, stat, cb); - }) - } else { - self._stat2(f, abs, er, lstat, cb); + if (!isIdentifierStart(cp)) { + return false; + } + } else if (!isIdentifierChar(cp)) { + return false; } } -}; - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false; - return cb() - } - var needDir = f.slice(-1) === '/'; - this.statCache[abs] = stat; + return !isFirst; +} - if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) - return cb(null, false, stat) +var keyword = {}; - var c = true; - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE'; - this.cache[abs] = this.cache[abs] || c; +Object.defineProperty(keyword, "__esModule", { + value: true +}); +keyword.isReservedWord = isReservedWord; +keyword.isStrictReservedWord = isStrictReservedWord; +keyword.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; +keyword.isStrictBindReservedWord = isStrictBindReservedWord; +keyword.isKeyword = isKeyword; +const reservedWords = { + keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], + strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], + strictBind: ["eval", "arguments"] +}; +const keywords$1 = new Set(reservedWords.keyword); +const reservedWordsStrictSet = new Set(reservedWords.strict); +const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); - if (needDir && c === 'FILE') - return cb() +function isReservedWord(word, inModule) { + return inModule && word === "await" || word === "enum"; +} - return cb(null, c, stat) -}; +function isStrictReservedWord(word, inModule) { + return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); +} -/*! - * Determine if an object is a Buffer - * - * @author Feross Aboukhadijeh - * @license MIT - */ +function isStrictBindOnlyReservedWord(word) { + return reservedWordsStrictBindSet.has(word); +} -var isBuffer = function isBuffer (obj) { - return obj != null && obj.constructor != null && - typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) -}; +function isStrictBindReservedWord(word, inModule) { + return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); +} -var own$e = {}.hasOwnProperty; +function isKeyword(word) { + return keywords$1.has(word); +} -var unistUtilStringifyPosition = stringify$e; +(function (exports) { -function stringify$e(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isIdentifierName", { + enumerable: true, + get: function () { + return _identifier.isIdentifierName; } - - // Node. - if (own$e.call(value, 'position') || own$e.call(value, 'type')) { - return position$4(value.position) +}); +Object.defineProperty(exports, "isIdentifierChar", { + enumerable: true, + get: function () { + return _identifier.isIdentifierChar; } - - // Position. - if (own$e.call(value, 'start') || own$e.call(value, 'end')) { - return position$4(value) +}); +Object.defineProperty(exports, "isIdentifierStart", { + enumerable: true, + get: function () { + return _identifier.isIdentifierStart; } - - // Point. - if (own$e.call(value, 'line') || own$e.call(value, 'column')) { - return point$3(value) +}); +Object.defineProperty(exports, "isReservedWord", { + enumerable: true, + get: function () { + return _keyword.isReservedWord; } - - // ? - return '' -} - -function point$3(point) { - if (!point || typeof point !== 'object') { - point = {}; +}); +Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindOnlyReservedWord; } - - return index$2(point.line) + ':' + index$2(point.column) -} - -function position$4(pos) { - if (!pos || typeof pos !== 'object') { - pos = {}; +}); +Object.defineProperty(exports, "isStrictBindReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindReservedWord; } +}); +Object.defineProperty(exports, "isStrictReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictReservedWord; + } +}); +Object.defineProperty(exports, "isKeyword", { + enumerable: true, + get: function () { + return _keyword.isKeyword; + } +}); - return point$3(pos.start) + '-' + point$3(pos.end) -} - -function index$2(value) { - return value && typeof value === 'number' ? value : 1 -} - -var stringify$d = unistUtilStringifyPosition; +var _identifier = identifier; -var vfileMessage$1 = VMessage$3; +var _keyword = keyword; +}(lib$2)); -// Inherit from `Error#`. -function VMessagePrototype$1() {} -VMessagePrototype$1.prototype = Error.prototype; -VMessage$3.prototype = new VMessagePrototype$1(); +var chalk = {exports: {}}; -// Message properties. -var proto$2 = VMessage$3.prototype; +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; -proto$2.file = ''; -proto$2.name = ''; -proto$2.reason = ''; -proto$2.message = ''; -proto$2.stack = ''; -proto$2.fatal = null; -proto$2.column = null; -proto$2.line = null; +var escapeStringRegexp$1 = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } -// Construct a new VMessage. -// -// Note: We cannot invoke `Error` on the created context, as that adds readonly -// `line` and `column` attributes on Safari 9, thus throwing and failing the -// data. -function VMessage$3(reason, position, origin) { - var parts; - var range; - var location; + return str.replace(matchOperatorsRe, '\\$&'); +}; - if (typeof position === 'string') { - origin = position; - position = null; - } +var ansiStyles = {exports: {}}; - parts = parseOrigin$1(origin); - range = stringify$d(position) || '1:1'; +var conversions$2 = {exports: {}}; - location = { - start: {line: null, column: null}, - end: {line: null, column: null} - }; +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; - // Node. - if (position && position.position) { - position = position.position; - } +/* MIT license */ - if (position) { - // Position. - if (position.start) { - location = position; - position = position.start; - } else { - // Point. - location.start = position; - } - } +var cssKeywords = colorName; - if (reason.stack) { - this.stack = reason.stack; - reason = reason.message; - } +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) - this.message = reason; - this.name = range; - this.reason = reason; - this.line = position ? position.line : null; - this.column = position ? position.column : null; - this.location = location; - this.source = parts[0]; - this.ruleId = parts[1]; +var reverseKeywords = {}; +for (var key$1 in cssKeywords) { + if (cssKeywords.hasOwnProperty(key$1)) { + reverseKeywords[cssKeywords[key$1]] = key$1; + } } -function parseOrigin$1(origin) { - var result = [null, null]; - var index; - - if (typeof origin === 'string') { - index = origin.indexOf(':'); +var convert$2 = conversions$2.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; - if (index === -1) { - result[1] = origin; - } else { - result[0] = origin.slice(0, index); - result[1] = origin.slice(index + 1); - } - } +// hide .channels and .labels properties +for (var model in convert$2) { + if (convert$2.hasOwnProperty(model)) { + if (!('channels' in convert$2[model])) { + throw new Error('missing channels property: ' + model); + } - return result -} + if (!('labels' in convert$2[model])) { + throw new Error('missing channel labels property: ' + model); + } -var minpath$1 = require$$0__default$2['default']; + if (convert$2[model].labels.length !== convert$2[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } -var minproc$1 = process; + var channels = convert$2[model].channels; + var labels$1 = convert$2[model].labels; + delete convert$2[model].channels; + delete convert$2[model].labels; + Object.defineProperty(convert$2[model], 'channels', {value: channels}); + Object.defineProperty(convert$2[model], 'labels', {value: labels$1}); + } +} -var p$1 = minpath$1; -var proc$2 = minproc$1; -var buffer$5 = isBuffer; +convert$2.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; -var core$3 = VFile$3; + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } -var own$d = {}.hasOwnProperty; + h = Math.min(h * 60, 360); -// Order of setting (least specific to most), we need this because otherwise -// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a -// stem can be set. -var order$4 = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; + if (h < 0) { + h += 360; + } -VFile$3.prototype.toString = toString$9; + l = (min + max) / 2; -// Access full path (`~/index.min.js`). -Object.defineProperty(VFile$3.prototype, 'path', {get: getPath$1, set: setPath$1}); + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } -// Access parent path (`~`). -Object.defineProperty(VFile$3.prototype, 'dirname', { - get: getDirname$1, - set: setDirname$1 -}); + return [h, s * 100, l * 100]; +}; -// Access basename (`index.min.js`). -Object.defineProperty(VFile$3.prototype, 'basename', { - get: getBasename$1, - set: setBasename$1 -}); +convert$2.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; -// Access extname (`.js`). -Object.defineProperty(VFile$3.prototype, 'extname', { - get: getExtname$1, - set: setExtname$1 -}); + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; -// Access stem (`index.min`). -Object.defineProperty(VFile$3.prototype, 'stem', {get: getStem$1, set: setStem$1}); + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); -// Construct a new file. -function VFile$3(options) { - var prop; - var index; + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } - if (!options) { - options = {}; - } else if (typeof options === 'string' || buffer$5(options)) { - options = {contents: options}; - } else if ('message' in options && 'messages' in options) { - return options - } + return [ + h * 360, + s * 100, + v * 100 + ]; +}; - if (!(this instanceof VFile$3)) { - return new VFile$3(options) - } +convert$2.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert$2.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); - this.data = {}; - this.messages = []; - this.history = []; - this.cwd = proc$2.cwd(); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - // Set path related properties in the correct order. - index = -1; + return [h, w * 100, b * 100]; +}; - while (++index < order$4.length) { - prop = order$4[index]; +convert$2.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; - if (own$d.call(options, prop)) { - this[prop] = options[prop]; - } - } + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; - // Set non-path related properties. - for (prop in options) { - if (order$4.indexOf(prop) < 0) { - this[prop] = options[prop]; - } - } -} + return [c * 100, m * 100, y * 100, k * 100]; +}; -function getPath$1() { - return this.history[this.history.length - 1] +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); } -function setPath$1(path) { - assertNonEmpty$1(path, 'path'); - - if (this.path !== path) { - this.history.push(path); - } -} +convert$2.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } -function getDirname$1() { - return typeof this.path === 'string' ? p$1.dirname(this.path) : undefined -} + var currentClosestDistance = Infinity; + var currentClosestKeyword; -function setDirname$1(dirname) { - assertPath$1(this.path, 'dirname'); - this.path = p$1.join(dirname || '', this.basename); -} + for (var keyword in cssKeywords) { + if (cssKeywords.hasOwnProperty(keyword)) { + var value = cssKeywords[keyword]; -function getBasename$1() { - return typeof this.path === 'string' ? p$1.basename(this.path) : undefined -} + // Compute comparative distance + var distance = comparativeDistance(rgb, value); -function setBasename$1(basename) { - assertNonEmpty$1(basename, 'basename'); - assertPart$1(basename, 'basename'); - this.path = p$1.join(this.dirname || '', basename); -} + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } -function getExtname$1() { - return typeof this.path === 'string' ? p$1.extname(this.path) : undefined -} + return currentClosestKeyword; +}; -function setExtname$1(extname) { - assertPart$1(extname, 'extname'); - assertPath$1(this.path, 'extname'); +convert$2.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; - if (extname) { - if (extname.charCodeAt(0) !== 46 /* `.` */) { - throw new Error('`extname` must start with `.`') - } +convert$2.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; - if (extname.indexOf('.', 1) > -1) { - throw new Error('`extname` cannot contain multiple dots') - } - } + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - this.path = p$1.join(this.dirname, this.stem + (extname || '')); -} + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); -function getStem$1() { - return typeof this.path === 'string' - ? p$1.basename(this.path, this.extname) - : undefined -} + return [x * 100, y * 100, z * 100]; +}; -function setStem$1(stem) { - assertNonEmpty$1(stem, 'stem'); - assertPart$1(stem, 'stem'); - this.path = p$1.join(this.dirname || '', stem + (this.extname || '')); -} +convert$2.rgb.lab = function (rgb) { + var xyz = convert$2.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; -// Get the value of the file. -function toString$9(encoding) { - return (this.contents || '').toString(encoding) -} + x /= 95.047; + y /= 100; + z /= 108.883; -// Assert that `part` is not a path (i.e., does not contain `p.sep`). -function assertPart$1(part, name) { - if (part && part.indexOf(p$1.sep) > -1) { - throw new Error( - '`' + name + '` cannot be a path: did not expect `' + p$1.sep + '`' - ) - } -} + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); -// Assert that `part` is not empty. -function assertNonEmpty$1(part, name) { - if (!part) { - throw new Error('`' + name + '` cannot be empty') - } -} + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); -// Assert `path` exists. -function assertPath$1(path, name) { - if (!path) { - throw new Error('Setting `' + name + '` requires `path` to be set too') - } -} + return [l, a, b]; +}; -var VMessage$2 = vfileMessage$1; -var VFile$2 = core$3; +convert$2.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; -var lib$6 = VFile$2; + if (s === 0) { + val = l * 255; + return [val, val, val]; + } -VFile$2.prototype.message = message$1; -VFile$2.prototype.info = info$1; -VFile$2.prototype.fail = fail$2; + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } -// Create a message with `reason` at `position`. -// When an error is passed in as `reason`, copies the stack. -function message$1(reason, position, origin) { - var message = new VMessage$2(reason, position, origin); + t1 = 2 * l - t2; - if (this.path) { - message.name = this.path + ':' + message.name; - message.file = this.path; - } + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } - message.fatal = false; + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } - this.messages.push(message); + rgb[i] = val * 255; + } - return message -} + return rgb; +}; -// Fail: creates a vmessage, associates it with the file, and throws it. -function fail$2() { - var message = this.message.apply(this, arguments); +convert$2.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; - message.fatal = true; + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - throw message -} + return [h, sv * 100, v * 100]; +}; -// Info: creates a vmessage, associates it with the file, and marks the fatality -// as null. -function info$1() { - var message = this.message.apply(this, arguments); +convert$2.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; - message.fatal = null; + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; - return message -} + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; -var vfile$9 = lib$6; +convert$2.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; -var buffer$4 = isBuffer; -var vfile$8 = vfile$9; + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; -var core$2 = toVFile; + return [h, sl * 100, l * 100]; +}; -// Create a virtual file from a description. If `options` is a string or a -// buffer, it’s used as the path. In all other cases, the options are passed -// through to `vfile()`. -function toVFile(options) { - if (typeof options === 'string' || buffer$4(options)) { - options = {path: String(options)}; - } +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert$2.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; - return vfile$8(options) -} + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } -var sync$2 = {}; + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; -var fs$a = require$$0__default$3['default']; -var path$9 = require$$0__default$2['default']; -var vfile$7 = core$2; + if ((i & 0x01) !== 0) { + f = 1 - f; + } -sync$2.read = readSync; -sync$2.write = writeSync; + n = wh + f * (v - wh); // linear interpolation -// Create a virtual file and read it in, synchronously. -function readSync(description, options) { - var file = vfile$7(description); - file.contents = fs$a.readFileSync(path$9.resolve(file.cwd, file.path), options); - return file -} + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } -// Create a virtual file and write it out, synchronously. -function writeSync(description, options) { - var file = vfile$7(description); - fs$a.writeFileSync( - path$9.resolve(file.cwd, file.path), - file.contents || '', - options - ); - return file -} + return [r * 255, g * 255, b * 255]; +}; -var async$1 = {}; +convert$2.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; -var fs$9 = require$$0__default$3['default']; -var path$8 = require$$0__default$2['default']; -var vfile$6 = core$2; + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); -async$1.read = read$3; -async$1.write = write; + return [r * 255, g * 255, b * 255]; +}; -// Create a virtual file and read it in, asynchronously. -function read$3(description, options, callback) { - var file = vfile$6(description); +convert$2.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - if (!callback) { - return new Promise(executor) - } + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; - executor(resolve, callback); + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; - function resolve(result) { - callback(null, result); - } + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; - function executor(resolve, reject) { - var fp; + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); - try { - fp = path$8.resolve(file.cwd, file.path); - } catch (error) { - return reject(error) - } + return [r * 255, g * 255, b * 255]; +}; - fs$9.readFile(fp, options, done); +convert$2.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; - function done(error, res) { - if (error) { - reject(error); - } else { - file.contents = res; - resolve(file); - } - } - } -} + x /= 95.047; + y /= 100; + z /= 108.883; -// Create a virtual file and write it out, asynchronously. -function write(description, options, callback) { - var file = vfile$6(description); + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - // Weird, right? Otherwise `fs` doesn’t accept it. - if (!callback && typeof options === 'function') { - callback = options; - options = undefined; - } + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); - if (!callback) { - return new Promise(executor) - } + return [l, a, b]; +}; - executor(resolve, callback); +convert$2.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; - function resolve(result) { - callback(null, result); - } + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; - function executor(resolve, reject) { - var fp; + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - try { - fp = path$8.resolve(file.cwd, file.path); - } catch (error) { - return reject(error) - } + x *= 95.047; + y *= 100; + z *= 108.883; - fs$9.writeFile(fp, file.contents || '', options, done); + return [x, y, z]; +}; - function done(error) { - if (error) { - reject(error); - } else { - resolve(file); - } - } - } -} +convert$2.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; -var vfile$5 = core$2; -var sync$1 = sync$2; -var async = async$1; + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; -var fs$8 = vfile$5; + if (h < 0) { + h += 360; + } -vfile$5.read = async.read; -vfile$5.readSync = sync$1.read; -vfile$5.write = async.write; -vfile$5.writeSync = sync$1.write; + c = Math.sqrt(a * a + b * b); -var toVfile = fs$8; + return [l, c, h]; +}; -var path$7 = require$$0__default$2['default']; -var fs$7 = require$$0__default$3['default']; -var gitignore = ignore$2; -var glob = glob_1; -var vfile$4 = toVfile; +convert$2.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; -var finder = find$1; + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); -// Search `patterns`, a mix of globs, paths, and files. -function find$1(input, options, callback) { - expand$2(input, options, done); + return [l, a, b]; +}; - function done(error, result) { - /* istanbul ignore if - glob errors are unusual. - * other errors are on the vfile results. */ - if (error) { - callback(error); - } else { - callback(null, {oneFileMode: oneFileMode(result), files: result.output}); - } - } -} +convert$2.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert$2.rgb.hsv(args)[2]; // hsv -> ansi16 optimization -// Expand the given glob patterns, search given and found directories, and map -// to vfiles. -function expand$2(input, options, next) { - var paths = []; - var actual = 0; - var expected = 0; - var failed; + value = Math.round(value / 50); - input.forEach(each); + if (value === 0) { + return 30; + } - if (!expected) { - search$1(paths, options, done); - } + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); - function each(file) { - if (typeof file === 'string') { - if (glob.hasMagic(file)) { - expected++; - glob(file, {cwd: options.cwd}, one); - } else { - // `relative` to make the paths canonical. - file = - path$7.relative(options.cwd, path$7.resolve(options.cwd, file)) || '.'; - paths.push(file); - } - } else { - file.cwd = options.cwd; - file.path = path$7.relative(options.cwd, file.path); - file.history = [file.path]; - paths.push(file); - } - } + if (value === 2) { + ansi += 60; + } - function one(error, files) { - /* istanbul ignore if - Glob errors are unusual. */ - if (failed) { - return - } + return ansi; +}; - /* istanbul ignore if - Glob errors are unusual. */ - if (error) { - failed = true; - done(error); - } else { - actual++; - paths = paths.concat(files); +convert$2.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert$2.rgb.ansi16(convert$2.hsv.rgb(args), args[2]); +}; - if (actual === expected) { - search$1(paths, options, done); - } - } - } +convert$2.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; - function done(error, files) { - /* istanbul ignore if - `search` currently does not give errors. */ - if (error) { - next(error); - } else { - next(null, {input: paths, output: files}); - } - } -} + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } -// Search `paths`. -function search$1(input, options, next) { - var extraIgnore = gitignore().add(options.ignorePatterns); - var files = []; - var expected = 0; - var actual = 0; + if (r > 248) { + return 231; + } - input.forEach(each); + return Math.round(((r - 8) / 247) * 24) + 232; + } - if (!expected) { - next(null, files); - } + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); - return each + return ansi; +}; - function each(file) { - var ext = typeof file === 'string' ? path$7.extname(file) : file.extname; - var part; +convert$2.ansi16.rgb = function (args) { + var color = args % 10; - // Normalise globs. - if (typeof file === 'string') { - file = file.split('/').join(path$7.sep); - } + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } - part = base(file); + color = color / 10.5 * 255; - if (options.nested && (part.charAt(0) === '.' || part === 'node_modules')) { - return - } + return [color, color, color]; + } - expected++; + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; - statAndIgnore( - file, - Object.assign({}, options, {extraIgnore: extraIgnore}), - handle - ); + return [r, g, b]; +}; - function handle(error, result) { - var ignored = result && result.ignored; - var dir = result && result.stats && result.stats.isDirectory(); +convert$2.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } - if (ignored && (options.nested || options.silentlyIgnore)) { - return one(null, []) - } + args -= 16; - if (!ignored && dir) { - return fs$7.readdir(path$7.resolve(options.cwd, filePath(file)), directory) - } + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; - if ( - !dir && - options.nested && - options.extensions.length > 0 && - options.extensions.indexOf(ext) === -1 - ) { - return one(null, []) - } + return [r, g, b]; +}; - file = vfile$4(file); - file.cwd = options.cwd; +convert$2.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); - if (ignored) { - try { - file.fail('Cannot process specified file: it’s ignored'); - } catch (_) {} - } + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; - if (error && error.code === 'ENOENT') { - try { - file.fail( - error.syscall === 'stat' ? 'No such file or directory' : error - ); - } catch (_) {} - } +convert$2.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } - one(null, [file]); - } + var colorString = match[0]; - function directory(error, basenames) { - var file; + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } - /* istanbul ignore if - Should not happen often: the directory is `stat`ed - * first, which was ok, but reading it is not. */ - if (error) { - file = vfile$4(filePath(file)); - file.cwd = options.cwd; + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; - try { - file.fail('Cannot read directory'); - } catch (_) {} + return [r, g, b]; +}; - one(null, [file]); - } else { - search$1( - basenames.map(concat), - Object.assign({}, options, {nested: true}), - one - ); - } - } +convert$2.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; - // Error is never given. Always given `results`. - function one(_, results) { - /* istanbul ignore else - Always given. */ - if (results) { - files = files.concat(results); - } + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } - actual++; + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } - if (actual === expected) { - next(null, files); - } - } + hue /= 6; + hue %= 1; - function concat(value) { - return path$7.join(filePath(file), value) - } - } -} + return [hue * 360, chroma * 100, grayscale * 100]; +}; -function statAndIgnore(file, options, callback) { - var fp = path$7.resolve(options.cwd, filePath(file)); - var normal = path$7.relative(options.cwd, fp); - var expected = 1; - var actual = 0; - var stats; - var ignored; +convert$2.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; - if (!file.contents) { - expected++; - fs$7.stat(fp, handleStat); - } + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } - options.ignore.check(fp, handleIgnore); + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } - function handleStat(error, value) { - stats = value; - one(error); - } + return [hsl[0], c * 100, f * 100]; +}; - function handleIgnore(error, value) { - ignored = value; - one(error); - } +convert$2.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; - function one(error) { - actual++; + var c = s * v; + var f = 0; - if (error) { - callback(error); - actual = -1; - } else if (actual === expected) { - callback(null, { - stats: stats, - ignored: - ignored || - (normal === '' || - normal === '..' || - normal.charAt(0) === path$7.sep || - normal.slice(0, 3) === '..' + path$7.sep - ? false - : options.extraIgnore.ignores(normal)) - }); - } - } -} + if (c < 1.0) { + f = (v - c) / (1 - c); + } -function base(file) { - return typeof file === 'string' ? path$7.basename(file) : file.basename -} + return [hsv[0], c * 100, f * 100]; +}; -function filePath(file) { - return typeof file === 'string' ? file : file.path -} +convert$2.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; -function oneFileMode(result) { - return ( - result.output.length === 1 && - result.input.length === 1 && - result.output[0].path === result.input[0] - ) -} + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } -var Ignore = ignore$1; -var find = finder; + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; -var fileSystem_1$1 = fileSystem$3; + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } -// Find files from the file-system. -function fileSystem$3(context, settings, next) { - if (context.files.length === 0) { - next(); - } else { - find( - context.files, - { - cwd: settings.cwd, - extensions: settings.extensions, - silentlyIgnore: settings.silentlyIgnore, - ignorePatterns: settings.ignorePatterns, - ignore: new Ignore({ - cwd: settings.cwd, - detectIgnore: settings.detectIgnore, - ignoreName: settings.ignoreName, - ignorePath: settings.ignorePath, - ignorePathResolveFrom: settings.ignorePathResolveFrom - }) - }, - onfound - ); - } + mg = (1.0 - c) * g; - function onfound(error, result) { - var output = result.files; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; - // Sort alphabetically. - // Everything is unique so we do not care about cases where left and right - // are equal. - output.sort(sortAlphabetically); +convert$2.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; - // Mark as given. - // This allows outputting files, which can be pretty dangerous, so it’s - // “hidden”. - output.forEach(markAsGiven); + var v = c + g * (1.0 - c); + var f = 0; - context.files = output; + if (v > 0.0) { + f = c / v; + } - // If `out` was not set, detect it based on whether one file was given. - if (settings.out === null || settings.out === undefined) { - settings.out = result.oneFileMode; - } + return [hcg[0], f * 100, v * 100]; +}; - next(error); - } +convert$2.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; - function markAsGiven(file) { - file.data.unifiedEngineGiven = true; - } + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; - function sortAlphabetically(left, right) { - return left.path < right.path ? -1 : 1 - } -} + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } -/* eslint-disable node/no-deprecated-api */ + return [hcg[0], s * 100, l * 100]; +}; -var toString$8 = Object.prototype.toString; +convert$2.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; -var isModern = ( - typeof Buffer !== 'undefined' && - typeof Buffer.alloc === 'function' && - typeof Buffer.allocUnsafe === 'function' && - typeof Buffer.from === 'function' -); +convert$2.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; -function isArrayBuffer (input) { - return toString$8.call(input).slice(8, -1) === 'ArrayBuffer' -} + if (c < 1) { + g = (v - c) / (1 - c); + } -function fromArrayBuffer (obj, byteOffset, length) { - byteOffset >>>= 0; + return [hwb[0], c * 100, g * 100]; +}; - var maxLength = obj.byteLength - byteOffset; +convert$2.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; - if (maxLength < 0) { - throw new RangeError("'offset' is out of bounds") - } +convert$2.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; - if (length === undefined) { - length = maxLength; - } else { - length >>>= 0; +convert$2.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; - if (length > maxLength) { - throw new RangeError("'length' is out of bounds") - } - } +convert$2.gray.hsl = convert$2.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; - return isModern - ? Buffer.from(obj.slice(byteOffset, byteOffset + length)) - : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length))) -} +convert$2.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8'; - } +convert$2.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } +convert$2.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; - return isModern - ? Buffer.from(string, encoding) - : new Buffer(string, encoding) -} +convert$2.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; -function bufferFrom$1 (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; - if (isArrayBuffer(value)) { - return fromArrayBuffer(value, encodingOrOffset, length) - } +convert$2.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } +var conversions$1 = conversions$2.exports; - return isModern - ? Buffer.from(value) - : new Buffer(value) -} +/* + this function routes a model to all other models. -var bufferFrom_1 = bufferFrom$1; + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). -var typedarray = {}; + conversions that are not possible simply are not included. +*/ -(function (exports) { -var undefined$1 = (void 0); // Paranoia +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions$1); -// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to -// create, and consume so much memory, that the browser appears frozen. -var MAX_ARRAY_LENGTH = 1e5; + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } -// Approximations of internal ECMAScript conversion functions -var ECMAScript = (function() { - // Stash a copy in case other scripts modify these - var opts = Object.prototype.toString, - ophop = Object.prototype.hasOwnProperty; + return graph; +} - return { - // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues: - Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); }, - HasProperty: function(o, p) { return p in o; }, - HasOwnProperty: function(o, p) { return ophop.call(o, p); }, - IsCallable: function(o) { return typeof o === 'function'; }, - ToInt32: function(v) { return v >> 0; }, - ToUint32: function(v) { return v >>> 0; } - }; -}()); +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop -// Snapshot intrinsics -var LN2 = Math.LN2, - abs = Math.abs, - floor = Math.floor, - log = Math.log, - min = Math.min, - pow = Math.pow, - round = Math.round; + graph[fromModel].distance = 0; -// ES5: lock down object properties -function configureProperties(obj) { - if (getOwnPropNames && defineProp) { - var props = getOwnPropNames(obj), i; - for (i = 0; i < props.length; i += 1) { - defineProp(obj, props[i], { - value: obj[props[i]], - writable: false, - enumerable: false, - configurable: false - }); - } - } + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions$1[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; } -// emulate ES5 getter/setter API using legacy APIs -// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx -// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but -// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless) -var defineProp; -if (Object.defineProperty && (function() { - try { - Object.defineProperty({}, 'x', {}); - return true; - } catch (e) { - return false; - } - })()) { - defineProp = Object.defineProperty; -} else { - defineProp = function(o, p, desc) { - if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object"); - if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); } - if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); } - if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; } - return o; - }; +function link$1(from, to) { + return function (args) { + return to(from(args)); + }; } -var getOwnPropNames = Object.getOwnPropertyNames || function (o) { - if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object"); - var props = [], p; - for (p in o) { - if (ECMAScript.HasOwnProperty(o, p)) { - props.push(p); - } - } - return props; -}; +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions$1[graph[toModel].parent][toModel]; -// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value) -// for index in 0 ... obj.length -function makeArrayAccessors(obj) { - if (!defineProp) { return; } + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link$1(conversions$1[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } - if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill"); + fn.conversion = path; + return fn; +} - function makeArrayAccessor(index) { - defineProp(obj, index, { - 'get': function() { return obj._getter(index); }, - 'set': function(v) { obj._setter(index, v); }, - enumerable: true, - configurable: false - }); - } +var route$1 = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; - var i; - for (i = 0; i < obj.length; i += 1) { - makeArrayAccessor(i); - } -} + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; -// Internal conversion functions: -// pack() - take a number (interpreted as Type), output a byte array -// unpack() - take a byte array, output a Type-like number + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } -function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; } -function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; } + conversion[toModel] = wrapConversion(toModel, graph); + } -function packI8(n) { return [n & 0xff]; } -function unpackI8(bytes) { return as_signed(bytes[0], 8); } + return conversion; +}; -function packU8(n) { return [n & 0xff]; } -function unpackU8(bytes) { return as_unsigned(bytes[0], 8); } +var conversions = conversions$2.exports; +var route = route$1; -function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; } +var convert$1 = {}; -function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; } -function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); } +var models = Object.keys(conversions); -function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; } -function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); } +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } -function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } -function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } -function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } -function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + return fn(args); + }; -function packIEEE754(v, ebits, fbits) { + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } - var bias = (1 << (ebits - 1)) - 1, - s, e, f, i, bits, str, bytes; + return wrappedFn; +} - function roundToEven(n) { - var w = floor(n), f = n - w; - if (f < 0.5) - return w; - if (f > 0.5) - return w + 1; - return w % 2 ? w + 1 : w; - } +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } - // Compute sign, exponent, fraction - if (v !== v) { - // NaN - // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping - e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; - } else if (v === Infinity || v === -Infinity) { - e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; - } else if (v === 0) { - e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; - } else { - s = v < 0; - v = abs(v); + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } - if (v >= pow(2, 1 - bias)) { - e = min(floor(log(v) / LN2), 1023); - f = roundToEven(v / pow(2, e) * pow(2, fbits)); - if (f / pow(2, fbits) >= 2) { - e = e + 1; - f = 1; - } - if (e > bias) { - // Overflow - e = (1 << ebits) - 1; - f = 0; - } else { - // Normalized - e = e + bias; - f = f - pow(2, fbits); - } - } else { - // Denormalized - e = 0; - f = roundToEven(v / pow(2, 1 - bias - fbits)); - } - } + var result = fn(args); - // Pack sign, exponent, fraction - bits = []; - for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } - for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } - bits.push(s ? 1 : 0); - bits.reverse(); - str = bits.join(''); + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } - // Bits to bytes - bytes = []; - while (str.length) { - bytes.push(parseInt(str.substring(0, 8), 2)); - str = str.substring(8); - } - return bytes; -} + return result; + }; -function unpackIEEE754(bytes, ebits, fbits) { + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } - // Bytes to bits - var bits = [], i, j, b, str, - bias, s, e, f; + return wrappedFn; +} - for (i = bytes.length; i; i -= 1) { - b = bytes[i - 1]; - for (j = 8; j; j -= 1) { - bits.push(b % 2 ? 1 : 0); b = b >> 1; - } - } - bits.reverse(); - str = bits.join(''); +models.forEach(function (fromModel) { + convert$1[fromModel] = {}; - // Unpack sign, exponent, fraction - bias = (1 << (ebits - 1)) - 1; - s = parseInt(str.substring(0, 1), 2) ? -1 : 1; - e = parseInt(str.substring(1, 1 + ebits), 2); - f = parseInt(str.substring(1 + ebits), 2); + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - // Produce number - if (e === (1 << ebits) - 1) { - return f !== 0 ? NaN : s * Infinity; - } else if (e > 0) { - // Normalized - return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); - } else if (f !== 0) { - // Denormalized - return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); - } else { - return s < 0 ? -0 : 0; - } -} + var routes = route(fromModel); + var routeModels = Object.keys(routes); -function unpackF64(b) { return unpackIEEE754(b, 11, 52); } -function packF64(v) { return packIEEE754(v, 11, 52); } -function unpackF32(b) { return unpackIEEE754(b, 8, 23); } -function packF32(v) { return packIEEE754(v, 8, 23); } + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); -// -// 3 The ArrayBuffer Type -// +var colorConvert = convert$1; -(function() { +(function (module) { +const colorConvert$1 = colorConvert; - /** @constructor */ - var ArrayBuffer = function ArrayBuffer(length) { - length = ECMAScript.ToInt32(length); - if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer'); +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert$1, arguments); + return `\u001B[${code + offset}m`; +}; - this.byteLength = length; - this._bytes = []; - this._bytes.length = length; +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert$1, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; - var i; - for (i = 0; i < this.byteLength; i += 1) { - this._bytes[i] = 0; - } +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert$1, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; - configureProperties(this); - }; +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], - exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer; + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], - // - // 4 The ArrayBufferView Type - // + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; - // NOTE: this constructor is not exported - /** @constructor */ - var ArrayBufferView = function ArrayBufferView() { - //this.buffer = null; - //this.byteOffset = 0; - //this.byteLength = 0; - }; + // Fix humans + styles.color.grey = styles.color.gray; - // - // 5 The Typed Array View Types - // + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; - function makeConstructor(bytesPerElement, pack, unpack) { - // Each TypedArray type requires a distinct constructor instance with - // identical logic, which this produces. + for (const styleName of Object.keys(group)) { + const style = group[styleName]; - var ctor; - ctor = function(buffer, byteOffset, length) { - var array, sequence, i, s; + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; - if (!arguments.length || typeof arguments[0] === 'number') { - // Constructor(unsigned long length) - this.length = ECMAScript.ToInt32(arguments[0]); - if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer'); + group[styleName] = styles[styleName]; - this.byteLength = this.length * this.BYTES_PER_ELEMENT; - this.buffer = new ArrayBuffer(this.byteLength); - this.byteOffset = 0; - } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) { - // Constructor(TypedArray array) - array = arguments[0]; + codes.set(style[0], style[1]); + } - this.length = array.length; - this.byteLength = this.length * this.BYTES_PER_ELEMENT; - this.buffer = new ArrayBuffer(this.byteLength); - this.byteOffset = 0; + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); - for (i = 0; i < this.length; i += 1) { - this._setter(i, array._getter(i)); - } - } else if (typeof arguments[0] === 'object' && - !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { - // Constructor(sequence array) - sequence = arguments[0]; + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + } - this.length = ECMAScript.ToUint32(sequence.length); - this.byteLength = this.length * this.BYTES_PER_ELEMENT; - this.buffer = new ArrayBuffer(this.byteLength); - this.byteOffset = 0; + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; - for (i = 0; i < this.length; i += 1) { - s = sequence[i]; - this._setter(i, Number(s)); - } - } else if (typeof arguments[0] === 'object' && - (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { - // Constructor(ArrayBuffer buffer, - // optional unsigned long byteOffset, optional unsigned long length) - this.buffer = buffer; + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; - this.byteOffset = ECMAScript.ToUint32(byteOffset); - if (this.byteOffset > this.buffer.byteLength) { - throw new RangeError("byteOffset out of range"); - } + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; - if (this.byteOffset % this.BYTES_PER_ELEMENT) { - // The given byteOffset must be a multiple of the element - // size of the specific type, otherwise an exception is raised. - throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size."); - } + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; - if (arguments.length < 3) { - this.byteLength = this.buffer.byteLength - this.byteOffset; + for (let key of Object.keys(colorConvert$1)) { + if (typeof colorConvert$1[key] !== 'object') { + continue; + } - if (this.byteLength % this.BYTES_PER_ELEMENT) { - throw new RangeError("length of buffer minus byteOffset not a multiple of the element size"); - } - this.length = this.byteLength / this.BYTES_PER_ELEMENT; - } else { - this.length = ECMAScript.ToUint32(length); - this.byteLength = this.length * this.BYTES_PER_ELEMENT; - } + const suite = colorConvert$1[key]; - if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { - throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); - } - } else { - throw new TypeError("Unexpected argument type(s)"); - } + if (key === 'ansi16') { + key = 'ansi'; + } - this.constructor = ctor; + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } - configureProperties(this); - makeArrayAccessors(this); - }; + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } - ctor.prototype = new ArrayBufferView(); - ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement; - ctor.prototype._pack = pack; - ctor.prototype._unpack = unpack; - ctor.BYTES_PER_ELEMENT = bytesPerElement; + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } + } - // getter type (unsigned long index); - ctor.prototype._getter = function(index) { - if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + return styles; +} - index = ECMAScript.ToUint32(index); - if (index >= this.length) { - return undefined$1; - } +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); +}(ansiStyles)); - var bytes = [], i, o; - for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; - i < this.BYTES_PER_ELEMENT; - i += 1, o += 1) { - bytes.push(this.buffer._bytes[o]); - } - return this._unpack(bytes); - }; +var hasFlag$2 = (flag, argv) => { + argv = argv || process.argv; + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const pos = argv.indexOf(prefix + flag); + const terminatorPos = argv.indexOf('--'); + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); +}; - // NONSTANDARD: convenience alias for getter: type get(unsigned long index); - ctor.prototype.get = ctor.prototype._getter; +const os$1 = require$$0$2; +const hasFlag$1 = hasFlag$2; - // setter void (unsigned long index, type value); - ctor.prototype._setter = function(index, value) { - if (arguments.length < 2) throw new SyntaxError("Not enough arguments"); +const env$1 = process.env; - index = ECMAScript.ToUint32(index); - if (index >= this.length) { - return undefined$1; - } +let forceColor; +if (hasFlag$1('no-color') || + hasFlag$1('no-colors') || + hasFlag$1('color=false')) { + forceColor = false; +} else if (hasFlag$1('color') || + hasFlag$1('colors') || + hasFlag$1('color=true') || + hasFlag$1('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env$1) { + forceColor = env$1.FORCE_COLOR.length === 0 || parseInt(env$1.FORCE_COLOR, 10) !== 0; +} - var bytes = this._pack(value), i, o; - for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; - i < this.BYTES_PER_ELEMENT; - i += 1, o += 1) { - this.buffer._bytes[o] = bytes[i]; - } - }; +function translateLevel$1(level) { + if (level === 0) { + return false; + } - // void set(TypedArray array, optional unsigned long offset); - // void set(sequence array, optional unsigned long offset); - ctor.prototype.set = function(index, value) { - if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); - var array, sequence, offset, len, - i, s, d, - byteOffset, byteLength, tmp; + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} - if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) { - // void set(TypedArray array, optional unsigned long offset); - array = arguments[0]; - offset = ECMAScript.ToUint32(arguments[1]); +function supportsColor$1(stream) { + if (forceColor === false) { + return 0; + } - if (offset + array.length > this.length) { - throw new RangeError("Offset plus length of array is out of range"); - } + if (hasFlag$1('color=16m') || + hasFlag$1('color=full') || + hasFlag$1('color=truecolor')) { + return 3; + } - byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT; - byteLength = array.length * this.BYTES_PER_ELEMENT; + if (hasFlag$1('color=256')) { + return 2; + } - if (array.buffer === this.buffer) { - tmp = []; - for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) { - tmp[i] = array.buffer._bytes[s]; - } - for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) { - this.buffer._bytes[d] = tmp[i]; - } - } else { - for (i = 0, s = array.byteOffset, d = byteOffset; - i < byteLength; i += 1, s += 1, d += 1) { - this.buffer._bytes[d] = array.buffer._bytes[s]; - } - } - } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') { - // void set(sequence array, optional unsigned long offset); - sequence = arguments[0]; - len = ECMAScript.ToUint32(sequence.length); - offset = ECMAScript.ToUint32(arguments[1]); + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } - if (offset + len > this.length) { - throw new RangeError("Offset plus length of array is out of range"); - } + const min = forceColor ? 1 : 0; - for (i = 0; i < len; i += 1) { - s = sequence[i]; - this._setter(offset + i, Number(s)); - } - } else { - throw new TypeError("Unexpected argument type(s)"); - } - }; + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows + // release that supports 256 colors. Windows 10 build 14931 is the first release + // that supports 16m/TrueColor. + const osRelease = os$1.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } - // TypedArray subarray(long begin, optional long end); - ctor.prototype.subarray = function(start, end) { - function clamp(v, min, max) { return v < min ? min : v > max ? max : v; } + return 1; + } - start = ECMAScript.ToInt32(start); - end = ECMAScript.ToInt32(end); + if ('CI' in env$1) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env$1) || env$1.CI_NAME === 'codeship') { + return 1; + } - if (arguments.length < 1) { start = 0; } - if (arguments.length < 2) { end = this.length; } + return min; + } - if (start < 0) { start = this.length + start; } - if (end < 0) { end = this.length + end; } + if ('TEAMCITY_VERSION' in env$1) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0; + } - start = clamp(start, 0, this.length); - end = clamp(end, 0, this.length); + if (env$1.COLORTERM === 'truecolor') { + return 3; + } - var len = end - start; - if (len < 0) { - len = 0; - } + if ('TERM_PROGRAM' in env$1) { + const version = parseInt((env$1.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - return new this.constructor( - this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len); - }; + switch (env$1.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } - return ctor; - } + if (/-256(color)?$/i.test(env$1.TERM)) { + return 2; + } - var Int8Array = makeConstructor(1, packI8, unpackI8); - var Uint8Array = makeConstructor(1, packU8, unpackU8); - var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8); - var Int16Array = makeConstructor(2, packI16, unpackI16); - var Uint16Array = makeConstructor(2, packU16, unpackU16); - var Int32Array = makeConstructor(4, packI32, unpackI32); - var Uint32Array = makeConstructor(4, packU32, unpackU32); - var Float32Array = makeConstructor(4, packF32, unpackF32); - var Float64Array = makeConstructor(8, packF64, unpackF64); + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) { + return 1; + } - exports.Int8Array = exports.Int8Array || Int8Array; - exports.Uint8Array = exports.Uint8Array || Uint8Array; - exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray; - exports.Int16Array = exports.Int16Array || Int16Array; - exports.Uint16Array = exports.Uint16Array || Uint16Array; - exports.Int32Array = exports.Int32Array || Int32Array; - exports.Uint32Array = exports.Uint32Array || Uint32Array; - exports.Float32Array = exports.Float32Array || Float32Array; - exports.Float64Array = exports.Float64Array || Float64Array; -}()); + if ('COLORTERM' in env$1) { + return 1; + } -// -// 6 The DataView View Type -// + if (env$1.TERM === 'dumb') { + return min; + } -(function() { - function r(array, index) { - return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index]; - } + return min; +} - var IS_BIG_ENDIAN = (function() { - var u16array = new(exports.Uint16Array)([0x1234]), - u8array = new(exports.Uint8Array)(u16array.buffer); - return r(u8array, 0) === 0x12; - }()); +function getSupportLevel(stream) { + const level = supportsColor$1(stream); + return translateLevel$1(level); +} - // Constructor(ArrayBuffer buffer, - // optional unsigned long byteOffset, - // optional unsigned long byteLength) - /** @constructor */ - var DataView = function DataView(buffer, byteOffset, byteLength) { - if (arguments.length === 0) { - buffer = new exports.ArrayBuffer(0); - } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) { - throw new TypeError("TypeError"); - } +var supportsColor_1 = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; - this.buffer = buffer || new exports.ArrayBuffer(0); +const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; - this.byteOffset = ECMAScript.ToUint32(byteOffset); - if (this.byteOffset > this.buffer.byteLength) { - throw new RangeError("byteOffset out of range"); - } +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); - if (arguments.length < 3) { - this.byteLength = this.buffer.byteLength - this.byteOffset; - } else { - this.byteLength = ECMAScript.ToUint32(byteLength); - } +function unescape(c) { + if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } - if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { - throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); - } + return ESCAPES.get(c) || c; +} - configureProperties(this); - }; +function parseArguments(name, args) { + const results = []; + const chunks = args.trim().split(/\s*,\s*/g); + let matches; - function makeGetter(arrayType) { - return function(byteOffset, littleEndian) { + for (const chunk of chunks) { + if (!isNaN(chunk)) { + results.push(Number(chunk)); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } - byteOffset = ECMAScript.ToUint32(byteOffset); + return results; +} - if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { - throw new RangeError("Array index out of range"); - } - byteOffset += this.byteOffset; +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; - var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), - bytes = [], i; - for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { - bytes.push(r(uint8Array, i)); - } + const results = []; + let matches; - if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { - bytes.reverse(); - } + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; - return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0); - }; - } + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } - DataView.prototype.getUint8 = makeGetter(exports.Uint8Array); - DataView.prototype.getInt8 = makeGetter(exports.Int8Array); - DataView.prototype.getUint16 = makeGetter(exports.Uint16Array); - DataView.prototype.getInt16 = makeGetter(exports.Int16Array); - DataView.prototype.getUint32 = makeGetter(exports.Uint32Array); - DataView.prototype.getInt32 = makeGetter(exports.Int32Array); - DataView.prototype.getFloat32 = makeGetter(exports.Float32Array); - DataView.prototype.getFloat64 = makeGetter(exports.Float64Array); + return results; +} - function makeSetter(arrayType) { - return function(byteOffset, value, littleEndian) { +function buildStyle(chalk, styles) { + const enabled = {}; - byteOffset = ECMAScript.ToUint32(byteOffset); - if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { - throw new RangeError("Array index out of range"); - } + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } - // Get bytes - var typeArray = new arrayType([value]), - byteArray = new exports.Uint8Array(typeArray.buffer), - bytes = [], i, byteView; + let current = chalk; + for (const styleName of Object.keys(enabled)) { + if (Array.isArray(enabled[styleName])) { + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } - for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { - bytes.push(r(byteArray, i)); - } + if (enabled[styleName].length > 0) { + current = current[styleName].apply(current, enabled[styleName]); + } else { + current = current[styleName]; + } + } + } - // Flip if necessary - if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { - bytes.reverse(); - } + return current; +} - // Write them - byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT); - byteView.set(bytes); - }; - } +var templates = (chalk, tmp) => { + const styles = []; + const chunks = []; + let chunk = []; - DataView.prototype.setUint8 = makeSetter(exports.Uint8Array); - DataView.prototype.setInt8 = makeSetter(exports.Int8Array); - DataView.prototype.setUint16 = makeSetter(exports.Uint16Array); - DataView.prototype.setInt16 = makeSetter(exports.Int16Array); - DataView.prototype.setUint32 = makeSetter(exports.Uint32Array); - DataView.prototype.setInt32 = makeSetter(exports.Int32Array); - DataView.prototype.setFloat32 = makeSetter(exports.Float32Array); - DataView.prototype.setFloat64 = makeSetter(exports.Float64Array); + // eslint-disable-next-line max-params + tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { + if (escapeChar) { + chunk.push(unescape(escapeChar)); + } else if (style) { + const str = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } - exports.DataView = exports.DataView || DataView; + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(chr); + } + }); -}()); -}(typedarray)); + chunks.push(chunk.join('')); -var Writable = require$$0__default$5['default'].Writable; -var inherits$1 = inherits$3.exports; -var bufferFrom = bufferFrom_1; + if (styles.length > 0) { + const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMsg); + } -if (typeof Uint8Array === 'undefined') { - var U8 = typedarray.Uint8Array; -} else { - var U8 = Uint8Array; -} + return chunks.join(''); +}; -function ConcatStream(opts, cb) { - if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb) +(function (module) { +const escapeStringRegexp = escapeStringRegexp$1; +const ansiStyles$1 = ansiStyles.exports; +const stdoutColor = supportsColor_1.stdout; - if (typeof opts === 'function') { - cb = opts; - opts = {}; - } - if (!opts) opts = {}; +const template = templates; - var encoding = opts.encoding; - var shouldInferEncoding = false; +const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - if (!encoding) { - shouldInferEncoding = true; - } else { - encoding = String(encoding).toLowerCase(); - if (encoding === 'u8' || encoding === 'uint8') { - encoding = 'uint8array'; - } - } +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - Writable.call(this, { objectMode: true }); +// `color-convert` models to exclude from the Chalk API due to conflicts and such +const skipModels = new Set(['gray']); - this.encoding = encoding; - this.shouldInferEncoding = shouldInferEncoding; +const styles = Object.create(null); - if (cb) this.on('finish', function () { cb(this.getBody()); }); - this.body = []; -} +function applyOptions(obj, options) { + options = options || {}; -var concatStream = ConcatStream; -inherits$1(ConcatStream, Writable); + // Detect level if not set manually + const scLevel = stdoutColor ? stdoutColor.level : 0; + obj.level = options.level === undefined ? scLevel : options.level; + obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +} -ConcatStream.prototype._write = function(chunk, enc, next) { - this.body.push(chunk); - next(); -}; +function Chalk(options) { + // We check for this.template here since calling `chalk.constructor()` + // by itself will have a `this` of a previously constructed chalk object + if (!this || !(this instanceof Chalk) || this.template) { + const chalk = {}; + applyOptions(chalk, options); -ConcatStream.prototype.inferEncoding = function (buff) { - var firstBuffer = buff === undefined ? this.body[0] : buff; - if (Buffer.isBuffer(firstBuffer)) return 'buffer' - if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array' - if (Array.isArray(firstBuffer)) return 'array' - if (typeof firstBuffer === 'string') return 'string' - if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object' - return 'buffer' -}; + chalk.template = function () { + const args = [].slice.call(arguments); + return chalkTag.apply(null, [chalk.template].concat(args)); + }; -ConcatStream.prototype.getBody = function () { - if (!this.encoding && this.body.length === 0) return [] - if (this.shouldInferEncoding) this.encoding = this.inferEncoding(); - if (this.encoding === 'array') return arrayConcat(this.body) - if (this.encoding === 'string') return stringConcat(this.body) - if (this.encoding === 'buffer') return bufferConcat(this.body) - if (this.encoding === 'uint8array') return u8Concat(this.body) - return this.body -}; + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); -function isArrayish (arr) { - return /Array\]$/.test(Object.prototype.toString.call(arr)) -} + chalk.template.constructor = Chalk; -function isBufferish (p) { - return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function') -} + return chalk.template; + } -function stringConcat (parts) { - var strings = []; - for (var i = 0; i < parts.length; i++) { - var p = parts[i]; - if (typeof p === 'string') { - strings.push(p); - } else if (Buffer.isBuffer(p)) { - strings.push(p); - } else if (isBufferish(p)) { - strings.push(bufferFrom(p)); - } else { - strings.push(bufferFrom(String(p))); - } - } - if (Buffer.isBuffer(parts[0])) { - strings = Buffer.concat(strings); - strings = strings.toString('utf8'); - } else { - strings = strings.join(''); - } - return strings + applyOptions(this, options); } -function bufferConcat (parts) { - var bufs = []; - for (var i = 0; i < parts.length; i++) { - var p = parts[i]; - if (Buffer.isBuffer(p)) { - bufs.push(p); - } else if (isBufferish(p)) { - bufs.push(bufferFrom(p)); - } else { - bufs.push(bufferFrom(String(p))); - } - } - return Buffer.concat(bufs) +// Use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles$1.blue.open = '\u001B[94m'; } -function arrayConcat (parts) { - var res = []; - for (var i = 0; i < parts.length; i++) { - res.push.apply(res, parts[i]); - } - return res -} +for (const key of Object.keys(ansiStyles$1)) { + ansiStyles$1[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles$1[key].close), 'g'); -function u8Concat (parts) { - var len = 0; - for (var i = 0; i < parts.length; i++) { - if (typeof parts[i] === 'string') { - parts[i] = bufferFrom(parts[i]); - } - len += parts[i].length; - } - var u8 = new U8(len); - for (var i = 0, offset = 0; i < parts.length; i++) { - var part = parts[i]; - for (var j = 0; j < part.length; j++) { - u8[offset++] = part[j]; - } - } - return u8 + styles[key] = { + get() { + const codes = ansiStyles$1[key]; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); + } + }; } -var debug$b = src.exports('unified-engine:file-set-pipeline:stdin'); -var vfile$3 = toVfile; -var concat = concatStream; - -var stdin_1 = stdin$1; - -function stdin$1(context, settings, next) { - var error; - - if (settings.files && settings.files.length > 0) { - debug$b('Ignoring `streamIn`'); +styles.visible = { + get() { + return build.call(this, this._styles || [], true, 'visible'); + } +}; - if (settings.filePath) { - error = new Error( - 'Do not pass both `--file-path` and real files.\nDid you mean to pass stdin instead of files?' - ); - } +ansiStyles$1.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles$1.color.close), 'g'); +for (const model of Object.keys(ansiStyles$1.color.ansi)) { + if (skipModels.has(model)) { + continue; + } - next(error); + styles[model] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles$1.color[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles$1.color.close, + closeRe: ansiStyles$1.color.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} - return - } +ansiStyles$1.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles$1.bgColor.close), 'g'); +for (const model of Object.keys(ansiStyles$1.bgColor.ansi)) { + if (skipModels.has(model)) { + continue; + } - if (settings.streamIn.isTTY) { - debug$b('Cannot read from `tty` stream'); - next(new Error('No input')); + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles$1.bgColor[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles$1.bgColor.close, + closeRe: ansiStyles$1.bgColor.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} - return - } +const proto = Object.defineProperties(() => {}, styles); - debug$b('Reading from `streamIn`'); +function build(_styles, _empty, key) { + const builder = function () { + return applyStyle.apply(builder, arguments); + }; - settings.streamIn.pipe(concat({encoding: 'string'}, read)); + builder._styles = _styles; + builder._empty = _empty; - function read(value) { - var file = vfile$3(settings.filePath || undefined); + const self = this; - debug$b('Read from `streamIn`'); + Object.defineProperty(builder, 'level', { + enumerable: true, + get() { + return self.level; + }, + set(level) { + self.level = level; + } + }); - file.cwd = settings.cwd; - file.contents = value; - file.data.unifiedEngineGiven = true; - file.data.unifiedEngineStreamIn = true; + Object.defineProperty(builder, 'enabled', { + enumerable: true, + get() { + return self.enabled; + }, + set(enabled) { + self.enabled = enabled; + } + }); - context.files = [file]; + // See below for fix regarding invisible grey/dim combination on Windows + builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; - // If `out` was not set, set `out`. - settings.out = - settings.out === null || settings.out === undefined ? true : settings.out; + // `__proto__` is used because we must return a function, but there is + // no way to create a function with a different prototype + builder.__proto__ = proto; // eslint-disable-line no-proto - next(); - } + return builder; } -var events = require$$0__default$4['default']; -var inherits = require$$0__default['default'].inherits; -var trough$3 = trough_1; -var vfile$2 = toVfile; - -var fileSet = FileSet$1; - -// FileSet constructor. -function FileSet$1() { - var self = this; +function applyStyle() { + // Support varags, but simply cast to string in case there's only one arg + const args = arguments; + const argsLen = args.length; + let str = String(arguments[0]); - self.files = []; - self.origins = []; + if (argsLen === 0) { + return ''; + } - self.expected = 0; - self.actual = 0; + if (argsLen > 1) { + // Don't slice `arguments`, it prevents V8 optimizations + for (let a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } - self.pipeline = trough$3(); - self.plugins = []; + if (!this.enabled || this.level <= 0 || !str) { + return this._empty ? '' : str; + } - events.init.call(self); + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + const originalDim = ansiStyles$1.dim.open; + if (isSimpleWindowsTerm && this.hasGrey) { + ansiStyles$1.dim.open = ''; + } - self.on('one', one$1.bind(self)); -} + for (const code of this._styles.slice().reverse()) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; -// Events. -inherits(FileSet$1, events.EventEmitter); + // Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS + // https://github.com/chalk/chalk/pull/92 + str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); + } -// Expose methods. -FileSet$1.prototype.valueOf = valueOf; -FileSet$1.prototype.use = use; -FileSet$1.prototype.add = add; + // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue + ansiStyles$1.dim.open = originalDim; -// Create an array representation of `fileSet`. -function valueOf() { - return this.files + return str; } -// Attach middleware to the pipeline on `fileSet`. -function use(plugin) { - var self = this; - var pipeline = self.pipeline; - var duplicate = false; - - if (plugin && plugin.pluginId) { - duplicate = self.plugins.some(matches); - } - - if (!duplicate && self.plugins.indexOf(plugin) !== -1) { - duplicate = true; - } +function chalkTag(chalk, strings) { + if (!Array.isArray(strings)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return [].slice.call(arguments, 1).join(' '); + } - if (!duplicate) { - self.plugins.push(plugin); - pipeline.use(plugin); - } + const args = [].slice.call(arguments, 2); + const parts = [strings.raw[0]]; - return self + for (let i = 1; i < strings.length; i++) { + parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); + parts.push(String(strings.raw[i])); + } - function matches(fn) { - return fn.pluginId === plugin.pluginId - } + return template(chalk, parts.join('')); } -// Add a file to be processed. -// Ignores duplicate files (based on the `filePath` at time of addition). -// Only runs `file-pipeline` on files which have not `failed` before addition. -function add(file) { - var self = this; +Object.defineProperties(Chalk.prototype, styles); - if (typeof file === 'string') { - file = vfile$2(file); - } +module.exports = Chalk(); // eslint-disable-line new-cap +module.exports.supportsColor = stdoutColor; +module.exports.default = module.exports; // For TypeScript +}(chalk)); - // Prevent files from being added multiple times. - if (self.origins.indexOf(file.history[0]) !== -1) { - return self - } +Object.defineProperty(lib$3, "__esModule", { + value: true +}); +lib$3.shouldHighlight = shouldHighlight; +lib$3.getChalk = getChalk; +lib$3.default = highlight; - self.origins.push(file.history[0]); +var _jsTokens = jsTokens; - // Add. - self.valueOf().push(file); - self.expected++; +var _helperValidatorIdentifier = lib$2; - // Force an asynchronous operation. - // This ensures that files which fall through the file pipeline immediately - // (such as, when already fatally failed) still queue up correctly. - setImmediate(add); +var _chalk = chalk.exports; - return self +const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); - function add() { - self.emit('add', file); - } +function getDefs$1(chalk) { + return { + keyword: chalk.cyan, + capitalized: chalk.yellow, + jsxIdentifier: chalk.yellow, + punctuator: chalk.yellow, + number: chalk.magenta, + string: chalk.green, + regex: chalk.magenta, + comment: chalk.grey, + invalid: chalk.white.bgRed.bold + }; } -// Utility invoked when a single file has completed it's pipeline, triggering -// `done` when all files are complete. -function one$1() { - var self = this; +const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; +const BRACKET = /^[()[\]{}]$/; +let tokenize; +{ + const JSX_TAG = /^[a-z][\w-]*$/i; - self.actual++; + const getTokenType = function (token, offset, text) { + if (token.type === "name") { + if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) { + return "keyword"; + } - if (self.actual >= self.expected) { - self.emit('done'); - } -} + if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == " colorize(str)).join("\n"); + } else { + highlighted += value; } } - // Anything else... - return false + return highlighted; } -/** - * Export `isEmpty`. - * - * @type {Function} - */ - -var lib$5 = isEmpty$1; - -var debug$9 = src.exports('unified-engine:file-pipeline:configure'); -var stats$6 = vfileStatistics; -var empty$3 = lib$5; +function shouldHighlight(options) { + return !!_chalk.supportsColor || options.forceColor; +} -var configure_1$1 = configure$5; +function getChalk(options) { + return options.forceColor ? new _chalk.constructor({ + enabled: true, + level: 1 + }) : _chalk; +} -// Collect configuration for a file based on the context. -function configure$5(context, file, fileSet, next) { - if (stats$6(file).fatal) { - return next() +function highlight(code, options = {}) { + if (shouldHighlight(options)) { + const chalk = getChalk(options); + const defs = getDefs$1(chalk); + return highlightTokens(defs, code); + } else { + return code; } +} - context.configuration.load(file.path, handleConfiguration); - - function handleConfiguration(error, configuration) { - var index = -1; - var plugin; - var options; - - if (error) { - return next(error) - } - - // Store configuration on the context object. - debug$9('Using settings `%j`', configuration.settings); - context.processor.data('settings', configuration.settings); - - debug$9('Using `%d` plugins', configuration.plugins.length); - - while (++index < configuration.plugins.length) { - plugin = configuration.plugins[index][0]; - options = configuration.plugins[index][1]; - - if (options === false) { - continue - } - - // Allow for default arguments in es2020. - if (options === null || (typeof options === 'object' && empty$3(options))) { - options = undefined; - } +Object.defineProperty(lib$4, "__esModule", { + value: true +}); +lib$4.codeFrameColumns = codeFrameColumns$1; +lib$4.default = _default; - debug$9( - 'Using plugin `%s`, with options `%j`', - plugin.displayName || plugin.name || 'function', - options - ); +var _highlight = lib$3; - try { - context.processor.use(plugin, options, fileSet); - } catch (error_) { - /* istanbul ignore next - Should not happen anymore! */ - return next(error_) - } - } +let deprecationWarningShown = false; - next(); - } +function getDefs(chalk) { + return { + gutter: chalk.grey, + marker: chalk.red.bold, + message: chalk.red.bold + }; } -var debug$8 = src.exports('unified-engine:file-pipeline:parse'); -var stats$5 = vfileStatistics; -var json$1 = parseJson_1; - -var parse_1$4 = parse$a; +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; -// Fill a file with a tree. -function parse$a(context, file) { - var message; +function getMarkerLines(loc, source, opts) { + const startLoc = Object.assign({ + column: 0, + line: -1 + }, loc.start); + const endLoc = Object.assign({}, startLoc, loc.end); + const { + linesAbove = 2, + linesBelow = 3 + } = opts || {}; + const startLine = startLoc.line; + const startColumn = startLoc.column; + const endLine = endLoc.line; + const endColumn = endLoc.column; + let start = Math.max(startLine - (linesAbove + 1), 0); + let end = Math.min(source.length, endLine + linesBelow); - if (stats$5(file).fatal) { - return + if (startLine === -1) { + start = 0; } - if (context.treeIn) { - debug$8('Not parsing already parsed document'); - - try { - context.tree = json$1(file.toString()); - } catch (error) { - message = file.message( - new Error('Cannot read file as JSON\n' + error.message) - ); - message.fatal = true; - } - - // Add the preferred extension to ensure the file, when serialized, is - // correctly recognised. - // Only add it if there is a path — not if the file is for example stdin. - if (file.path) { - file.extname = context.extensions[0]; - } - - file.contents = ''; - - return + if (endLine === -1) { + end = source.length; } - debug$8('Parsing `%s`', file.path); - - context.tree = context.processor.parse(file); - - debug$8('Parsed document'); -} - -var debug$7 = src.exports('unified-engine:file-pipeline:transform'); -var stats$4 = vfileStatistics; + const lineDiff = endLine - startLine; + const markerLines = {}; -var transform_1$1 = transform$5; + if (lineDiff) { + for (let i = 0; i <= lineDiff; i++) { + const lineNumber = i + startLine; -// Transform the tree associated with a file with configured plugins. -function transform$5(context, file, fileSet, next) { - if (stats$4(file).fatal) { - next(); + if (!startColumn) { + markerLines[lineNumber] = true; + } else if (i === 0) { + const sourceLength = source[lineNumber - 1].length; + markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]; + } else if (i === lineDiff) { + markerLines[lineNumber] = [0, endColumn]; + } else { + const sourceLength = source[lineNumber - i].length; + markerLines[lineNumber] = [0, sourceLength]; + } + } } else { - debug$7('Transforming document `%s`', file.path); - context.processor.run(context.tree, file, onrun); + if (startColumn === endColumn) { + if (startColumn) { + markerLines[startLine] = [startColumn, 0]; + } else { + markerLines[startLine] = true; + } + } else { + markerLines[startLine] = [startColumn, endColumn - startColumn]; + } } - function onrun(error, node) { - debug$7('Transformed document (error: %s)', error); - context.tree = node; - next(error); - } + return { + start, + end, + markerLines + }; } -var debug$6 = src.exports('unified-engine:file-pipeline:queue'); -var stats$3 = vfileStatistics; +function codeFrameColumns$1(rawLines, loc, opts = {}) { + const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts); + const chalk = (0, _highlight.getChalk)(opts); + const defs = getDefs(chalk); -var queue_1 = queue$1; + const maybeHighlight = (chalkFn, string) => { + return highlighted ? chalkFn(string) : string; + }; -// Queue all files which came this far. -// When the last file gets here, run the file-set pipeline and flush the queue. -function queue$1(context, file, fileSet, next) { - var origin = file.history[0]; - var map = fileSet.complete; - var complete = true; + const lines = rawLines.split(NEWLINE); + const { + start, + end, + markerLines + } = getMarkerLines(loc, lines, opts); + const hasColumns = loc.start && typeof loc.start.column === "number"; + const numberMaxWidth = String(end).length; + const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines; + let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => { + const number = start + 1 + index; + const paddedNumber = ` ${number}`.slice(-numberMaxWidth); + const gutter = ` ${paddedNumber} |`; + const hasMarker = markerLines[number]; + const lastMarkerLine = !markerLines[number + 1]; - if (!map) { - map = {}; - fileSet.complete = map; - } + if (hasMarker) { + let markerLine = ""; - debug$6('Queueing `%s`', origin); + if (Array.isArray(hasMarker)) { + const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); + const numberOfMarkers = hasMarker[1] || 1; + markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); - map[origin] = next; + if (lastMarkerLine && opts.message) { + markerLine += " " + maybeHighlight(defs.message, opts.message); + } + } - fileSet.valueOf().forEach(each); + return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); + } else { + return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`; + } + }).join("\n"); - if (!complete) { - debug$6('Not flushing: some files cannot be flushed'); - return + if (opts.message && !hasColumns) { + frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`; } - fileSet.complete = {}; - - fileSet.pipeline.run(fileSet, done); - - function each(file) { - var key = file.history[0]; + if (highlighted) { + return chalk.reset(frame); + } else { + return frame; + } +} - if (stats$3(file).fatal) { - return - } +function _default(rawLines, lineNumber, colNumber, opts = {}) { + if (!deprecationWarningShown) { + deprecationWarningShown = true; + const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; - if (typeof map[key] === 'function') { - debug$6('`%s` can be flushed', key); + if (process.emitWarning) { + process.emitWarning(message, "DeprecationWarning"); } else { - debug$6('Interupting flush: `%s` is not finished', key); - complete = false; + const deprecationError = new Error(message); + deprecationError.name = "DeprecationWarning"; + console.warn(new Error(message)); } } - function done(error) { - debug$6('Flushing: all files can be flushed'); - - // Flush. - for (origin in map) { - map[origin](error); + colNumber = Math.max(colNumber, 0); + const location = { + start: { + column: colNumber, + line: lineNumber } - } + }; + return codeFrameColumns$1(rawLines, location, opts); } -var isEmpty = lib$5; +const errorEx = errorEx_1; +const fallback = jsonParseEvenBetterErrors; +const {default: LinesAndColumns} = require$$2; +const {codeFrameColumns} = lib$4; -// Detect color support. -var color$4 = true; +const JSONError = errorEx('JSONError', { + fileName: errorEx.append('in %s'), + codeFrame: errorEx.append('\n\n%s\n') +}); -try { - color$4 = 'inspect' in require$$0__default['default']; -} catch (_) { - /* istanbul ignore next - browser */ - color$4 = false; -} +const parseJson = (string, reviver, filename) => { + if (typeof reviver === 'string') { + filename = reviver; + reviver = null; + } -var unistUtilInspect = color$4 ? inspect$2 : /* istanbul ignore next */ noColor; + try { + try { + return JSON.parse(string, reviver); + } catch (error) { + fallback(string, reviver); + throw error; + } + } catch (error) { + error.message = error.message.replace(/\n/g, ''); + const indexMatch = error.message.match(/in JSON at position (\d+) while parsing/); -inspect$2.color = inspect$2; -noColor.color = inspect$2; -inspect$2.noColor = noColor; -noColor.noColor = noColor; + const jsonError = new JSONError(error); + if (filename) { + jsonError.fileName = filename; + } -var dim = ansiColor(2, 22); -var yellow = ansiColor(33, 39); -var green = ansiColor(32, 39); + if (indexMatch && indexMatch.length > 0) { + const lines = new LinesAndColumns(string); + const index = Number(indexMatch[1]); + const location = lines.locationForIndex(index); -// Define ANSII color removal functionality. -var colorExpression = new RegExp( - '(?:' + - '(?:\\u001b\\[)|' + - '\\u009b' + - ')' + - '(?:' + - '(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m]' + - ')|' + - '\\u001b[A-M]', - 'g' -); + const codeFrame = codeFrameColumns( + string, + {start: {line: location.line + 1, column: location.column + 1}}, + {highlightCode: true} + ); -// Standard keys defined by unist: https://github.com/syntax-tree/unist. -// We don’t ignore `data` though. -var ignore = ['type', 'value', 'children', 'position']; + jsonError.codeFrame = codeFrame; + } -// Inspects a node, without using color. -function noColor(node, pad) { - return stripColor(inspect$2(node, pad)) -} + throw jsonError; + } +}; -// Inspects a node. -function inspect$2(node, pad) { - var result; - var children; - var index; - var length; +parseJson.JSONError = JSONError; - if (node && Boolean(node.length) && typeof node !== 'string') { - length = node.length; - index = -1; - result = []; +var parseJson_1 = parseJson; - while (++index < length) { - result[index] = inspect$2(node[index]); - } +var src = {exports: {}}; - return result.join('\n') - } +var browser = {exports: {}}; - if (!node || !node.type) { - return String(node) - } +/** + * Helpers. + */ - result = [formatNode(node)]; - children = node.children; - length = children && children.length; - index = -1; +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; - if (!length) { - return result[0] - } +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ - if (!pad || typeof pad === 'number') { - pad = ''; +var ms = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse$a(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; - while (++index < length) { - node = children[index]; +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ - if (index === length - 1) { - result.push(formatNesting(pad + '└─ ') + inspect$2(node, pad + ' ')); - } else { - result.push(formatNesting(pad + '├─ ') + inspect$2(node, pad + '│ ')); - } +function parse$a(str) { + str = String(str); + if (str.length > 100) { + return; } - - return result.join('\n') -} - -// Colored nesting formatter. -function formatNesting(value) { - return dim(value) -} - -// Compile a single position. -function compile$2(pos) { - var values = []; - - if (!pos) { - return null + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; } - - values = [[pos.line || 1, pos.column || 1].join(':')]; - - if ('offset' in pos) { - values.push(String(pos.offset || 0)); + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; } - - return values } -// Compile a location. -function stringify$c(start, end) { - var values = []; - var positions = []; - var offsets = []; - - add(start); - add(end); +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ - if (positions.length !== 0) { - values.push(positions.join('-')); +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; } - - if (offsets.length !== 0) { - values.push(offsets.join('-')); + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; } - - return values.join(', ') - - // Add a position. - function add(position) { - var tuple = compile$2(position); - - if (tuple) { - positions.push(tuple[0]); - - if (tuple[1]) { - offsets.push(tuple[1]); - } - } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; } + return ms + 'ms'; } -// Colored node formatter. -function formatNode(node) { - var log = node.type; - var location = node.position || {}; - var position = stringify$c(location.start, location.end); - var key; - var values = []; - var value; +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ - if (node.children) { - log += dim('[') + yellow(node.children.length) + dim(']'); - } else if (typeof node.value === 'string') { - log += dim(': ') + green(JSON.stringify(node.value)); +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural$1(ms, msAbs, d, 'day'); } - - if (position) { - log += ' (' + position + ')'; + if (msAbs >= h) { + return plural$1(ms, msAbs, h, 'hour'); } - - for (key in node) { - value = node[key]; - - if ( - ignore.indexOf(key) !== -1 || - value === null || - value === undefined || - (typeof value === 'object' && isEmpty(value)) - ) { - continue - } - - values.push('[' + key + '=' + JSON.stringify(value) + ']'); - } - - if (values.length !== 0) { - log += ' ' + values.join(''); - } - - return log -} - -// Remove ANSI colour from `value`. -function stripColor(value) { - return value.replace(colorExpression, '') -} - -// Factory to wrap values in ANSI colours. -function ansiColor(open, close) { - return color - - function color(value) { - return '\u001B[' + open + 'm' + value + '\u001B[' + close + 'm' - } -} - -var debug$5 = src.exports('unified-engine:file-pipeline:stringify'); -var buffer$3 = isBuffer; -var stats$2 = vfileStatistics; -var inspect$1 = unistUtilInspect; - -var stringify_1 = stringify$b; - -// Stringify a tree. -function stringify$b(context, file) { - var value; - - if (stats$2(file).fatal) { - debug$5('Not compiling failed document'); - return - } - - if (!context.output && !context.out && !context.alwaysStringify) { - debug$5('Not compiling document without output settings'); - return - } - - debug$5('Compiling `%s`', file.path); - - if (context.inspect) { - // Add a `txt` extension if there is a path. - if (file.path) { - file.extname = '.txt'; - } - - value = inspect$1[context.color ? 'color' : 'noColor'](context.tree) + '\n'; - } else if (context.treeOut) { - // Add a `json` extension to ensure the file is correctly seen as JSON. - // Only add it if there is a path — not if the file is for example stdin. - if (file.path) { - file.extname = '.json'; - } - - // Add the line feed to create a valid UNIX file. - value = JSON.stringify(context.tree, null, 2) + '\n'; - } else { - value = context.processor.stringify(context.tree, file); - } - - if (value === undefined || value === null) ; else if (typeof value === 'string' || buffer$3(value)) { - file.contents = value; - } else { - file.result = value; - } - - debug$5('Serialized document'); -} - -var fs$5 = require$$0__default$3['default']; -var path$5 = require$$0__default$2['default']; -var debug$4 = src.exports('unified-engine:file-pipeline:copy'); - -var copy_1 = copy$4; - -// Move a file. -function copy$4(context, file, fileSet, next) { - var output = context.output; - var outpath = output; - var currentPath = file.path; - - if (typeof outpath !== 'string') { - debug$4('Not copying'); - return next() - } - - outpath = path$5.resolve(context.cwd, outpath); - - debug$4('Copying `%s`', currentPath); - - fs$5.stat(outpath, onstatfile); - - function onstatfile(error, stats) { - if (error) { - if ( - error.code !== 'ENOENT' || - output.charAt(output.length - 1) === path$5.sep - ) { - return next( - new Error('Cannot read output directory. Error:\n' + error.message) - ) - } - - fs$5.stat(path$5.dirname(outpath), onstatparent); - } else { - done(stats.isDirectory()); - } - } - - // This is either given an error, or the parent exists which is a directory, - // but we should keep the basename of the given file. - function onstatparent(error) { - if (error) { - next(new Error('Cannot read parent directory. Error:\n' + error.message)); - } else { - done(false); - } + if (msAbs >= m) { + return plural$1(ms, msAbs, m, 'minute'); } - - function done(directory) { - if (!directory && fileSet.expected > 1) { - return next( - new Error('Cannot write multiple files to single output: ' + outpath) - ) - } - - file[directory ? 'dirname' : 'path'] = path$5.relative(file.cwd, outpath); - - debug$4('Copying document from %s to %s', currentPath, file.path); - - next(); + if (msAbs >= s) { + return plural$1(ms, msAbs, s, 'second'); } + return ms + ' ms'; } -var debug$3 = src.exports('unified-engine:file-pipeline:stdout'); -var stats$1 = vfileStatistics; - -var stdout_1 = stdout$1; +/** + * Pluralization helper. + */ -// Write a virtual file to `streamOut`. -// Ignored when `output` is given, more than one file was processed, or `out` -// is false. -function stdout$1(context, file, fileSet, next) { - if (!file.data.unifiedEngineGiven) { - debug$3('Ignoring programmatically added file'); - next(); - } else if (stats$1(file).fatal || context.output || !context.out) { - debug$3('Ignoring writing to `streamOut`'); - next(); - } else { - debug$3('Writing document to `streamOut`'); - context.streamOut.write(file.toString(), next); - } +function plural$1(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } -var fs$4 = require$$0__default$3['default']; -var path$4 = require$$0__default$2['default']; -var debug$2 = src.exports('unified-engine:file-pipeline:file-system'); -var stats = vfileStatistics; - -var fileSystem_1 = fileSystem$2; - -// Write a virtual file to the file-system. -// Ignored when `output` is not given. -function fileSystem$2(context, file, fileSet, next) { - var destinationPath; - - if (!context.output) { - debug$2('Ignoring writing to file-system'); - return next() - } - - if (!file.data.unifiedEngineGiven) { - debug$2('Ignoring programmatically added file'); - return next() - } - - destinationPath = file.path; - - if (!destinationPath) { - debug$2('Cannot write file without a `destinationPath`'); - return next(new Error('Cannot write file without an output path')) - } - - if (stats(file).fatal) { - debug$2('Cannot write file with a fatal error'); - return next() - } - - destinationPath = path$4.resolve(context.cwd, destinationPath); - debug$2('Writing document to `%s`', destinationPath); +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ - file.stored = true; +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = ms; + createDebug.destroy = destroy; - fs$4.writeFile(destinationPath, file.toString(), next); -} + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); -var trough$2 = trough_1; -var read$1 = read_1; -var configure$4 = configure_1$1; -var parse$9 = parse_1$4; -var transform$4 = transform_1$1; -var queue = queue_1; -var stringify$a = stringify_1; -var copy$3 = copy_1; -var stdout = stdout_1; -var fileSystem$1 = fileSystem_1; + /** + * The currently active debug mode names, and names to skip. + */ -// This pipeline ensures each of the pipes always runs: even if the read pipe -// fails, queue and write run. -var filePipeline$1 = trough$2() - .use(chunk(trough$2().use(read$1).use(configure$4).use(parse$9).use(transform$4))) - .use(chunk(trough$2().use(queue))) - .use(chunk(trough$2().use(stringify$a).use(copy$3).use(stdout).use(fileSystem$1))); - -// Factory to run a pipe. -// Wraps a pipe to trigger an error on the `file` in `context`, but still call -// `next`. -function chunk(pipe) { - return run + createDebug.names = []; + createDebug.skips = []; - // Run the bound bound pipe and handles any errors. - function run(context, file, fileSet, next) { - pipe.run(context, file, fileSet, one); + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; - function one(error) { - var messages = file.messages; - var index; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; - if (error) { - index = messages.indexOf(error); + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } - if (index === -1) { - error = file.message(error); - index = messages.length - 1; - } + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; - messages[index].fatal = true; - } + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; - next(); - } - } -} + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } -var FileSet = fileSet; -var filePipeline = filePipeline$1; + const self = debug; -var transform_1 = transform$3; + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; -// Transform all files. -function transform$3(context, settings, next) { - var fileSet = new FileSet(); + args[0] = createDebug.coerce(args[0]); - context.fileSet = fileSet; + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } - fileSet.on('add', add).on('done', next); + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); - if (context.files.length === 0) { - next(); - } else { - context.files.forEach(fileSet.add, fileSet); - } + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); - function add(file) { - filePipeline.run( - { - configuration: context.configuration, - processor: settings.processor(), - cwd: settings.cwd, - extensions: settings.extensions, - pluginPrefix: settings.pluginPrefix, - treeIn: settings.treeIn, - treeOut: settings.treeOut, - inspect: settings.inspect, - color: settings.color, - out: settings.out, - output: settings.output, - streamOut: settings.streamOut, - alwaysStringify: settings.alwaysStringify - }, - file, - fileSet, - done - ); + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); - function done(error) { - /* istanbul ignore next - Does not occur as all failures in `filePipeLine` - * are failed on each file. - * Still, just to ensure things work in the future, we add an extra - * check. */ - if (error) { - error = file.message(error); - error.fatal = true; - } + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } - fileSet.emit('one', file); - } - } -} + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. -var hasFlag$1 = (flag, argv) => { - argv = argv || process.argv; - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const pos = argv.indexOf(prefix + flag); - const terminatorPos = argv.indexOf('--'); - return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); -}; + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } -const os = require$$0__default$1['default']; -const hasFlag = hasFlag$1; + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); -const {env} = process; + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } -let forceColor; -if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false') || - hasFlag('color=never')) { - forceColor = 0; -} else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = 1; -} -if ('FORCE_COLOR' in env) { - if (env.FORCE_COLOR === true || env.FORCE_COLOR === 'true') { - forceColor = 1; - } else if (env.FORCE_COLOR === false || env.FORCE_COLOR === 'false') { - forceColor = 0; - } else { - forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + return debug; } -} -function translateLevel(level) { - if (level === 0) { - return false; + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; } - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -} + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; -function supportsColor(stream) { - if (forceColor === 0) { - return 0; - } + createDebug.names = []; + createDebug.skips = []; - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; - if (hasFlag('color=256')) { - return 2; - } + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } - if (stream && !stream.isTTY && forceColor === undefined) { - return 0; - } + namespaces = split[i].replace(/\*/g, '.*?'); - const min = forceColor || 0; + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } - if (env.TERM === 'dumb') { - return min; + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; } - if (process.platform === 'win32') { - // Node.js 7.5.0 is the first version of Node.js to include a patch to - // libuv that enables 256 color output on Windows. Anything earlier and it - // won't work. However, here we target Node.js 8 at minimum as it is an LTS - // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows - // release that supports 256 colors. Windows 10 build 14931 is the first release - // that supports 16m/TrueColor. - const osRelease = os.release().split('.'); - if ( - Number(process.versions.node.split('.')[0]) >= 8 && - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; } - return 1; - } + let i; + let len; - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { - return 1; + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } } - return min; - } + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + return false; } - if (env.COLORTERM === 'truecolor') { - return 3; + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); } - if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - - switch (env.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; } + return val; } - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } - - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } - - if ('COLORTERM' in env) { - return 1; + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } - return min; -} + createDebug.enable(createDebug.load()); -function getSupportLevel(stream) { - const level = supportsColor(stream); - return translateLevel(level); + return createDebug; } -var supportsColor_1 = { - supportsColor: getSupportLevel, - stdout: getSupportLevel(process.stdout), - stderr: getSupportLevel(process.stderr) -}; - -var stringWidth$1 = {exports: {}}; - -var ansiRegex$1 = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; - -const ansiRegex = ansiRegex$1; - -var stripAnsi$1 = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; - -var isFullwidthCodePoint$2 = {exports: {}}; - -/* eslint-disable yoda */ - -const isFullwidthCodePoint$1 = codePoint => { - if (Number.isNaN(codePoint)) { - return false; - } +var common$3 = setup; - // Code points are derived from: - // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt - if ( - codePoint >= 0x1100 && ( - codePoint <= 0x115F || // Hangul Jamo - codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET - codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET - // CJK Radicals Supplement .. Enclosed CJK Letters and Months - (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || - // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A - (0x3250 <= codePoint && codePoint <= 0x4DBF) || - // CJK Unified Ideographs .. Yi Radicals - (0x4E00 <= codePoint && codePoint <= 0xA4C6) || - // Hangul Jamo Extended-A - (0xA960 <= codePoint && codePoint <= 0xA97C) || - // Hangul Syllables - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - // CJK Compatibility Ideographs - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - // Vertical Forms - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - // CJK Compatibility Forms .. Small Form Variants - (0xFE30 <= codePoint && codePoint <= 0xFE6B) || - // Halfwidth and Fullwidth Forms - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || - // Kana Supplement - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - // Enclosed Ideographic Supplement - (0x1F200 <= codePoint && codePoint <= 0x1F251) || - // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane - (0x20000 <= codePoint && codePoint <= 0x3FFFD) - ) - ) { - return true; - } +/* eslint-env browser */ - return false; -}; +(function (module, exports) { +/** + * This is the web browser implementation of `debug()`. + */ -isFullwidthCodePoint$2.exports = isFullwidthCodePoint$1; -isFullwidthCodePoint$2.exports.default = isFullwidthCodePoint$1; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; -var emojiRegex$1 = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); -const stripAnsi = stripAnsi$1; -const isFullwidthCodePoint = isFullwidthCodePoint$2.exports; -const emojiRegex = emojiRegex$1; +/** + * Colors. + */ -const stringWidth = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; - string = stripAnsi(string); +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ - if (string.length === 0) { - return 0; +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; } - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } +/** + * Colorize log arguments if enabled. + * + * @api public + */ - // Surrogates - if (code > 0xFFFF) { - i++; - } +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); - width += isFullwidthCodePoint(code) ? 2 : 1; + if (!this.useColors) { + return; } - return width; -}; + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); -stringWidth$1.exports = stringWidth; -// TODO: remove this in the next major version -stringWidth$1.exports.default = stringWidth; + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); -/*! - * repeat-string + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. + * @api public */ +exports.log = console.debug || console.log || (() => {}); /** - * Results cache + * Save `namespaces`. + * + * @param {String} namespaces + * @api private */ - -var res = ''; -var cache; +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} /** - * Expose `repeat` + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } -var repeatString = repeat$7; + return r; +} /** - * Repeat the given `string` the specified `number` - * of times. - * - * **Example:** + * Localstorage attempts to return the localstorage. * - * ```js - * var repeat = require('repeat-string'); - * repeat('A', 5); - * //=> AAAAA - * ``` + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. * - * @param {String} `string` The string to repeat - * @param {Number} `number` The number of times to repeat the string - * @return {String} Repeated string - * @api public + * @return {LocalStorage} + * @api private */ -function repeat$7(str, num) { - if (typeof str !== 'string') { - throw new TypeError('expected a string'); - } - - // cover common, quick use cases - if (num === 1) return str; - if (num === 2) return str + str; - - var max = str.length * num; - if (cache !== str || typeof cache === 'undefined') { - cache = str; - res = ''; - } else if (res.length >= max) { - return res.substr(0, max); - } - - while (max > res.length && num > 1) { - if (num & 1) { - res += str; - } +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} - num >>= 1; - str += str; - } +module.exports = common$3(exports); - res += str; - res = res.substr(0, max); - return res; -} +const {formatters} = module.exports; -var vfileSort = sort$1; +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ -var severities = { - true: 2, - false: 1, - null: 0, - undefined: 0 +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } }; +}(browser, browser.exports)); -function sort$1(file) { - file.messages.sort(comparator); - return file -} +var node = {exports: {}}; -function comparator(a, b) { - return ( - check$4(a, b, 'line') || - check$4(a, b, 'column') || - severities[b.fatal] - severities[a.fatal] || - compare$3(a, b, 'source') || - compare$3(a, b, 'ruleId') || - compare$3(a, b, 'reason') || - 0 - ) -} +/** + * Module dependencies. + */ -function check$4(a, b, property) { - return (a[property] || 0) - (b[property] || 0) -} +(function (module, exports) { +const tty = tty$1; +const util = require$$0$4; -function compare$3(a, b, property) { - return (a[property] || '').localeCompare(b[property] || '') -} +/** + * This is the Node.js implementation of `debug()`. + */ -var supported = supportsColor_1.stderr.hasBasic; -var width = stringWidth$1.exports; -var stringify$9 = unistUtilStringifyPosition; -var repeat$6 = repeatString; -var statistics$1 = vfileStatistics; -var sort = vfileSort; +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); -var vfileReporter = reporter$1; +/** + * Colors. + */ -var push$1 = [].push; +exports.colors = [6, 2, 3, 4, 5, 1]; -// `log-symbols` without chalk: -/* istanbul ignore next - Windows. */ -var chars$1 = - process.platform === 'win32' - ? {error: '×', warning: '‼'} - : {error: '✖', warning: '⚠'}; +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = supportsColor_1$1; -var labels = { - true: 'error', - false: 'warning', - null: 'info', - undefined: 'info' -}; + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} -// Report a file’s messages. -function reporter$1(files, options) { - var settings = options || {}; - var one; +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ - if (!files) { - return '' - } +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); - // Error. - if ('name' in files && 'message' in files) { - return String(files.stack || files) - } + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } - // One file. - if (!('length' in files)) { - one = true; - files = [files]; - } + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ - return format(transform$2(files, settings), one, settings) +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); } -function transform$2(files, options) { - var index = -1; - var rows = []; - var all = []; - var sizes = {}; - var messages; - var offset; - var message; - var messageRows; - var row; - var key; +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ - while (++index < files.length) { - messages = sort({messages: files[index].messages.concat()}).messages; - messageRows = []; - offset = -1; +function formatArgs(args) { + const {namespace: name, useColors} = this; - while (++offset < messages.length) { - message = messages[offset]; + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; - if (!options.silent || message.fatal) { - all.push(message); + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} - row = { - location: stringify$9( - message.location.end.line && message.location.end.column - ? message.location - : message.location.start - ), - label: labels[message.fatal], - reason: - (message.stack || message.message) + - (options.verbose && message.note ? '\n' + message.note : ''), - ruleId: message.ruleId || '', - source: message.source || '' - }; +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} - for (key in row) { - sizes[key] = Math.max(size$1(row[key]), sizes[key] || 0); - } +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ - messageRows.push(row); - } - } +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} - if ((!options.quiet && !options.silent) || messageRows.length) { - rows.push({type: 'file', file: files[index], stats: statistics$1(messages)}); - push$1.apply(rows, messageRows); - } - } +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ - return {rows: rows, stats: statistics$1(all), sizes: sizes} +function load() { + return process.env.DEBUG; } -function format(map, one, options) { - var enabled = options.color == null ? supported : options.color; - var lines = []; - var index = -1; - var stats; - var row; - var line; - var reason; - var rest; - var match; +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ - while (++index < map.rows.length) { - row = map.rows[index]; +function init(debug) { + debug.inspectOpts = {}; - if (row.type === 'file') { - stats = row.stats; - line = row.file.history[0] || options.defaultName || ''; + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} - line = - one && !options.defaultName && !row.file.history[0] - ? '' - : (enabled - ? '\x1b[4m' /* Underline. */ + - (stats.fatal - ? '\x1b[31m' /* Red. */ - : stats.total - ? '\x1b[33m' /* Yellow. */ - : '\x1b[32m') /* Green. */ + - line + - '\x1b[39m\x1b[24m' - : line) + - (row.file.stored && row.file.path !== row.file.history[0] - ? ' > ' + row.file.path - : ''); +module.exports = common$3(exports); - if (!stats.total) { - line = - (line ? line + ': ' : '') + - (row.file.stored - ? enabled - ? '\x1b[33mwritten\x1b[39m' /* Yellow. */ - : 'written' - : 'no issues found'); - } +const {formatters} = module.exports; - if (line) { - if (index && map.rows[index - 1].type !== 'file') { - lines.push(''); - } +/** + * Map %o to `util.inspect()`, all on a single line. + */ - lines.push(line); - } - } else { - reason = row.reason; - match = /\r?\n|\r/.exec(reason); +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; - if (match) { - rest = reason.slice(match.index); - reason = reason.slice(0, match.index); - } else { - rest = ''; - } +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ - lines.push( - ( - ' ' + - repeat$6(' ', map.sizes.location - size$1(row.location)) + - row.location + - ' ' + - (enabled - ? (row.label === 'error' - ? '\x1b[31m' /* Red. */ - : '\x1b[33m') /* Yellow. */ + - row.label + - '\x1b[39m' - : row.label) + - repeat$6(' ', map.sizes.label - size$1(row.label)) + - ' ' + - reason + - repeat$6(' ', map.sizes.reason - size$1(reason)) + - ' ' + - row.ruleId + - repeat$6(' ', map.sizes.ruleId - size$1(row.ruleId)) + - ' ' + - (row.source || '') - ).replace(/ +$/, '') + rest - ); - } - } +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; +}(node, node.exports)); - stats = map.stats; +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ - if (stats.fatal || stats.warn) { - line = ''; +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + src.exports = browser.exports; +} else { + src.exports = node.exports; +} - if (stats.fatal) { - line = - (enabled - ? '\x1b[31m' /* Red. */ + chars$1.error + '\x1b[39m' - : chars$1.error) + - ' ' + - stats.fatal + - ' ' + - (labels.true + (stats.fatal === 1 ? '' : 's')); - } +var createDebug = src.exports; - if (stats.warn) { - line = - (line ? line + ', ' : '') + - (enabled - ? '\x1b[33m' /* Yellow. */ + chars$1.warning + '\x1b[39m' - : chars$1.warning) + - ' ' + - stats.warn + - ' ' + - (labels.false + (stats.warn === 1 ? '' : 's')); - } +var re$6 = {exports: {}}; - if (stats.total !== stats.fatal && stats.total !== stats.warn) { - line = stats.total + ' messages (' + line + ')'; - } +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0'; - lines.push('', line); - } +const MAX_LENGTH$2 = 256; +const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991; - return lines.join('\n') -} +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16; -// Get the length of `value`, ignoring ANSI sequences. -function size$1(value) { - var match = /\r?\n|\r/.exec(value); - return width(match ? value.slice(0, match.index) : value) -} +var constants = { + SEMVER_SPEC_VERSION, + MAX_LENGTH: MAX_LENGTH$2, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, + MAX_SAFE_COMPONENT_LENGTH +}; -var load$2 = loadPlugin_1; -var report = vfileReporter; +const debug$f = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {}; -var log_1 = log$1; +var debug_1 = debug$f; -function log$1(context, settings, next) { - var reporter = settings.reporter || report; - var diagnostics; +(function (module, exports) { +const { MAX_SAFE_COMPONENT_LENGTH } = constants; +const debug = debug_1; +exports = module.exports = {}; - if (typeof reporter === 'string') { - try { - reporter = load$2(reporter, {cwd: settings.cwd, prefix: 'vfile-reporter'}); - } catch (_) { - next(new Error('Could not find reporter `' + reporter + '`')); - return - } - } +// The actual regexps go on exports.re +const re = exports.re = []; +const src = exports.src = []; +const t = exports.t = {}; +let R = 0; - diagnostics = reporter( - context.files.filter(given), - Object.assign({}, settings.reporterOptions, { - quiet: settings.quiet, - silent: settings.silent, - color: settings.color - }) - ); +const createToken = (name, value, isGlobal) => { + const index = R++; + debug(index, value); + t[name] = index; + src[index] = value; + re[index] = new RegExp(value, isGlobal ? 'g' : undefined); +}; - if (diagnostics) { - if (diagnostics.charAt(diagnostics.length - 1) !== '\n') { - diagnostics += '\n'; - } +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. - settings.streamError.write(diagnostics, next); - } else { - next(); - } -} +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. -function given(file) { - return file.data.unifiedEngineGiven -} +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*'); +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+'); -var trough$1 = trough_1; -var configure$3 = configure_1$2; -var fileSystem = fileSystem_1$1; -var stdin = stdin_1; -var transform$1 = transform_1; -var log = log_1; +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. -var fileSetPipeline$1 = trough$1() - .use(configure$3) - .use(fileSystem) - .use(stdin) - .use(transform$1) - .use(log); +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*'); -var PassThrough = require$$0__default$5['default'].PassThrough; -var statistics = vfileStatistics; -var fileSetPipeline = fileSetPipeline$1; +// ## Main Version +// Three dot-separated numeric identifiers. -var lib$4 = run; +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`); -// Run the file set pipeline once. -// `callback` is invoked with a fatal error, or with a status code (`0` on -// success, `1` on failure). -function run(options, callback) { - var settings = {}; - var stdin = new PassThrough(); - var tree; - var detectConfig; - var hasConfig; - var detectIgnore; - var hasIgnore; +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`); - try { - stdin = process.stdin; - } catch (_) { - // Obscure bug in Node (seen on Windows). - // See: , - // . - } +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. - if (!callback) { - throw new Error('Missing `callback`') - } +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`); - if (!options || !options.processor) { - return next(new Error('Missing `processor`')) - } +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`); - // Processor. - settings.processor = options.processor; +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - // Path to run as. - settings.cwd = options.cwd || process.cwd(); +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); - // Input. - settings.files = options.files || []; - settings.extensions = (options.extensions || []).map(extension$2); +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); - settings.filePath = options.filePath || null; - settings.streamIn = options.streamIn || stdin; +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. - // Output. - settings.streamOut = options.streamOut || process.stdout; - settings.streamError = options.streamError || process.stderr; - settings.alwaysStringify = options.alwaysStringify; - settings.output = options.output; - settings.out = options.out; +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+'); - // Null overwrites config settings, `undefined` does not. - if (settings.output === null || settings.output === undefined) { - settings.output = undefined; - } +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. - if (settings.output && settings.out) { - return next(new Error('Cannot accept both `output` and `out`')) - } +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); - // Process phase management. - tree = options.tree || false; +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. - settings.treeIn = options.treeIn; - settings.treeOut = options.treeOut; - settings.inspect = options.inspect; +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. - if (settings.treeIn === null || settings.treeIn === undefined) { - settings.treeIn = tree; - } +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`); - if (settings.treeOut === null || settings.treeOut === undefined) { - settings.treeOut = tree; - } +createToken('FULL', `^${src[t.FULLPLAIN]}$`); - // Configuration. - detectConfig = options.detectConfig; - hasConfig = Boolean(options.rcName || options.packageField); +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`); - if (detectConfig && !hasConfig) { - return next( - new Error('Missing `rcName` or `packageField` with `detectConfig`') - ) - } +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`); - settings.detectConfig = - detectConfig === null || detectConfig === undefined - ? hasConfig - : detectConfig; - settings.rcName = options.rcName || null; - settings.rcPath = options.rcPath || null; - settings.packageField = options.packageField || null; - settings.settings = options.settings || {}; - settings.configTransform = options.configTransform; - settings.defaultConfig = options.defaultConfig; +createToken('GTLT', '((?:<|>)?=?)'); - // Ignore. - detectIgnore = options.detectIgnore; - hasIgnore = Boolean(options.ignoreName); +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); - settings.detectIgnore = - detectIgnore === null || detectIgnore === undefined - ? hasIgnore - : detectIgnore; - settings.ignoreName = options.ignoreName || null; - settings.ignorePath = options.ignorePath || null; - settings.ignorePathResolveFrom = options.ignorePathResolveFrom || 'dir'; - settings.ignorePatterns = options.ignorePatterns || []; - settings.silentlyIgnore = Boolean(options.silentlyIgnore); +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`); - if (detectIgnore && !hasIgnore) { - return next(new Error('Missing `ignoreName` with `detectIgnore`')) +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`); + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`); +createToken('COERCERTL', src[t.COERCE], true); + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)'); + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); +exports.tildeTrimReplace = '$1~'; + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)'); + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); +exports.caretTrimReplace = '$1^'; + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); +exports.comparatorTrimReplace = '$1$2$3'; + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`); + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`); + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*'); +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$'); +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$'); +}(re$6, re$6.exports)); + +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl']; +const parseOptions$4 = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true; + return options + }, {}); +var parseOptions_1 = parseOptions$4; + +const numeric$1 = /^[0-9]+$/; +const compareIdentifiers$1 = (a, b) => { + const anum = numeric$1.test(a); + const bnum = numeric$1.test(b); + + if (anum && bnum) { + a = +a; + b = +b; } - // Plugins. - settings.pluginPrefix = options.pluginPrefix || null; - settings.plugins = options.plugins || {}; + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +}; - // Reporting. - settings.reporter = options.reporter || null; - settings.reporterOptions = options.reporterOptions || null; - settings.color = options.color || false; - settings.silent = options.silent || false; - settings.quiet = options.quiet || false; - settings.frail = options.frail || false; +const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a); - // Process. - fileSetPipeline.run({files: options.files || []}, settings, next); +var identifiers = { + compareIdentifiers: compareIdentifiers$1, + rcompareIdentifiers +}; - function next(error, context) { - var stats = statistics((context || {}).files); - var failed = Boolean( - settings.frail ? stats.fatal || stats.warn : stats.fatal - ); +const debug$e = debug_1; +const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants; +const { re: re$5, t: t$4 } = re$6.exports; - if (error) { - callback(error); - } else { - callback(null, failed ? 1 : 0, context); +const parseOptions$3 = parseOptions_1; +const { compareIdentifiers } = identifiers; +class SemVer$e { + constructor (version, options) { + options = parseOptions$3(options); + + if (version instanceof SemVer$e) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version; + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) } - } -} -function extension$2(ext) { - return ext.charAt(0) === '.' ? ext : '.' + ext -} + if (version.length > MAX_LENGTH$1) { + throw new TypeError( + `version is longer than ${MAX_LENGTH$1} characters` + ) + } -var ansiStyles$1 = {exports: {}}; + debug$e('SemVer', version, options); + this.options = options; + this.loose = !!options.loose; + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease; -var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; + const m = version.trim().match(options.loose ? re$5[t$4.LOOSE] : re$5[t$4.FULL]); -/* MIT license */ + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } -/* eslint-disable no-mixed-operators */ -const cssKeywords = colorName; + this.raw = version; -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; -} + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } -const convert$4 = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } -var conversions$2 = convert$4; + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } -// Hide .channels and .labels properties -for (const model of Object.keys(convert$4)) { - if (!('channels' in convert$4[model])) { - throw new Error('missing channels property: ' + model); - } + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = []; + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }); + } - if (!('labels' in convert$4[model])) { - throw new Error('missing channel labels property: ' + model); - } + this.build = m[5] ? m[5].split('.') : []; + this.format(); + } - if (convert$4[model].labels.length !== convert$4[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } + format () { + this.version = `${this.major}.${this.minor}.${this.patch}`; + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}`; + } + return this.version + } - const {channels, labels} = convert$4[model]; - delete convert$4[model].channels; - delete convert$4[model].labels; - Object.defineProperty(convert$4[model], 'channels', {value: channels}); - Object.defineProperty(convert$4[model], 'labels', {value: labels}); -} + toString () { + return this.version + } -convert$4.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; + compare (other) { + debug$e('SemVer.compare', this.version, this.options, other); + if (!(other instanceof SemVer$e)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer$e(other, this.options); + } - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } + if (other.version === this.version) { + return 0 + } - h = Math.min(h * 60, 360); + return this.compareMain(other) || this.comparePre(other) + } - if (h < 0) { - h += 360; - } + compareMain (other) { + if (!(other instanceof SemVer$e)) { + other = new SemVer$e(other, this.options); + } - const l = (min + max) / 2; + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } + comparePre (other) { + if (!(other instanceof SemVer$e)) { + other = new SemVer$e(other, this.options); + } - return [h, s * 100, l * 100]; -}; + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } -convert$4.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; + let i = 0; + do { + const a = this.prerelease[i]; + const b = other.prerelease[i]; + debug$e('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; + compareBuild (other) { + if (!(other instanceof SemVer$e)) { + other = new SemVer$e(other, this.options); + } - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); + let i = 0; + do { + const a = this.build[i]; + const b = other.build[i]; + debug$e('prerelease compare', i, a, b); + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier); + } + this.inc('pre', identifier); + break - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++; + } + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++; + } + this.patch = 0; + this.prerelease = []; + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++; + } + this.prerelease = []; + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0]; + } else { + let i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0); + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0]; + } + } else { + this.prerelease = [identifier, 0]; + } + } + break - return [ - h * 360, - s * 100, - v * 100 - ]; -}; + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format(); + this.raw = this.version; + return this + } +} -convert$4.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert$4.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); +var semver$2 = SemVer$e; - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); +const {MAX_LENGTH} = constants; +const { re: re$4, t: t$3 } = re$6.exports; +const SemVer$d = semver$2; - return [h, w * 100, b * 100]; -}; +const parseOptions$2 = parseOptions_1; +const parse$9 = (version, options) => { + options = parseOptions$2(options); -convert$4.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; + if (version instanceof SemVer$d) { + return version + } - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; + if (typeof version !== 'string') { + return null + } - return [c * 100, m * 100, y * 100, k * 100]; + if (version.length > MAX_LENGTH) { + return null + } + + const r = options.loose ? re$4[t$3.LOOSE] : re$4[t$3.FULL]; + if (!r.test(version)) { + return null + } + + try { + return new SemVer$d(version, options) + } catch (er) { + return null + } }; -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} +var parse_1 = parse$9; -convert$4.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } +const parse$8 = parse_1; +const valid$1 = (version, options) => { + const v = parse$8(version, options); + return v ? v.version : null +}; +var valid_1 = valid$1; - let currentClosestDistance = Infinity; - let currentClosestKeyword; +const parse$7 = parse_1; +const clean = (version, options) => { + const s = parse$7(version.trim().replace(/^[=v]+/, ''), options); + return s ? s.version : null +}; +var clean_1 = clean; - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; +const SemVer$c = semver$2; - // Compute comparative distance - const distance = comparativeDistance(rgb, value); +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options; + options = undefined; + } - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; + try { + return new SemVer$c(version, options).inc(release, identifier).version + } catch (er) { + return null + } }; +var inc_1 = inc; -convert$4.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; +const SemVer$b = semver$2; +const compare$b = (a, b, loose) => + new SemVer$b(a, loose).compare(new SemVer$b(b, loose)); -convert$4.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; +var compare_1 = compare$b; - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); +const compare$a = compare_1; +const eq$2 = (a, b, loose) => compare$a(a, b, loose) === 0; +var eq_1 = eq$2; - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); +const parse$6 = parse_1; +const eq$1 = eq_1; - return [x * 100, y * 100, z * 100]; +const diff = (version1, version2) => { + if (eq$1(version1, version2)) { + return null + } else { + const v1 = parse$6(version1); + const v2 = parse$6(version2); + const hasPre = v1.prerelease.length || v2.prerelease.length; + const prefix = hasPre ? 'pre' : ''; + const defaultResult = hasPre ? 'prerelease' : ''; + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } }; +var diff_1 = diff; -convert$4.rgb.lab = function (rgb) { - const xyz = convert$4.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; +const SemVer$a = semver$2; +const major = (a, loose) => new SemVer$a(a, loose).major; +var major_1 = major; - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); +const SemVer$9 = semver$2; +const minor = (a, loose) => new SemVer$9(a, loose).minor; +var minor_1 = minor; - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); +const SemVer$8 = semver$2; +const patch = (a, loose) => new SemVer$8(a, loose).patch; +var patch_1 = patch; - return [l, a, b]; +const parse$5 = parse_1; +const prerelease = (version, options) => { + const parsed = parse$5(version, options); + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null }; +var prerelease_1 = prerelease; -convert$4.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; +const compare$9 = compare_1; +const rcompare = (a, b, loose) => compare$9(b, a, loose); +var rcompare_1 = rcompare; - if (s === 0) { - val = l * 255; - return [val, val, val]; - } +const compare$8 = compare_1; +const compareLoose = (a, b) => compare$8(a, b, true); +var compareLoose_1 = compareLoose; - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } +const SemVer$7 = semver$2; +const compareBuild$2 = (a, b, loose) => { + const versionA = new SemVer$7(a, loose); + const versionB = new SemVer$7(b, loose); + return versionA.compare(versionB) || versionA.compareBuild(versionB) +}; +var compareBuild_1 = compareBuild$2; - const t1 = 2 * l - t2; +const compareBuild$1 = compareBuild_1; +const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(a, b, loose)); +var sort_1 = sort$1; - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } +const compareBuild = compareBuild_1; +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)); +var rsort_1 = rsort; - if (t3 > 1) { - t3--; - } +const compare$7 = compare_1; +const gt$3 = (a, b, loose) => compare$7(a, b, loose) > 0; +var gt_1 = gt$3; - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } +const compare$6 = compare_1; +const lt$2 = (a, b, loose) => compare$6(a, b, loose) < 0; +var lt_1 = lt$2; - rgb[i] = val * 255; - } +const compare$5 = compare_1; +const neq$1 = (a, b, loose) => compare$5(a, b, loose) !== 0; +var neq_1 = neq$1; - return rgb; -}; +const compare$4 = compare_1; +const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0; +var gte_1 = gte$3; -convert$4.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); +const compare$3 = compare_1; +const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0; +var lte_1 = lte$3; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); +const eq = eq_1; +const neq = neq_1; +const gt$2 = gt_1; +const gte$2 = gte_1; +const lt$1 = lt_1; +const lte$2 = lte_1; - return [h, sv * 100, v * 100]; -}; +const cmp$1 = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version; + if (typeof b === 'object') + b = b.version; + return a === b -convert$4.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; + case '!==': + if (typeof a === 'object') + a = a.version; + if (typeof b === 'object') + b = b.version; + return a !== b - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; + case '': + case '=': + case '==': + return eq(a, b, loose) - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; + case '!=': + return neq(a, b, loose) -convert$4.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; + case '>': + return gt$2(a, b, loose) - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; + case '>=': + return gte$2(a, b, loose) - return [h, sl * 100, l * 100]; -}; + case '<': + return lt$1(a, b, loose) + + case '<=': + return lte$2(a, b, loose) -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert$4.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; + default: + throw new TypeError(`Invalid operator: ${op}`) + } +}; +var cmp_1 = cmp$1; - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } +const SemVer$6 = semver$2; +const parse$4 = parse_1; +const {re: re$3, t: t$2} = re$6.exports; - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; +const coerce$I = (version, options) => { + if (version instanceof SemVer$6) { + return version + } - if ((i & 0x01) !== 0) { - f = 1 - f; - } + if (typeof version === 'number') { + version = String(version); + } - const n = wh + f * (v - wh); // Linear interpolation + if (typeof version !== 'string') { + return null + } - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ + options = options || {}; - return [r * 255, g * 255, b * 255]; -}; + let match = null; + if (!options.rtl) { + match = version.match(re$3[t$2.COERCE]); + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next; + while ((next = re$3[t$2.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next; + } + re$3[t$2.COERCERTL].lastIndex = next.index + next[1].length + next[2].length; + } + // leave it in a clean state + re$3[t$2.COERCERTL].lastIndex = -1; + } -convert$4.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; + if (match === null) + return null - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); + return parse$4(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) +}; +var coerce_1 = coerce$I; - return [r * 255, g * 255, b * 255]; +var iterator = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value; + } + }; }; -convert$4.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; +var yallist = Yallist$1; - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); +Yallist$1.Node = Node; +Yallist$1.create = Yallist$1; - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; +function Yallist$1 (list) { + var self = this; + if (!(self instanceof Yallist$1)) { + self = new Yallist$1(); + } - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; + self.tail = null; + self.head = null; + self.length = 0; - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item); + }); + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]); + } + } - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); + return self +} - return [r * 255, g * 255, b * 255]; -}; +Yallist$1.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } -convert$4.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; + var next = node.next; + var prev = node.prev; - x /= 95.047; - y /= 100; - z /= 108.883; + if (next) { + next.prev = prev; + } - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + if (prev) { + prev.next = next; + } - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); + if (node === this.head) { + this.head = next; + } + if (node === this.tail) { + this.tail = prev; + } - return [l, a, b]; -}; + node.list.length--; + node.next = null; + node.prev = null; + node.list = null; -convert$4.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; + return next +}; - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; +Yallist$1.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + if (node.list) { + node.list.removeNode(node); + } - x *= 95.047; - y *= 100; - z *= 108.883; + var head = this.head; + node.list = this; + node.next = head; + if (head) { + head.prev = node; + } - return [x, y, z]; + this.head = node; + if (!this.tail) { + this.tail = node; + } + this.length++; }; -convert$4.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; +Yallist$1.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } - if (h < 0) { - h += 360; - } + if (node.list) { + node.list.removeNode(node); + } - const c = Math.sqrt(a * a + b * b); + var tail = this.tail; + node.list = this; + node.prev = tail; + if (tail) { + tail.next = node; + } - return [l, c, h]; + this.tail = node; + if (!this.head) { + this.head = node; + } + this.length++; }; -convert$4.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); +Yallist$1.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push$2(this, arguments[i]); + } + return this.length +}; - return [l, a, b]; +Yallist$1.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]); + } + return this.length }; -convert$4.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert$4.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization +Yallist$1.prototype.pop = function () { + if (!this.tail) { + return undefined + } - value = Math.round(value / 50); + var res = this.tail.value; + this.tail = this.tail.prev; + if (this.tail) { + this.tail.next = null; + } else { + this.head = null; + } + this.length--; + return res +}; - if (value === 0) { - return 30; - } +Yallist$1.prototype.shift = function () { + if (!this.head) { + return undefined + } - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); + var res = this.head.value; + this.head = this.head.next; + if (this.head) { + this.head.prev = null; + } else { + this.tail = null; + } + this.length--; + return res +}; - if (value === 2) { - ansi += 60; - } +Yallist$1.prototype.forEach = function (fn, thisp) { + thisp = thisp || this; + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this); + walker = walker.next; + } +}; - return ansi; +Yallist$1.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this; + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this); + walker = walker.prev; + } }; -convert$4.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert$4.rgb.ansi16(convert$4.hsv.rgb(args), args[2]); +Yallist$1.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next; + } + if (i === n && walker !== null) { + return walker.value + } }; -convert$4.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; +Yallist$1.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev; + } + if (i === n && walker !== null) { + return walker.value + } +}; - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } +Yallist$1.prototype.map = function (fn, thisp) { + thisp = thisp || this; + var res = new Yallist$1(); + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)); + walker = walker.next; + } + return res +}; - if (r > 248) { - return 231; - } +Yallist$1.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this; + var res = new Yallist$1(); + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)); + walker = walker.prev; + } + return res +}; - return Math.round(((r - 8) / 247) * 24) + 232; - } +Yallist$1.prototype.reduce = function (fn, initial) { + var acc; + var walker = this.head; + if (arguments.length > 1) { + acc = initial; + } else if (this.head) { + walker = this.head.next; + acc = this.head.value; + } else { + throw new TypeError('Reduce of empty list with no initial value') + } - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i); + walker = walker.next; + } - return ansi; + return acc }; -convert$4.ansi16.rgb = function (args) { - let color = args % 10; +Yallist$1.prototype.reduceReverse = function (fn, initial) { + var acc; + var walker = this.tail; + if (arguments.length > 1) { + acc = initial; + } else if (this.tail) { + walker = this.tail.prev; + acc = this.tail.value; + } else { + throw new TypeError('Reduce of empty list with no initial value') + } - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i); + walker = walker.prev; + } - color = color / 10.5 * 255; + return acc +}; - return [color, color, color]; - } +Yallist$1.prototype.toArray = function () { + var arr = new Array(this.length); + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value; + walker = walker.next; + } + return arr +}; - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; +Yallist$1.prototype.toArrayReverse = function () { + var arr = new Array(this.length); + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value; + walker = walker.prev; + } + return arr +}; - return [r, g, b]; +Yallist$1.prototype.slice = function (from, to) { + to = to || this.length; + if (to < 0) { + to += this.length; + } + from = from || 0; + if (from < 0) { + from += this.length; + } + var ret = new Yallist$1(); + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0; + } + if (to > this.length) { + to = this.length; + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next; + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value); + } + return ret }; -convert$4.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } +Yallist$1.prototype.sliceReverse = function (from, to) { + to = to || this.length; + if (to < 0) { + to += this.length; + } + from = from || 0; + if (from < 0) { + from += this.length; + } + var ret = new Yallist$1(); + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0; + } + if (to > this.length) { + to = this.length; + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev; + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value); + } + return ret +}; - args -= 16; +Yallist$1.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1; + } + if (start < 0) { + start = this.length + start; + } - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next; + } - return [r, g, b]; -}; + var ret = []; + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value); + walker = this.removeNode(walker); + } + if (walker === null) { + walker = this.tail; + } -convert$4.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev; + } - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]); + } + return ret; }; -convert$4.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } +Yallist$1.prototype.reverse = function () { + var head = this.head; + var tail = this.tail; + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev; + walker.prev = walker.next; + walker.next = p; + } + this.head = tail; + this.tail = head; + return this +}; - let colorString = match[0]; +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self); - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } + if (inserted.next === null) { + self.tail = inserted; + } + if (inserted.prev === null) { + self.head = inserted; + } - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; + self.length++; - return [r, g, b]; -}; + return inserted +} -convert$4.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; +function push$2 (self, item) { + self.tail = new Node(item, self.tail, null, self); + if (!self.head) { + self.head = self.tail; + } + self.length++; +} - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } +function unshift (self, item) { + self.head = new Node(item, null, self.head, self); + if (!self.tail) { + self.tail = self.head; + } + self.length++; +} - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } - hue /= 6; - hue %= 1; + this.list = list; + this.value = value; - return [hue * 360, chroma * 100, grayscale * 100]; -}; + if (prev) { + prev.next = this; + this.prev = prev; + } else { + this.prev = null; + } -convert$4.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; + if (next) { + next.prev = this; + this.next = next; + } else { + this.next = null; + } +} - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); +try { + // add if support for Symbol.iterator is present + iterator(Yallist$1); +} catch (er) {} - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } +// A linked list to keep track of recently-used-ness +const Yallist = yallist; + +const MAX = Symbol('max'); +const LENGTH = Symbol('length'); +const LENGTH_CALCULATOR = Symbol('lengthCalculator'); +const ALLOW_STALE = Symbol('allowStale'); +const MAX_AGE = Symbol('maxAge'); +const DISPOSE = Symbol('dispose'); +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet'); +const LRU_LIST = Symbol('lruList'); +const CACHE = Symbol('cache'); +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet'); + +const naiveLength = () => 1; + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options }; + + if (!options) + options = {}; - return [hsl[0], c * 100, f * 100]; -}; + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + this[MAX] = options.max || Infinity; -convert$4.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; + const lc = options.length || naiveLength; + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc; + this[ALLOW_STALE] = options.stale || false; + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0; + this[DISPOSE] = options.dispose; + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false; + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false; + this.reset(); + } - const c = s * v; - let f = 0; + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') - if (c < 1.0) { - f = (v - c) / (1 - c); - } + this[MAX] = mL || Infinity; + trim(this); + } + get max () { + return this[MAX] + } - return [hsv[0], c * 100, f * 100]; -}; + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale; + } + get allowStale () { + return this[ALLOW_STALE] + } -convert$4.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } + this[MAX_AGE] = mA; + trim(this); + } + get maxAge () { + return this[MAX_AGE] + } - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength; - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC; + this[LENGTH] = 0; + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key); + this[LENGTH] += hit.length; + }); + } + trim(this); + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } - mg = (1.0 - c) * g; + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; + rforEach (fn, thisp) { + thisp = thisp || this; + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev; + forEachStep(this, fn, walker, thisp); + walker = prev; + } + } -convert$4.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; + forEach (fn, thisp) { + thisp = thisp || this; + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next; + forEachStep(this, fn, walker, thisp); + walker = next; + } + } - const v = c + g * (1.0 - c); - let f = 0; + keys () { + return this[LRU_LIST].toArray().map(k => k.key) + } - if (v > 0.0) { - f = c / v; - } + values () { + return this[LRU_LIST].toArray().map(k => k.value) + } - return [hcg[0], f * 100, v * 100]; -}; + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)); + } -convert$4.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; + this[CACHE] = new Map(); // hash of items by key + this[LRU_LIST] = new Yallist(); // list of items in order of use recency + this[LENGTH] = 0; // length of items in the list + } - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) + } - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } + dumpLru () { + return this[LRU_LIST] + } - return [hcg[0], s * 100, l * 100]; -}; + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE]; -convert$4.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') -convert$4.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; + const now = maxAge ? Date.now() : 0; + const len = this[LENGTH_CALCULATOR](value, key); - if (c < 1) { - g = (v - c) / (1 - c); - } + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)); + return false + } - return [hwb[0], c * 100, g * 100]; -}; + const node = this[CACHE].get(key); + const item = node.value; -convert$4.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value); + } -convert$4.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; + item.now = now; + item.maxAge = maxAge; + item.value = value; + this[LENGTH] += len - item.length; + item.length = len; + this.get(key); + trim(this); + return true + } -convert$4.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; + const hit = new Entry(key, value, len, now, maxAge); -convert$4.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value); -convert$4.gray.hsv = convert$4.gray.hsl; + return false + } -convert$4.gray.hwb = function (gray) { - return [0, 100, gray[0]]; + this[LENGTH] += hit.length; + this[LRU_LIST].unshift(hit); + this[CACHE].set(key, this[LRU_LIST].head); + trim(this); + return true + } + + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value; + return !isStale(this, hit) + } + + get (key) { + return get(this, key, true) + } + + peek (key) { + return get(this, key, false) + } + + pop () { + const node = this[LRU_LIST].tail; + if (!node) + return null + + del(this, node); + return node.value + } + + del (key) { + del(this, this[CACHE].get(key)); + } + + load (arr) { + // reset the cache + this.reset(); + + const now = Date.now(); + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l]; + const expiresAt = hit.e || 0; + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v); + else { + const maxAge = expiresAt - now; + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge); + } + } + } + } + + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)); + } +} + +const get = (self, key, doUse) => { + const node = self[CACHE].get(key); + if (node) { + const hit = node.value; + if (isStale(self, hit)) { + del(self, node); + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now(); + self[LRU_LIST].unshiftNode(node); + } + } + return hit.value + } }; -convert$4.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now; + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) }; -convert$4.gray.lab = function (gray) { - return [gray[0], 0, 0]; +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev; + del(self, walker); + walker = prev; + } + } }; -convert$4.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; +const del = (self, node) => { + if (node) { + const hit = node.value; + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value); - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; + self[LENGTH] -= hit.length; + self[CACHE].delete(hit.key); + self[LRU_LIST].removeNode(node); + } }; -convert$4.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key; + this.value = value; + this.length = length; + this.now = now; + this.maxAge = maxAge || 0; + } +} + +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value; + if (isStale(self, hit)) { + del(self, node); + if (!self[ALLOW_STALE]) + hit = undefined; + } + if (hit) + fn.call(thisp, hit.value, hit.key, self); }; -const conversions$1 = conversions$2; +var lruCache = LRUCache; -/* - This function routes a model to all other models. +// hoisted class for cyclic dependency +class Range$a { + constructor (range, options) { + options = parseOptions$1(options); - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). + if (range instanceof Range$a) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range$a(range.raw, options) + } + } - conversions that are not possible simply are not included. -*/ + if (range instanceof Comparator$2) { + // just put it in the set and return + this.raw = range.value; + this.set = [[range]]; + this.format(); + return this + } -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions$1); + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease; - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } + // First, split based on boolean or || + this.raw = range; + this.set = range + .split(/\s*\|\|\s*/) + // map the range to a 2d array of comparators + .map(range => this.parseRange(range.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length); + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0]; + this.set = this.set.filter(c => !isNullSet(c[0])); + if (this.set.length === 0) + this.set = [first]; + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c]; + break + } + } + } + } - return graph; -} + this.format(); + } -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim(); + return this.range + } - graph[fromModel].distance = 0; + toString () { + return this.range + } + + parseRange (range) { + range = range.trim(); + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(','); + const memoKey = `parseRange:${memoOpts}:${range}`; + const cached = cache$1.get(memoKey); + if (cached) + return cached + + const loose = this.options.loose; + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re$2[t$1.HYPHENRANGELOOSE] : re$2[t$1.HYPHENRANGE]; + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); + debug$d('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re$2[t$1.COMPARATORTRIM], comparatorTrimReplace); + debug$d('comparator trim', range, re$2[t$1.COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re$2[t$1.TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re$2[t$1.CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + const compRe = loose ? re$2[t$1.COMPARATORLOOSE] : re$2[t$1.COMPARATOR]; + const rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + // in loose mode, throw out any that are not valid comparators + .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) + .map(comp => new Comparator$2(comp, this.options)); + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + rangeList.length; + const rangeMap = new Map(); + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp); + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete(''); + + const result = [...rangeMap.values()]; + cache$1.set(memoKey, result); + return result + } - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions$1[current]); + intersects (range, options) { + if (!(range instanceof Range$a)) { + throw new TypeError('a Range is required') + } - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } - return graph; -} + if (typeof version === 'string') { + try { + version = new SemVer$5(version, this.options); + } catch (er) { + return false + } + } -function link$1(from, to) { - return function (args) { - return to(from(args)); - }; + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } } +var range$1 = Range$a; -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions$1[graph[toModel].parent][toModel]; +const LRU = lruCache; +const cache$1 = new LRU({ max: 1000 }); - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link$1(conversions$1[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } +const parseOptions$1 = parseOptions_1; +const Comparator$2 = comparator$1; +const debug$d = debug_1; +const SemVer$5 = semver$2; +const { + re: re$2, + t: t$1, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace +} = re$6.exports; + +const isNullSet = c => c.value === '<0.0.0-0'; +const isAny = c => c.value === ''; + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true; + const remainingComparators = comparators.slice(); + let testComparator = remainingComparators.pop(); + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }); - fn.conversion = path; - return fn; -} + testComparator = remainingComparators.pop(); + } -var route$1 = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; + return result +}; - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug$d('comp', comp, options); + comp = replaceCarets(comp, options); + debug$d('caret', comp); + comp = replaceTildes(comp, options); + debug$d('tildes', comp); + comp = replaceXRanges(comp, options); + debug$d('xrange', comp); + comp = replaceStars(comp, options); + debug$d('stars', comp); + return comp +}; + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*'; + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceTilde(comp, options) + }).join(' '); + +const replaceTilde = (comp, options) => { + const r = options.loose ? re$2[t$1.TILDELOOSE] : re$2[t$1.TILDE]; + return comp.replace(r, (_, M, m, p, pr) => { + debug$d('tilde', comp, _, M, m, p, pr); + let ret; - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } + if (isX(M)) { + ret = ''; + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; + } else if (pr) { + debug$d('replaceTilde pr', pr); + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0`; + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0`; + } - conversion[toModel] = wrapConversion(toModel, graph); - } + debug$d('tilde return', ret); + return ret + }) +}; - return conversion; +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceCaret(comp, options) + }).join(' '); + +const replaceCaret = (comp, options) => { + debug$d('caret', comp, options); + const r = options.loose ? re$2[t$1.CARETLOOSE] : re$2[t$1.CARET]; + const z = options.includePrerelease ? '-0' : ''; + return comp.replace(r, (_, M, m, p, pr) => { + debug$d('caret', comp, _, M, m, p, pr); + let ret; + + if (isX(M)) { + ret = ''; + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; + } + } else if (pr) { + debug$d('replaceCaret pr', pr); + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0`; + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0`; + } + } else { + debug$d('no pr'); + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0`; + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0`; + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0`; + } + } + + debug$d('caret return', ret); + return ret + }) }; -const conversions = conversions$2; -const route = route$1; +const replaceXRanges = (comp, options) => { + debug$d('replaceXRanges', comp, options); + return comp.split(/\s+/).map((comp) => { + return replaceXRange(comp, options) + }).join(' ') +}; -const convert$3 = {}; +const replaceXRange = (comp, options) => { + comp = comp.trim(); + const r = options.loose ? re$2[t$1.XRANGELOOSE] : re$2[t$1.XRANGE]; + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug$d('xRange', comp, ret, gtlt, M, m, p, pr); + const xM = isX(M); + const xm = xM || isX(m); + const xp = xm || isX(p); + const anyX = xp; -const models$3 = Object.keys(conversions); + if (gtlt === '=' && anyX) { + gtlt = ''; + } -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : ''; - if (arg0.length > 1) { - args = arg0; - } + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0'; + } else { + // nothing is forbidden + ret = '*'; + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0; + } + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<'; + if (xm) { + M = +M + 1; + } else { + m = +m + 1; + } + } - return fn(args); - }; + if (gtlt === '<') + pr = '-0'; - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } + ret = `${gtlt + M}.${m}.${p}${pr}`; + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0`; + } - return wrappedFn; -} + debug$d('xRange return', ret); -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; + return ret + }) +}; - if (arg0 === undefined || arg0 === null) { - return arg0; - } +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug$d('replaceStars', comp, options); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re$2[t$1.STAR], '') +}; + +const replaceGTE0 = (comp, options) => { + debug$d('replaceGTE0', comp, options); + return comp.trim() + .replace(re$2[options.includePrerelease ? t$1.GTE0PRE : t$1.GTE0], '') +}; + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = ''; + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}`; + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`; + } else if (fpr) { + from = `>=${from}`; + } else { + from = `>=${from}${incPr ? '-0' : ''}`; + } + + if (isX(tM)) { + to = ''; + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0`; + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0`; + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}`; + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0`; + } else { + to = `<=${to}`; + } - if (arg0.length > 1) { - args = arg0; - } + return (`${from} ${to}`).trim() +}; - const result = fn(args); +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug$d(set[i].semver); + if (set[i].semver === Comparator$2.ANY) { + continue + } - return result; - }; + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver; + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } + // Version has a -pre, but it's not one of the ones we like. + return false + } - return wrappedFn; -} + return true +}; -models$3.forEach(fromModel => { - convert$3[fromModel] = {}; +const ANY$2 = Symbol('SemVer ANY'); +// hoisted class for cyclic dependency +class Comparator$1 { + static get ANY () { + return ANY$2 + } + constructor (comp, options) { + options = parseOptions(options); - Object.defineProperty(convert$3[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$3[fromModel], 'labels', {value: conversions[fromModel].labels}); + if (comp instanceof Comparator$1) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value; + } + } - const routes = route(fromModel); - const routeModels = Object.keys(routes); + debug$c('comparator', comp, options); + this.options = options; + this.loose = !!options.loose; + this.parse(comp); - routeModels.forEach(toModel => { - const fn = routes[toModel]; + if (this.semver === ANY$2) { + this.value = ''; + } else { + this.value = this.operator + this.semver.version; + } - convert$3[fromModel][toModel] = wrapRounded(fn); - convert$3[fromModel][toModel].raw = wrapRaw(fn); - }); -}); + debug$c('comp', this); + } -var colorConvert = convert$3; + parse (comp) { + const r = this.options.loose ? re$1[t.COMPARATORLOOSE] : re$1[t.COMPARATOR]; + const m = comp.match(r); -(function (module) { + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } -const wrapAnsi16 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${code + offset}m`; -}; + this.operator = m[1] !== undefined ? m[1] : ''; + if (this.operator === '=') { + this.operator = ''; + } -const wrapAnsi256 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${38 + offset};5;${code}m`; -}; + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY$2; + } else { + this.semver = new SemVer$4(m[2], this.options.loose); + } + } -const wrapAnsi16m = (fn, offset) => (...args) => { - const rgb = fn(...args); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; + toString () { + return this.value + } -const ansi2ansi = n => n; -const rgb2rgb = (r, g, b) => [r, g, b]; + test (version) { + debug$c('Comparator.test', version, this.options.loose); -const setLazyProperty = (object, property, get) => { - Object.defineProperty(object, property, { - get: () => { - const value = get(); + if (this.semver === ANY$2 || version === ANY$2) { + return true + } - Object.defineProperty(object, property, { - value, - enumerable: true, - configurable: true - }); + if (typeof version === 'string') { + try { + version = new SemVer$4(version, this.options); + } catch (er) { + return false + } + } - return value; - }, - enumerable: true, - configurable: true - }); + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator$1)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + }; + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range$9(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range$9(this.value, options).test(comp.semver) + } + + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>'); + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<'); + const sameSemVer = this.semver.version === comp.semver.version; + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<='); + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<'); + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>'); + + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } +} + +var comparator$1 = Comparator$1; + +const parseOptions = parseOptions_1; +const {re: re$1, t} = re$6.exports; +const cmp = cmp_1; +const debug$c = debug_1; +const SemVer$4 = semver$2; +const Range$9 = range$1; + +const Range$8 = range$1; +const satisfies$3 = (version, range, options) => { + try { + range = new Range$8(range, options); + } catch (er) { + return false + } + return range.test(version) }; +var satisfies_1 = satisfies$3; -/** @type {typeof import('color-convert')} */ -let colorConvert$1; -const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert$1 === undefined) { - colorConvert$1 = colorConvert; - } +const Range$7 = range$1; - const offset = isBackground ? 10 : 0; - const styles = {}; +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range$7(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')); - for (const [sourceSpace, suite] of Object.entries(colorConvert$1)) { - const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; - if (sourceSpace === targetSpace) { - styles[name] = wrap(identity, offset); - } else if (typeof suite === 'object') { - styles[name] = wrap(suite[targetSpace], offset); - } - } +var toComparators_1 = toComparators; - return styles; +const SemVer$3 = semver$2; +const Range$6 = range$1; + +const maxSatisfying = (versions, range, options) => { + let max = null; + let maxSV = null; + let rangeObj = null; + try { + rangeObj = new Range$6(range, options); + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v; + maxSV = new SemVer$3(max, options); + } + } + }); + return max }; +var maxSatisfying_1 = maxSatisfying; -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], +const SemVer$2 = semver$2; +const Range$5 = range$1; +const minSatisfying = (versions, range, options) => { + let min = null; + let minSV = null; + let rangeObj = null; + try { + rangeObj = new Range$5(range, options); + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v; + minSV = new SemVer$2(min, options); + } + } + }); + return min +}; +var minSatisfying_1 = minSatisfying; - // Bright color - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], +const SemVer$1 = semver$2; +const Range$4 = range$1; +const gt$1 = gt_1; - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; +const minVersion = (range, loose) => { + range = new Range$4(range, loose); - // Alias bright black as gray (and grey) - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + let minver = new SemVer$1('0.0.0'); + if (range.test(minver)) { + return minver + } - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; + minver = new SemVer$1('0.0.0-0'); + if (range.test(minver)) { + return minver + } - group[styleName] = styles[styleName]; + minver = null; + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; - codes.set(style[0], style[1]); - } + let setMin = null; + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer$1(comparator.semver.version); + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++; + } else { + compver.prerelease.push(0); + } + compver.raw = compver.format(); + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt$1(compver, setMin)) { + setMin = compver; + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }); + if (setMin && (!minver || gt$1(minver, setMin))) + minver = setMin; + } - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - } + if (minver && range.test(minver)) { + return minver + } - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); + return null +}; +var minVersion_1 = minVersion; - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; +const Range$3 = range$1; +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range$3(range, options).range || '*' + } catch (er) { + return null + } +}; +var valid = validRange; + +const SemVer = semver$2; +const Comparator = comparator$1; +const {ANY: ANY$1} = Comparator; +const Range$2 = range$1; +const satisfies$2 = satisfies_1; +const gt = gt_1; +const lt = lt_1; +const lte$1 = lte_1; +const gte$1 = gte_1; + +const outside$2 = (version, range, hilo, options) => { + version = new SemVer(version, options); + range = new Range$2(range, options); + + let gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte$1; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break + case '<': + gtfn = lt; + ltefn = gte$1; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } - setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); - setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + // If it satisfies the range it is not outside + if (satisfies$2(version, range, options)) { + return false + } - return styles; -} + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); -}(ansiStyles$1)); + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i]; -const stringReplaceAll$1 = (string, substring, replacer) => { - let index = string.indexOf(substring); - if (index === -1) { - return string; - } + let high = null; + let low = null; - const substringLength = substring.length; - let endIndex = 0; - let returnValue = ''; - do { - returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; - endIndex = index + substringLength; - index = string.indexOf(substring, endIndex); - } while (index !== -1); + comparators.forEach((comparator) => { + if (comparator.semver === ANY$1) { + comparator = new Comparator('>=0.0.0'); + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator; + } + }); - returnValue += string.substr(endIndex); - return returnValue; -}; + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } -const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => { - let endIndex = 0; - let returnValue = ''; - do { - const gotCR = string[index - 1] === '\r'; - returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; - endIndex = index + 1; - index = string.indexOf('\n', endIndex); - } while (index !== -1); + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +}; - returnValue += string.substr(endIndex); - return returnValue; +var outside_1 = outside$2; + +// Determine if version is greater than all the versions possible in the range. +const outside$1 = outside_1; +const gtr = (version, range, options) => outside$1(version, range, '>', options); +var gtr_1 = gtr; + +const outside = outside_1; +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options); +var ltr_1 = ltr; + +const Range$1 = range$1; +const intersects = (r1, r2, options) => { + r1 = new Range$1(r1, options); + r2 = new Range$1(r2, options); + return r1.intersects(r2) +}; +var intersects_1 = intersects; + +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies$1 = satisfies_1; +const compare$2 = compare_1; +var simplify = (versions, range, options) => { + const set = []; + let min = null; + let prev = null; + const v = versions.sort((a, b) => compare$2(a, b, options)); + for (const version of v) { + const included = satisfies$1(version, range, options); + if (included) { + prev = version; + if (!min) + min = version; + } else { + if (prev) { + set.push([min, prev]); + } + prev = null; + min = null; + } + } + if (min) + set.push([min, null]); + + const ranges = []; + for (const [min, max] of set) { + if (min === max) + ranges.push(min); + else if (!max && min === v[0]) + ranges.push('*'); + else if (!max) + ranges.push(`>=${min}`); + else if (min === v[0]) + ranges.push(`<=${max}`); + else + ranges.push(`${min} - ${max}`); + } + const simplified = ranges.join(' || '); + const original = typeof range.raw === 'string' ? range.raw : String(range); + return simplified.length < original.length ? simplified : range }; -var util$2 = { - stringReplaceAll: stringReplaceAll$1, - stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 +const Range = range$1; +const { ANY } = comparator$1; +const satisfies = satisfies_1; +const compare$1 = compare_1; + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else return false +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If any C is a = range, and GT or LT are set, return false +// - Else return true + +const subset = (sub, dom, options) => { + if (sub === dom) + return true + + sub = new Range(sub, options); + dom = new Range(dom, options); + let sawNonNull = false; + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options); + sawNonNull = sawNonNull || isSub !== null; + if (isSub) + continue OUTER + } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) + return false + } + return true }; -const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; -const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; -const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi; +const simpleSubset = (sub, dom, options) => { + if (sub === dom) + return true -const ESCAPES = new Map([ - ['n', '\n'], - ['r', '\r'], - ['t', '\t'], - ['b', '\b'], - ['f', '\f'], - ['v', '\v'], - ['0', '\0'], - ['\\', '\\'], - ['e', '\u001B'], - ['a', '\u0007'] -]); + if (sub.length === 1 && sub[0].semver === ANY) + return dom.length === 1 && dom[0].semver === ANY -function unescape(c) { - const u = c[0] === 'u'; - const bracket = c[1] === '{'; + const eqSet = new Set(); + let gt, lt; + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') + gt = higherGT(gt, c, options); + else if (c.operator === '<' || c.operator === '<=') + lt = lowerLT(lt, c, options); + else + eqSet.add(c.semver); + } - if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { - return String.fromCharCode(parseInt(c.slice(1), 16)); - } + if (eqSet.size > 1) + return null - if (u && bracket) { - return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); - } + let gtltComp; + if (gt && lt) { + gtltComp = compare$1(gt.semver, lt.semver, options); + if (gtltComp > 0) + return null + else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) + return null + } - return ESCAPES.get(c) || c; -} + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) + return null -function parseArguments(name, arguments_) { - const results = []; - const chunks = arguments_.trim().split(/\s*,\s*/g); - let matches; + if (lt && !satisfies(eq, String(lt), options)) + return null - for (const chunk of chunks) { - const number = Number(chunk); - if (!Number.isNaN(number)) { - results.push(number); - } else if ((matches = chunk.match(STRING_REGEX))) { - results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); - } else { - throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); - } - } + for (const c of dom) { + if (!satisfies(eq, String(c), options)) + return false + } - return results; -} + return true + } -function parseStyle(style) { - STYLE_REGEX.lastIndex = 0; + let higher, lower; + let hasDomLT, hasDomGT; + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='; + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='; + if (gt) { + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options); + if (higher === c && higher !== gt) + return false + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + return false + } + if (lt) { + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options); + if (lower === c && lower !== lt) + return false + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + return false + } + if (!c.operator && (lt || gt) && gtltComp !== 0) + return false + } - const results = []; - let matches; + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) + return false - while ((matches = STYLE_REGEX.exec(style)) !== null) { - const name = matches[1]; + if (lt && hasDomGT && !gt && gtltComp !== 0) + return false - if (matches[2]) { - const args = parseArguments(name, matches[2]); - results.push([name].concat(args)); - } else { - results.push([name]); - } - } + return true +}; - return results; -} +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) + return b + const comp = compare$1(a.semver, b.semver, options); + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a +}; + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) + return b + const comp = compare$1(a.semver, b.semver, options); + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a +}; + +var subset_1 = subset; + +// just pre-load all the stuff that index.js lazily exports +const internalRe = re$6.exports; +var semver$1 = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, + SemVer: semver$2, + compareIdentifiers: identifiers.compareIdentifiers, + rcompareIdentifiers: identifiers.rcompareIdentifiers, + parse: parse_1, + valid: valid_1, + clean: clean_1, + inc: inc_1, + diff: diff_1, + major: major_1, + minor: minor_1, + patch: patch_1, + prerelease: prerelease_1, + compare: compare_1, + rcompare: rcompare_1, + compareLoose: compareLoose_1, + compareBuild: compareBuild_1, + sort: sort_1, + rsort: rsort_1, + gt: gt_1, + lt: lt_1, + eq: eq_1, + neq: neq_1, + gte: gte_1, + lte: lte_1, + cmp: cmp_1, + coerce: coerce_1, + Comparator: comparator$1, + Range: range$1, + satisfies: satisfies_1, + toComparators: toComparators_1, + maxSatisfying: maxSatisfying_1, + minSatisfying: minSatisfying_1, + minVersion: minVersion_1, + validRange: valid, + outside: outside_1, + gtr: gtr_1, + ltr: ltr_1, + intersects: intersects_1, + simplifyRange: simplify, + subset: subset_1, +}; + +var semver = semver$1; + +var builtins = function ({ + version = process.version, + experimental = false +} = {}) { + var coreModules = [ + 'assert', + 'buffer', + 'child_process', + 'cluster', + 'console', + 'constants', + 'crypto', + 'dgram', + 'dns', + 'domain', + 'events', + 'fs', + 'http', + 'https', + 'module', + 'net', + 'os', + 'path', + 'punycode', + 'querystring', + 'readline', + 'repl', + 'stream', + 'string_decoder', + 'sys', + 'timers', + 'tls', + 'tty', + 'url', + 'util', + 'vm', + 'zlib' + ]; + + if (semver.lt(version, '6.0.0')) coreModules.push('freelist'); + if (semver.gte(version, '1.0.0')) coreModules.push('v8'); + if (semver.gte(version, '1.1.0')) coreModules.push('process'); + if (semver.gte(version, '8.0.0')) coreModules.push('inspector'); + if (semver.gte(version, '8.1.0')) coreModules.push('async_hooks'); + if (semver.gte(version, '8.4.0')) coreModules.push('http2'); + if (semver.gte(version, '8.5.0')) coreModules.push('perf_hooks'); + if (semver.gte(version, '10.0.0')) coreModules.push('trace_events'); -function buildStyle(chalk, styles) { - const enabled = {}; + if ( + semver.gte(version, '10.5.0') && + (experimental || semver.gte(version, '12.0.0')) + ) { + coreModules.push('worker_threads'); + } + if (semver.gte(version, '12.16.0') && experimental) { + coreModules.push('wasi'); + } + + return coreModules +}; - for (const layer of styles) { - for (const style of layer.styles) { - enabled[style[0]] = layer.inverse ? null : style.slice(1); - } - } +// Manually “tree shaken” from: - let current = chalk; - for (const [styleName, styles] of Object.entries(enabled)) { - if (!Array.isArray(styles)) { - continue; - } +const reader = {read: read$3}; +var packageJsonReader = reader; - if (!(styleName in current)) { - throw new Error(`Unknown Chalk style: ${styleName}`); - } +/** + * @param {string} jsonPath + * @returns {{string: string}} + */ +function read$3(jsonPath) { + return find$1(path$b.dirname(jsonPath)) +} - current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; - } +/** + * @param {string} dir + * @returns {{string: string}} + */ +function find$1(dir) { + try { + const string = require$$0$3.readFileSync( + path$b.toNamespacedPath(path$b.join(dir, 'package.json')), + 'utf8' + ); + return {string} + } catch (error) { + if (error.code === 'ENOENT') { + const parent = path$b.dirname(dir); + if (dir !== parent) return find$1(parent) + return {string: undefined} + // Throw all other errors. + /* c8 ignore next 4 */ + } - return current; + throw error + } } -var templates = (chalk, temporary) => { - const styles = []; - const chunks = []; - let chunk = []; +// Manually “tree shaken” from: - // eslint-disable-next-line max-params - temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { - if (escapeCharacter) { - chunk.push(unescape(escapeCharacter)); - } else if (style) { - const string = chunk.join(''); - chunk = []; - chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); - styles.push({inverse, styles: parseStyle(style)}); - } else if (close) { - if (styles.length === 0) { - throw new Error('Found extraneous } in Chalk template literal'); - } +const isWindows$1 = process.platform === 'win32'; - chunks.push(buildStyle(chalk, styles)(chunk.join(''))); - chunk = []; - styles.pop(); - } else { - chunk.push(character); - } - }); +const own$e = {}.hasOwnProperty; - chunks.push(chunk.join('')); +const codes = {}; - if (styles.length > 0) { - const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; - throw new Error(errMsg); - } +/** + * @typedef {(...args: unknown[]) => string} MessageFunction + */ - return chunks.join(''); -}; +/** @type {Map} */ +const messages = new Map(); +const nodeInternalPrefix = '__node_internal_'; +/** @type {number} */ +let userStackTraceLimit; -const ansiStyles = ansiStyles$1.exports; -const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1; -const { - stringReplaceAll, - stringEncaseCRLFWithFirstIndex -} = util$2; +codes.ERR_INVALID_MODULE_SPECIFIER = createError( + 'ERR_INVALID_MODULE_SPECIFIER', + /** + * @param {string} request + * @param {string} reason + * @param {string} [base] + */ + (request, reason, base = undefined) => { + return `Invalid module "${request}" ${reason}${ + base ? ` imported from ${base}` : '' + }` + }, + TypeError +); -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = [ - 'ansi', - 'ansi', - 'ansi256', - 'ansi16m' -]; +codes.ERR_INVALID_PACKAGE_CONFIG = createError( + 'ERR_INVALID_PACKAGE_CONFIG', + /** + * @param {string} path + * @param {string} [base] + * @param {string} [message] + */ + (path, base, message) => { + return `Invalid package config ${path}${ + base ? ` while importing ${base}` : '' + }${message ? `. ${message}` : ''}` + }, + Error +); -const styles = Object.create(null); +codes.ERR_INVALID_PACKAGE_TARGET = createError( + 'ERR_INVALID_PACKAGE_TARGET', + /** + * @param {string} pkgPath + * @param {string} key + * @param {unknown} target + * @param {boolean} [isImport=false] + * @param {string} [base] + */ + (pkgPath, key, target, isImport = false, base = undefined) => { + const relError = + typeof target === 'string' && + !isImport && + target.length > 0 && + !target.startsWith('./'); + if (key === '.') { + assert$2(isImport === false); + return ( + `Invalid "exports" main target ${JSON.stringify(target)} defined ` + + `in the package config ${pkgPath}package.json${ + base ? ` imported from ${base}` : '' + }${relError ? '; targets must start with "./"' : ''}` + ) + } -const applyOptions = (object, options = {}) => { - if (options.level > 3 || options.level < 0) { - throw new Error('The `level` option should be an integer from 0 to 3'); - } + return `Invalid "${ + isImport ? 'imports' : 'exports' + }" target ${JSON.stringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${ + base ? ` imported from ${base}` : '' + }${relError ? '; targets must start with "./"' : ''}` + }, + Error +); - // Detect level if not set manually - const colorLevel = stdoutColor ? stdoutColor.level : 0; - object.level = options.level === undefined ? colorLevel : options.level; -}; +codes.ERR_MODULE_NOT_FOUND = createError( + 'ERR_MODULE_NOT_FOUND', + /** + * @param {string} path + * @param {string} base + * @param {string} [type] + */ + (path, base, type = 'package') => { + return `Cannot find ${type} '${path}' imported from ${base}` + }, + Error +); -class ChalkClass { - constructor(options) { - return chalkFactory(options); - } -} +codes.ERR_PACKAGE_IMPORT_NOT_DEFINED = createError( + 'ERR_PACKAGE_IMPORT_NOT_DEFINED', + /** + * @param {string} specifier + * @param {string} packagePath + * @param {string} base + */ + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${ + packagePath ? ` in package ${packagePath}package.json` : '' + } imported from ${base}` + }, + TypeError +); -const chalkFactory = options => { - const chalk = {}; - applyOptions(chalk, options); +codes.ERR_PACKAGE_PATH_NOT_EXPORTED = createError( + 'ERR_PACKAGE_PATH_NOT_EXPORTED', + /** + * @param {string} pkgPath + * @param {string} subpath + * @param {string} [base] + */ + (pkgPath, subpath, base = undefined) => { + if (subpath === '.') + return `No "exports" main defined in ${pkgPath}package.json${ + base ? ` imported from ${base}` : '' + }` + return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${ + base ? ` imported from ${base}` : '' + }` + }, + Error +); - chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_); +codes.ERR_UNSUPPORTED_DIR_IMPORT = createError( + 'ERR_UNSUPPORTED_DIR_IMPORT', + "Directory import '%s' is not supported " + + 'resolving ES modules imported from %s', + Error +); - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); +codes.ERR_UNKNOWN_FILE_EXTENSION = createError( + 'ERR_UNKNOWN_FILE_EXTENSION', + 'Unknown file extension "%s" for %s', + TypeError +); - chalk.template.constructor = () => { - throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.'); - }; +codes.ERR_INVALID_ARG_VALUE = createError( + 'ERR_INVALID_ARG_VALUE', + /** + * @param {string} name + * @param {unknown} value + * @param {string} [reason='is invalid'] + */ + (name, value, reason = 'is invalid') => { + let inspected = inspect$1(value); - chalk.template.Instance = ChalkClass; + if (inspected.length > 128) { + inspected = `${inspected.slice(0, 128)}...`; + } - return chalk.template; -}; + const type = name.includes('.') ? 'property' : 'argument'; -function Chalk(options) { - return chalkFactory(options); + return `The ${type} '${name}' ${reason}. Received ${inspected}` + }, + TypeError + // Note: extra classes have been shaken out. + // , RangeError +); + +codes.ERR_UNSUPPORTED_ESM_URL_SCHEME = createError( + 'ERR_UNSUPPORTED_ESM_URL_SCHEME', + /** + * @param {URL} url + */ + (url) => { + let message = + 'Only file and data URLs are supported by the default ESM loader'; + + if (isWindows$1 && url.protocol.length === 2) { + message += '. On Windows, absolute paths must be valid file:// URLs'; + } + + message += `. Received protocol '${url.protocol}'`; + return message + }, + Error +); + +/** + * Utility function for registering the error codes. Only used here. Exported + * *only* to allow for testing. + * @param {string} sym + * @param {MessageFunction|string} value + * @param {ErrorConstructor} def + * @returns {new (...args: unknown[]) => Error} + */ +function createError(sym, value, def) { + // Special case for SystemError that formats the error message differently + // The SystemErrors only have SystemError as their base classes. + messages.set(sym, value); + + return makeNodeErrorWithCode(def, sym) } -for (const [styleName, style] of Object.entries(ansiStyles)) { - styles[styleName] = { - get() { - const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty); - Object.defineProperty(this, styleName, {value: builder}); - return builder; - } - }; +/** + * @param {ErrorConstructor} Base + * @param {string} key + * @returns {ErrorConstructor} + */ +function makeNodeErrorWithCode(Base, key) { + // @ts-expect-error It’s a Node error. + return NodeError + /** + * @param {unknown[]} args + */ + function NodeError(...args) { + const limit = Error.stackTraceLimit; + if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0; + const error = new Base(); + // Reset the limit and setting the name property. + if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = limit; + const message = getMessage(key, args, error); + Object.defineProperty(error, 'message', { + value: message, + enumerable: false, + writable: true, + configurable: true + }); + Object.defineProperty(error, 'toString', { + /** @this {Error} */ + value() { + return `${this.name} [${key}]: ${this.message}` + }, + enumerable: false, + writable: true, + configurable: true + }); + addCodeToName(error, Base.name, key); + // @ts-expect-error It’s a Node error. + error.code = key; + return error + } } -styles.visible = { - get() { - const builder = createBuilder(this, this._styler, true); - Object.defineProperty(this, 'visible', {value: builder}); - return builder; - } -}; +const addCodeToName = hideStackFrames( + /** + * @param {Error} error + * @param {string} name + * @param {string} code + * @returns {void} + */ + function (error, name, code) { + // Set the stack + error = captureLargerStackTrace(error); + // Add the error code to the name to include it in the stack trace. + error.name = `${name} [${code}]`; + // Access the stack to generate the error message including the error code + // from the name. + error.stack; // eslint-disable-line no-unused-expressions + // Reset the name to the actual name. + if (name === 'SystemError') { + Object.defineProperty(error, 'name', { + value: name, + enumerable: false, + writable: true, + configurable: true + }); + } else { + delete error.name; + } + } +); -const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256']; +/** + * @returns {boolean} + */ +function isErrorStackTraceLimitWritable() { + const desc = Object.getOwnPropertyDescriptor(Error, 'stackTraceLimit'); + if (desc === undefined) { + return Object.isExtensible(Error) + } -for (const model of usedModels) { - styles[model] = { - get() { - const {level} = this; - return function (...arguments_) { - const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler); - return createBuilder(this, styler, this._isEmpty); - }; - } - }; + return own$e.call(desc, 'writable') ? desc.writable : desc.set !== undefined } -for (const model of usedModels) { - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const {level} = this; - return function (...arguments_) { - const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler); - return createBuilder(this, styler, this._isEmpty); - }; - } - }; +/** + * This function removes unnecessary frames from Node.js core errors. + * @template {(...args: unknown[]) => unknown} T + * @type {(fn: T) => T} + */ +function hideStackFrames(fn) { + // We rename the functions that will be hidden to cut off the stacktrace + // at the outermost one + const hidden = nodeInternalPrefix + fn.name; + Object.defineProperty(fn, 'name', {value: hidden}); + return fn } -const proto$1 = Object.defineProperties(() => {}, { - ...styles, - level: { - enumerable: true, - get() { - return this._generator.level; - }, - set(level) { - this._generator.level = level; - } - } -}); +const captureLargerStackTrace = hideStackFrames( + /** + * @param {Error} error + * @returns {Error} + */ + function (error) { + const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable(); + if (stackTraceLimitIsWritable) { + userStackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = Number.POSITIVE_INFINITY; + } -const createStyler = (open, close, parent) => { - let openAll; - let closeAll; - if (parent === undefined) { - openAll = open; - closeAll = close; - } else { - openAll = parent.openAll + open; - closeAll = close + parent.closeAll; - } + Error.captureStackTrace(error); - return { - open, - close, - openAll, - closeAll, - parent - }; -}; + // Reset the limit + if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit; -const createBuilder = (self, _styler, _isEmpty) => { - const builder = (...arguments_) => { - // Single argument is hot path, implicit coercion is faster than anything - // eslint-disable-next-line no-implicit-coercion - return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' ')); - }; + return error + } +); - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto$1; // eslint-disable-line no-proto +/** + * @param {string} key + * @param {unknown[]} args + * @param {Error} self + * @returns {string} + */ +function getMessage(key, args, self) { + const message = messages.get(key); - builder._generator = self; - builder._styler = _styler; - builder._isEmpty = _isEmpty; + if (typeof message === 'function') { + assert$2( + message.length <= args.length, // Default options do not count. + `Code: ${key}; The provided arguments length (${args.length}) does not ` + + `match the required ones (${message.length}).` + ); + return Reflect.apply(message, self, args) + } - return builder; -}; + const expectedLength = (message.match(/%[dfijoOs]/g) || []).length; + assert$2( + expectedLength === args.length, + `Code: ${key}; The provided arguments length (${args.length}) does not ` + + `match the required ones (${expectedLength}).` + ); + if (args.length === 0) return message -const applyStyle = (self, string) => { - if (self.level <= 0 || !string) { - return self._isEmpty ? '' : string; - } + args.unshift(message); + return Reflect.apply(format$2, null, args) +} - let styler = self._styler; +// Manually “tree shaken” from: - if (styler === undefined) { - return string; - } +const {ERR_UNKNOWN_FILE_EXTENSION} = codes; - const {openAll, closeAll} = styler; - if (string.indexOf('\u001B') !== -1) { - while (styler !== undefined) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - string = stringReplaceAll(string, styler.close, styler.open); - - styler = styler.parent; - } - } - - // We can move both next actions out of loop, because remaining actions in loop won't have - // any/visible effect on parts we add here. Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92 - const lfIndex = string.indexOf('\n'); - if (lfIndex !== -1) { - string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex); - } - - return openAll + string + closeAll; +const extensionFormatMap = { + __proto__: null, + '.cjs': 'commonjs', + '.js': 'module', + '.mjs': 'module' }; -let template; -const chalkTag = (chalk, ...strings) => { - const [firstString] = strings; - - if (!Array.isArray(firstString)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return strings.join(' '); - } - - const arguments_ = strings.slice(1); - const parts = [firstString.raw[0]]; - - for (let i = 1; i < firstString.length; i++) { - parts.push( - String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'), - String(firstString.raw[i]) - ); - } +/** + * @param {string} url + * @returns {{format: string|null}} + */ +function defaultGetFormat(url) { + if (url.startsWith('node:')) { + return {format: 'builtin'} + } - if (template === undefined) { - template = templates; - } + const parsed = new URL$1(url); - return template(chalk, parts.join('')); -}; + if (parsed.protocol === 'data:') { + const {1: mime} = /^([^/]+\/[^;,]+)[^,]*?(;base64)?,/.exec( + parsed.pathname + ) || [null, null]; + const format = mime === 'text/javascript' ? 'module' : null; + return {format} + } -Object.defineProperties(Chalk.prototype, styles); + if (parsed.protocol === 'file:') { + const ext = path$b.extname(parsed.pathname); + /** @type {string} */ + let format; + if (ext === '.js') { + format = getPackageType(parsed.href) === 'module' ? 'module' : 'commonjs'; + } else { + format = extensionFormatMap[ext]; + } -const chalk$1 = Chalk(); // eslint-disable-line new-cap -chalk$1.supportsColor = stdoutColor; -chalk$1.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap -chalk$1.stderr.supportsColor = stderrColor; + if (!format) { + throw new ERR_UNKNOWN_FILE_EXTENSION(ext, fileURLToPath(url)) + } -// For TypeScript -chalk$1.Level = { - None: 0, - Basic: 1, - Ansi256: 2, - TrueColor: 3, - 0: 'None', - 1: 'Basic', - 2: 'Ansi256', - 3: 'TrueColor' -}; + return {format: format || null} + } -var source$1 = chalk$1; + return {format: null} +} -var chokidar$1 = {}; +// Manually “tree shaken” from: -var utils$7 = {}; +const listOfBuiltins = builtins(); -const path$3 = require$$0__default$2['default']; -const WIN_SLASH = '\\\\/'; -const WIN_NO_SLASH = `[^${WIN_SLASH}]`; +const { + ERR_INVALID_MODULE_SPECIFIER, + ERR_INVALID_PACKAGE_CONFIG, + ERR_INVALID_PACKAGE_TARGET, + ERR_MODULE_NOT_FOUND, + ERR_PACKAGE_IMPORT_NOT_DEFINED, + ERR_PACKAGE_PATH_NOT_EXPORTED, + ERR_UNSUPPORTED_DIR_IMPORT, + ERR_UNSUPPORTED_ESM_URL_SCHEME, + ERR_INVALID_ARG_VALUE +} = codes; + +const own$d = {}.hasOwnProperty; + +const DEFAULT_CONDITIONS = Object.freeze(['node', 'import']); +const DEFAULT_CONDITIONS_SET = new Set(DEFAULT_CONDITIONS); + +const invalidSegmentRegEx = /(^|\\|\/)(\.\.?|node_modules)(\\|\/|$)/; +const patternRegEx = /\*/g; +const encodedSepRegEx = /%2f|%2c/i; +/** @type {Set} */ +const emittedPackageWarnings = new Set(); +/** @type {Map} */ +const packageJsonCache = new Map(); + +/** + * @param {string} match + * @param {URL} pjsonUrl + * @param {boolean} isExports + * @param {URL} base + * @returns {void} + */ +function emitFolderMapDeprecation(match, pjsonUrl, isExports, base) { + const pjsonPath = fileURLToPath(pjsonUrl); + + if (emittedPackageWarnings.has(pjsonPath + '|' + match)) return + emittedPackageWarnings.add(pjsonPath + '|' + match); + process.emitWarning( + `Use of deprecated folder mapping "${match}" in the ${ + isExports ? '"exports"' : '"imports"' + } field module resolution of the package at ${pjsonPath}${ + base ? ` imported from ${fileURLToPath(base)}` : '' + }.\n` + + `Update this package.json to use a subpath pattern like "${match}*".`, + 'DeprecationWarning', + 'DEP0148' + ); +} /** - * Posix glob regex + * @param {URL} url + * @param {URL} packageJsonUrl + * @param {URL} base + * @param {unknown} [main] + * @returns {void} */ - -const DOT_LITERAL = '\\.'; -const PLUS_LITERAL = '\\+'; -const QMARK_LITERAL = '\\?'; -const SLASH_LITERAL = '\\/'; -const ONE_CHAR = '(?=.)'; -const QMARK = '[^/]'; -const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; -const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; -const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; -const NO_DOT = `(?!${DOT_LITERAL})`; -const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; -const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; -const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; -const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; -const STAR$1 = `${QMARK}*?`; - -const POSIX_CHARS = { - DOT_LITERAL, - PLUS_LITERAL, - QMARK_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - QMARK, - END_ANCHOR, - DOTS_SLASH, - NO_DOT, - NO_DOTS, - NO_DOT_SLASH, - NO_DOTS_SLASH, - QMARK_NO_DOT, - STAR: STAR$1, - START_ANCHOR -}; +function emitLegacyIndexDeprecation(url, packageJsonUrl, base, main) { + const {format} = defaultGetFormat(url.href); + if (format !== 'module') return + const path = fileURLToPath(url.href); + const pkgPath = fileURLToPath(new URL$1('.', packageJsonUrl)); + const basePath = fileURLToPath(base); + if (main) + process.emitWarning( + `Package ${pkgPath} has a "main" field set to ${JSON.stringify(main)}, ` + + `excluding the full filename and extension to the resolved file at "${path.slice( + pkgPath.length + )}", imported from ${basePath}.\n Automatic extension resolution of the "main" field is` + + 'deprecated for ES modules.', + 'DeprecationWarning', + 'DEP0151' + ); + else + process.emitWarning( + `No "main" or "exports" field defined in the package.json for ${pkgPath} resolving the main entry point "${path.slice( + pkgPath.length + )}", imported from ${basePath}.\nDefault "index" lookups for the main are deprecated for ES modules.`, + 'DeprecationWarning', + 'DEP0151' + ); +} /** - * Windows glob regex + * @param {string[]} [conditions] + * @returns {Set} */ +function getConditionsSet(conditions) { + if (conditions !== undefined && conditions !== DEFAULT_CONDITIONS) { + if (!Array.isArray(conditions)) { + throw new ERR_INVALID_ARG_VALUE( + 'conditions', + conditions, + 'expected an array' + ) + } -const WINDOWS_CHARS = { - ...POSIX_CHARS, + return new Set(conditions) + } - SLASH_LITERAL: `[${WIN_SLASH}]`, - QMARK: WIN_NO_SLASH, - STAR: `${WIN_NO_SLASH}*?`, - DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, - NO_DOT: `(?!${DOT_LITERAL})`, - NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, - NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, - NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, - QMARK_NO_DOT: `[^.${WIN_SLASH}]`, - START_ANCHOR: `(?:^|[${WIN_SLASH}])`, - END_ANCHOR: `(?:[${WIN_SLASH}]|$)` -}; + return DEFAULT_CONDITIONS_SET +} /** - * POSIX Bracket Regex + * @param {string} path + * @returns {Stats} */ +function tryStatSync(path) { + // Note: from Node 15 onwards we can use `throwIfNoEntry: false` instead. + try { + return statSync(path) + } catch { + return new Stats() + } +} -const POSIX_REGEX_SOURCE$1 = { - alnum: 'a-zA-Z0-9', - alpha: 'a-zA-Z', - ascii: '\\x00-\\x7F', - blank: ' \\t', - cntrl: '\\x00-\\x1F\\x7F', - digit: '0-9', - graph: '\\x21-\\x7E', - lower: 'a-z', - print: '\\x20-\\x7E ', - punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', - space: ' \\t\\r\\n\\v\\f', - upper: 'A-Z', - word: 'A-Za-z0-9_', - xdigit: 'A-Fa-f0-9' -}; - -var constants$5 = { - MAX_LENGTH: 1024 * 64, - POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1, - - // regular expressions - REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, - REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, - REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, - REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, - REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, - REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, - - // Replace globs with equivalent patterns to reduce parsing time. - REPLACEMENTS: { - '***': '*', - '**/**': '**', - '**/**/**': '**' - }, - - // Digits - CHAR_0: 48, /* 0 */ - CHAR_9: 57, /* 9 */ - - // Alphabet chars. - CHAR_UPPERCASE_A: 65, /* A */ - CHAR_LOWERCASE_A: 97, /* a */ - CHAR_UPPERCASE_Z: 90, /* Z */ - CHAR_LOWERCASE_Z: 122, /* z */ +/** + * @param {string} path + * @param {string|URL} specifier Note: `specifier` is actually optional, not base. + * @param {URL} [base] + * @returns {PackageConfig} + */ +function getPackageConfig(path, specifier, base) { + const existing = packageJsonCache.get(path); + if (existing !== undefined) { + return existing + } + + const source = packageJsonReader.read(path).string; + + if (source === undefined) { + /** @type {PackageConfig} */ + const packageConfig = { + pjsonPath: path, + exists: false, + main: undefined, + name: undefined, + type: 'none', + exports: undefined, + imports: undefined + }; + packageJsonCache.set(path, packageConfig); + return packageConfig + } - CHAR_LEFT_PARENTHESES: 40, /* ( */ - CHAR_RIGHT_PARENTHESES: 41, /* ) */ + /** @type {Object.} */ + let packageJson; + try { + packageJson = JSON.parse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier), + error.message + ) + } - CHAR_ASTERISK: 42, /* * */ + const {exports, imports, main, name, type} = packageJson; - // Non-alphabetic chars. - CHAR_AMPERSAND: 38, /* & */ - CHAR_AT: 64, /* @ */ - CHAR_BACKWARD_SLASH: 92, /* \ */ - CHAR_CARRIAGE_RETURN: 13, /* \r */ - CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ - CHAR_COLON: 58, /* : */ - CHAR_COMMA: 44, /* , */ - CHAR_DOT: 46, /* . */ - CHAR_DOUBLE_QUOTE: 34, /* " */ - CHAR_EQUAL: 61, /* = */ - CHAR_EXCLAMATION_MARK: 33, /* ! */ - CHAR_FORM_FEED: 12, /* \f */ - CHAR_FORWARD_SLASH: 47, /* / */ - CHAR_GRAVE_ACCENT: 96, /* ` */ - CHAR_HASH: 35, /* # */ - CHAR_HYPHEN_MINUS: 45, /* - */ - CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ - CHAR_LEFT_CURLY_BRACE: 123, /* { */ - CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ - CHAR_LINE_FEED: 10, /* \n */ - CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ - CHAR_PERCENT: 37, /* % */ - CHAR_PLUS: 43, /* + */ - CHAR_QUESTION_MARK: 63, /* ? */ - CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ - CHAR_RIGHT_CURLY_BRACE: 125, /* } */ - CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ - CHAR_SEMICOLON: 59, /* ; */ - CHAR_SINGLE_QUOTE: 39, /* ' */ - CHAR_SPACE: 32, /* */ - CHAR_TAB: 9, /* \t */ - CHAR_UNDERSCORE: 95, /* _ */ - CHAR_VERTICAL_LINE: 124, /* | */ - CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + /** @type {PackageConfig} */ + const packageConfig = { + pjsonPath: path, + exists: true, + main: typeof main === 'string' ? main : undefined, + name: typeof name === 'string' ? name : undefined, + type: type === 'module' || type === 'commonjs' ? type : 'none', + // @ts-expect-error Assume `Object.`. + exports, + // @ts-expect-error Assume `Object.`. + imports: imports && typeof imports === 'object' ? imports : undefined + }; + packageJsonCache.set(path, packageConfig); + return packageConfig +} - SEP: path$3.sep, +/** + * @param {URL|string} resolved + * @returns {PackageConfig} + */ +function getPackageScopeConfig(resolved) { + let packageJsonUrl = new URL$1('./package.json', resolved); - /** - * Create EXTGLOB_CHARS - */ + while (true) { + const packageJsonPath = packageJsonUrl.pathname; - extglobChars(chars) { - return { - '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, - '?': { type: 'qmark', open: '(?:', close: ')?' }, - '+': { type: 'plus', open: '(?:', close: ')+' }, - '*': { type: 'star', open: '(?:', close: ')*' }, - '@': { type: 'at', open: '(?:', close: ')' } - }; - }, + if (packageJsonPath.endsWith('node_modules/package.json')) break - /** - * Create GLOB_CHARS - */ + const packageConfig = getPackageConfig( + fileURLToPath(packageJsonUrl), + resolved + ); + if (packageConfig.exists) return packageConfig + + const lastPackageJsonUrl = packageJsonUrl; + packageJsonUrl = new URL$1('../package.json', packageJsonUrl); + + // Terminates at root where ../package.json equals ../../package.json + // (can't just check "/package.json" for Windows support). + if (packageJsonUrl.pathname === lastPackageJsonUrl.pathname) break + } + + const packageJsonPath = fileURLToPath(packageJsonUrl); + /** @type {PackageConfig} */ + const packageConfig = { + pjsonPath: packageJsonPath, + exists: false, + main: undefined, + name: undefined, + type: 'none', + exports: undefined, + imports: undefined + }; + packageJsonCache.set(packageJsonPath, packageConfig); + return packageConfig +} - globChars(win32) { - return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; +/** + * Legacy CommonJS main resolution: + * 1. let M = pkg_url + (json main field) + * 2. TRY(M, M.js, M.json, M.node) + * 3. TRY(M/index.js, M/index.json, M/index.node) + * 4. TRY(pkg_url/index.js, pkg_url/index.json, pkg_url/index.node) + * 5. NOT_FOUND + * + * @param {URL} url + * @returns {boolean} + */ +function fileExists(url) { + return tryStatSync(fileURLToPath(url)).isFile() +} + +/** + * @param {URL} packageJsonUrl + * @param {PackageConfig} packageConfig + * @param {URL} base + * @returns {URL} + */ +function legacyMainResolve(packageJsonUrl, packageConfig, base) { + /** @type {URL} */ + let guess; + if (packageConfig.main !== undefined) { + guess = new URL$1(`./${packageConfig.main}`, packageJsonUrl); + // Note: fs check redundances will be handled by Descriptor cache here. + if (fileExists(guess)) return guess + + const tries = [ + `./${packageConfig.main}.js`, + `./${packageConfig.main}.json`, + `./${packageConfig.main}.node`, + `./${packageConfig.main}/index.js`, + `./${packageConfig.main}/index.json`, + `./${packageConfig.main}/index.node` + ]; + let i = -1; + + while (++i < tries.length) { + guess = new URL$1(tries[i], packageJsonUrl); + if (fileExists(guess)) break + guess = undefined; + } + + if (guess) { + emitLegacyIndexDeprecation( + guess, + packageJsonUrl, + base, + packageConfig.main + ); + return guess + } + // Fallthrough. } -}; -(function (exports) { + const tries = ['./index.js', './index.json', './index.node']; + let i = -1; -const path = require$$0__default$2['default']; -const win32 = process.platform === 'win32'; -const { - REGEX_BACKSLASH, - REGEX_REMOVE_BACKSLASH, - REGEX_SPECIAL_CHARS, - REGEX_SPECIAL_CHARS_GLOBAL -} = constants$5; + while (++i < tries.length) { + guess = new URL$1(tries[i], packageJsonUrl); + if (fileExists(guess)) break + guess = undefined; + } -exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); -exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); -exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); -exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); -exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + if (guess) { + emitLegacyIndexDeprecation(guess, packageJsonUrl, base, packageConfig.main); + return guess + } -exports.removeBackslashes = str => { - return str.replace(REGEX_REMOVE_BACKSLASH, match => { - return match === '\\' ? '' : match; - }); -}; + // Not found. + throw new ERR_MODULE_NOT_FOUND( + fileURLToPath(new URL$1('.', packageJsonUrl)), + fileURLToPath(base) + ) +} -exports.supportsLookbehinds = () => { - const segs = process.version.slice(1).split('.').map(Number); - if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { - return true; - } - return false; -}; +/** + * @param {URL} resolved + * @param {URL} base + * @returns {URL} + */ +function finalizeResolution(resolved, base) { + if (encodedSepRegEx.test(resolved.pathname)) + throw new ERR_INVALID_MODULE_SPECIFIER( + resolved.pathname, + 'must not include encoded "/" or "\\" characters', + fileURLToPath(base) + ) -exports.isWindows = options => { - if (options && typeof options.windows === 'boolean') { - return options.windows; - } - return win32 === true || path.sep === '\\'; -}; + const path = fileURLToPath(resolved); -exports.escapeLast = (input, char, lastIdx) => { - const idx = input.lastIndexOf(char, lastIdx); - if (idx === -1) return input; - if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); - return `${input.slice(0, idx)}\\${input.slice(idx)}`; -}; + const stats = tryStatSync(path.endsWith('/') ? path.slice(-1) : path); -exports.removePrefix = (input, state = {}) => { - let output = input; - if (output.startsWith('./')) { - output = output.slice(2); - state.prefix = './'; + if (stats.isDirectory()) { + const error = new ERR_UNSUPPORTED_DIR_IMPORT(path, fileURLToPath(base)); + // @ts-expect-error Add this for `import.meta.resolve`. + error.url = String(resolved); + throw error } - return output; -}; - -exports.wrapOutput = (input, state = {}, options = {}) => { - const prepend = options.contains ? '' : '^'; - const append = options.contains ? '' : '$'; - let output = `${prepend}(?:${input})${append}`; - if (state.negated === true) { - output = `(?:^(?!${output}).*$)`; + if (!stats.isFile()) { + throw new ERR_MODULE_NOT_FOUND( + path || resolved.pathname, + base && fileURLToPath(base), + 'module' + ) } - return output; -}; -}(utils$7)); -const utils$6 = utils$7; -const { - CHAR_ASTERISK: CHAR_ASTERISK$1, /* * */ - CHAR_AT, /* @ */ - CHAR_BACKWARD_SLASH, /* \ */ - CHAR_COMMA: CHAR_COMMA$2, /* , */ - CHAR_DOT: CHAR_DOT$1, /* . */ - CHAR_EXCLAMATION_MARK, /* ! */ - CHAR_FORWARD_SLASH, /* / */ - CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */ - CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */ - CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$2, /* [ */ - CHAR_PLUS, /* + */ - CHAR_QUESTION_MARK, /* ? */ - CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */ - CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */ - CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$2 /* ] */ -} = constants$5; + return resolved +} -const isPathSeparator = code => { - return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; -}; +/** + * @param {string} specifier + * @param {URL?} packageJsonUrl + * @param {URL} base + * @returns {never} + */ +function throwImportNotDefined(specifier, packageJsonUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJsonUrl && fileURLToPath(new URL$1('.', packageJsonUrl)), + fileURLToPath(base) + ) +} -const depth = token => { - if (token.isPrefix !== true) { - token.depth = token.isGlobstar ? Infinity : 1; - } -}; +/** + * @param {string} subpath + * @param {URL} packageJsonUrl + * @param {URL} base + * @returns {never} + */ +function throwExportsNotFound(subpath, packageJsonUrl, base) { + throw new ERR_PACKAGE_PATH_NOT_EXPORTED( + fileURLToPath(new URL$1('.', packageJsonUrl)), + subpath, + base && fileURLToPath(base) + ) +} /** - * Quickly scans a glob pattern and returns an object with a handful of - * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), - * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not - * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). - * - * ```js - * const pm = require('picomatch'); - * console.log(pm.scan('foo/bar/*.js')); - * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } - * ``` - * @param {String} `str` - * @param {Object} `options` - * @return {Object} Returns an object with tokens and regex source string. - * @api public + * @param {string} subpath + * @param {URL} packageJsonUrl + * @param {boolean} internal + * @param {URL} [base] + * @returns {never} */ +function throwInvalidSubpath(subpath, packageJsonUrl, internal, base) { + const reason = `request is not a valid subpath for the "${ + internal ? 'imports' : 'exports' + }" resolution of ${fileURLToPath(packageJsonUrl)}`; -const scan$1 = (input, options) => { - const opts = options || {}; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && fileURLToPath(base) + ) +} - const length = input.length - 1; - const scanToEnd = opts.parts === true || opts.scanToEnd === true; - const slashes = []; - const tokens = []; - const parts = []; +/** + * @param {string} subpath + * @param {unknown} target + * @param {URL} packageJsonUrl + * @param {boolean} internal + * @param {URL} [base] + * @returns {never} + */ +function throwInvalidPackageTarget( + subpath, + target, + packageJsonUrl, + internal, + base +) { + target = + typeof target === 'object' && target !== null + ? JSON.stringify(target, null, '') + : `${target}`; + + throw new ERR_INVALID_PACKAGE_TARGET( + fileURLToPath(new URL$1('.', packageJsonUrl)), + subpath, + target, + internal, + base && fileURLToPath(base) + ) +} - let str = input; - let index = -1; - let start = 0; - let lastIndex = 0; - let isBrace = false; - let isBracket = false; - let isGlob = false; - let isExtglob = false; - let isGlobstar = false; - let braceEscaped = false; - let backslashes = false; - let negated = false; - let negatedExtglob = false; - let finished = false; - let braces = 0; - let prev; - let code; - let token = { value: '', depth: 0, isGlob: false }; +/** + * @param {string} target + * @param {string} subpath + * @param {string} match + * @param {URL} packageJsonUrl + * @param {URL} base + * @param {boolean} pattern + * @param {boolean} internal + * @param {Set} conditions + * @returns {URL} + */ +function resolvePackageTargetString( + target, + subpath, + match, + packageJsonUrl, + base, + pattern, + internal, + conditions +) { + if (subpath !== '' && !pattern && target[target.length - 1] !== '/') + throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base); - const eos = () => index >= length; - const peek = () => str.charCodeAt(index + 1); - const advance = () => { - prev = code; - return str.charCodeAt(++index); - }; + if (!target.startsWith('./')) { + if (internal && !target.startsWith('../') && !target.startsWith('/')) { + let isURL = false; - while (index < length) { - code = advance(); - let next; + try { + new URL$1(target); + isURL = true; + } catch {} - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - code = advance(); + if (!isURL) { + const exportTarget = pattern + ? target.replace(patternRegEx, subpath) + : target + subpath; - if (code === CHAR_LEFT_CURLY_BRACE$1) { - braceEscaped = true; + return packageResolve(exportTarget, packageJsonUrl, conditions) } - continue; } - if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE$1) { - braces++; + throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base); + } - while (eos() !== true && (code = advance())) { - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - advance(); - continue; - } + if (invalidSegmentRegEx.test(target.slice(2))) + throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base); - if (code === CHAR_LEFT_CURLY_BRACE$1) { - braces++; - continue; - } + const resolved = new URL$1(target, packageJsonUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL$1('.', packageJsonUrl).pathname; - if (braceEscaped !== true && code === CHAR_DOT$1 && (code = advance()) === CHAR_DOT$1) { - isBrace = token.isBrace = true; - isGlob = token.isGlob = true; - finished = true; + if (!resolvedPath.startsWith(packagePath)) + throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base); - if (scanToEnd === true) { - continue; - } + if (subpath === '') return resolved - break; - } + if (invalidSegmentRegEx.test(subpath)) + throwInvalidSubpath(match + subpath, packageJsonUrl, internal, base); - if (braceEscaped !== true && code === CHAR_COMMA$2) { - isBrace = token.isBrace = true; - isGlob = token.isGlob = true; - finished = true; + if (pattern) return new URL$1(resolved.href.replace(patternRegEx, subpath)) + return new URL$1(subpath, resolved) +} - if (scanToEnd === true) { - continue; - } +/** + * @param {string} key + * @returns {boolean} + */ +function isArrayIndex(key) { + const keyNumber = Number(key); + if (`${keyNumber}` !== key) return false + return keyNumber >= 0 && keyNumber < 0xffff_ffff +} + +/** + * @param {URL} packageJsonUrl + * @param {unknown} target + * @param {string} subpath + * @param {string} packageSubpath + * @param {URL} base + * @param {boolean} pattern + * @param {boolean} internal + * @param {Set} conditions + * @returns {URL} + */ +function resolvePackageTarget( + packageJsonUrl, + target, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions +) { + if (typeof target === 'string') { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJsonUrl, + base, + pattern, + internal, + conditions + ) + } - break; - } + if (Array.isArray(target)) { + /** @type {unknown[]} */ + const targetList = target; + if (targetList.length === 0) return null - if (code === CHAR_RIGHT_CURLY_BRACE$1) { - braces--; + /** @type {Error} */ + let lastException; + let i = -1; - if (braces === 0) { - braceEscaped = false; - isBrace = token.isBrace = true; - finished = true; - break; - } - } + while (++i < targetList.length) { + const targetItem = targetList[i]; + /** @type {URL} */ + let resolved; + try { + resolved = resolvePackageTarget( + packageJsonUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (error) { + lastException = error; + if (error.code === 'ERR_INVALID_PACKAGE_TARGET') continue + throw error } - if (scanToEnd === true) { - continue; + if (resolved === undefined) continue + + if (resolved === null) { + lastException = null; + continue } - break; + return resolved } - if (code === CHAR_FORWARD_SLASH) { - slashes.push(index); - tokens.push(token); - token = { value: '', depth: 0, isGlob: false }; + if (lastException === undefined || lastException === null) { + // @ts-expect-error The diff between `undefined` and `null` seems to be + // intentional + return lastException + } - if (finished === true) continue; - if (prev === CHAR_DOT$1 && index === (start + 1)) { - start += 2; - continue; + throw lastException + } + + if (typeof target === 'object' && target !== null) { + const keys = Object.getOwnPropertyNames(target); + let i = -1; + + while (++i < keys.length) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJsonUrl), + base, + '"exports" cannot contain numeric property keys.' + ) } + } - lastIndex = index + 1; - continue; + i = -1; + + while (++i < keys.length) { + const key = keys[i]; + if (key === 'default' || (conditions && conditions.has(key))) { + /** @type {unknown} */ + const conditionalTarget = target[key]; + const resolved = resolvePackageTarget( + packageJsonUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolved === undefined) continue + return resolved + } } - if (opts.noext !== true) { - const isExtglobChar = code === CHAR_PLUS - || code === CHAR_AT - || code === CHAR_ASTERISK$1 - || code === CHAR_QUESTION_MARK - || code === CHAR_EXCLAMATION_MARK; + return undefined + } - if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES$1) { - isGlob = token.isGlob = true; - isExtglob = token.isExtglob = true; - finished = true; - if (code === CHAR_EXCLAMATION_MARK && index === start) { - negatedExtglob = true; - } + if (target === null) { + return null + } - if (scanToEnd === true) { - while (eos() !== true && (code = advance())) { - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - code = advance(); - continue; - } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJsonUrl, + internal, + base + ); +} - if (code === CHAR_RIGHT_PARENTHESES$1) { - isGlob = token.isGlob = true; - finished = true; - break; - } - } - continue; - } - break; - } - } - - if (code === CHAR_ASTERISK$1) { - if (prev === CHAR_ASTERISK$1) isGlobstar = token.isGlobstar = true; - isGlob = token.isGlob = true; - finished = true; +/** + * @param {unknown} exports + * @param {URL} packageJsonUrl + * @param {URL} base + * @returns {boolean} + */ +function isConditionalExportsMainSugar(exports, packageJsonUrl, base) { + if (typeof exports === 'string' || Array.isArray(exports)) return true + if (typeof exports !== 'object' || exports === null) return false - if (scanToEnd === true) { - continue; - } - break; + const keys = Object.getOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + let j = -1; + while (++j < keys.length) { + const key = keys[j]; + const curIsConditionalSugar = key === '' || key[0] !== '.'; + if (i++ === 0) { + isConditionalSugar = curIsConditionalSugar; + } else if (isConditionalSugar !== curIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJsonUrl), + base, + '"exports" cannot contain some keys starting with \'.\' and some not.' + + ' The exports object must either be an object of package subpath keys' + + ' or an object of main entry condition name keys only.' + ) } + } - if (code === CHAR_QUESTION_MARK) { - isGlob = token.isGlob = true; - finished = true; - - if (scanToEnd === true) { - continue; - } - break; - } + return isConditionalSugar +} - if (code === CHAR_LEFT_SQUARE_BRACKET$2) { - while (eos() !== true && (next = advance())) { - if (next === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - advance(); - continue; - } +/** + * @param {URL} packageJsonUrl + * @param {string} packageSubpath + * @param {Object.} packageConfig + * @param {URL} base + * @param {Set} conditions + * @returns {ResolveObject} + */ +function packageExportsResolve( + packageJsonUrl, + packageSubpath, + packageConfig, + base, + conditions +) { + let exports = packageConfig.exports; + if (isConditionalExportsMainSugar(exports, packageJsonUrl, base)) + exports = {'.': exports}; + + if (own$d.call(exports, packageSubpath)) { + const target = exports[packageSubpath]; + const resolved = resolvePackageTarget( + packageJsonUrl, + target, + '', + packageSubpath, + base, + false, + false, + conditions + ); + if (resolved === null || resolved === undefined) + throwExportsNotFound(packageSubpath, packageJsonUrl, base); + return {resolved, exact: true} + } - if (next === CHAR_RIGHT_SQUARE_BRACKET$2) { - isBracket = token.isBracket = true; - isGlob = token.isGlob = true; - finished = true; - break; - } - } + let bestMatch = ''; + const keys = Object.getOwnPropertyNames(exports); + let i = -1; - if (scanToEnd === true) { - continue; - } + while (++i < keys.length) { + const key = keys[i]; + if ( + key[key.length - 1] === '*' && + packageSubpath.startsWith(key.slice(0, -1)) && + packageSubpath.length >= key.length && + key.length > bestMatch.length + ) { + bestMatch = key; + } else if ( + key[key.length - 1] === '/' && + packageSubpath.startsWith(key) && + key.length > bestMatch.length + ) { + bestMatch = key; + } + } + + if (bestMatch) { + const target = exports[bestMatch]; + const pattern = bestMatch[bestMatch.length - 1] === '*'; + const subpath = packageSubpath.slice(bestMatch.length - (pattern ? 1 : 0)); + const resolved = resolvePackageTarget( + packageJsonUrl, + target, + subpath, + bestMatch, + base, + pattern, + false, + conditions + ); + if (resolved === null || resolved === undefined) + throwExportsNotFound(packageSubpath, packageJsonUrl, base); + if (!pattern) + emitFolderMapDeprecation(bestMatch, packageJsonUrl, true, base); + return {resolved, exact: pattern} + } - break; - } + throwExportsNotFound(packageSubpath, packageJsonUrl, base); +} - if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { - negated = token.negated = true; - start++; - continue; - } +/** + * @param {string} name + * @param {URL} base + * @param {Set} [conditions] + * @returns {ResolveObject} + */ +function packageImportsResolve(name, base, conditions) { + if (name === '#' || name.startsWith('#/')) { + const reason = 'is not a valid internal imports specifier name'; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)) + } + + /** @type {URL} */ + let packageJsonUrl; + + const packageConfig = getPackageScopeConfig(base); + + if (packageConfig.exists) { + packageJsonUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (own$d.call(imports, name)) { + const resolved = resolvePackageTarget( + packageJsonUrl, + imports[name], + '', + name, + base, + false, + true, + conditions + ); + if (resolved !== null) return {resolved, exact: true} + } else { + let bestMatch = ''; + const keys = Object.getOwnPropertyNames(imports); + let i = -1; - if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES$1) { - isGlob = token.isGlob = true; + while (++i < keys.length) { + const key = keys[i]; - if (scanToEnd === true) { - while (eos() !== true && (code = advance())) { - if (code === CHAR_LEFT_PARENTHESES$1) { - backslashes = token.backslashes = true; - code = advance(); - continue; + if ( + key[key.length - 1] === '*' && + name.startsWith(key.slice(0, -1)) && + name.length >= key.length && + key.length > bestMatch.length + ) { + bestMatch = key; + } else if ( + key[key.length - 1] === '/' && + name.startsWith(key) && + key.length > bestMatch.length + ) { + bestMatch = key; } + } - if (code === CHAR_RIGHT_PARENTHESES$1) { - finished = true; - break; + if (bestMatch) { + const target = imports[bestMatch]; + const pattern = bestMatch[bestMatch.length - 1] === '*'; + const subpath = name.slice(bestMatch.length - (pattern ? 1 : 0)); + const resolved = resolvePackageTarget( + packageJsonUrl, + target, + subpath, + bestMatch, + base, + pattern, + true, + conditions + ); + if (resolved !== null) { + if (!pattern) + emitFolderMapDeprecation(bestMatch, packageJsonUrl, false, base); + return {resolved, exact: pattern} } } - continue; } - break; } + } - if (isGlob === true) { - finished = true; + throwImportNotDefined(name, packageJsonUrl, base); +} - if (scanToEnd === true) { - continue; - } +/** + * @param {string} url + * @returns {PackageType} + */ +function getPackageType(url) { + const packageConfig = getPackageScopeConfig(url); + return packageConfig.type +} - break; +/** + * @param {string} specifier + * @param {URL} base + */ +function parsePackageName(specifier, base) { + let separatorIndex = specifier.indexOf('/'); + let validPackageName = true; + let isScoped = false; + if (specifier[0] === '@') { + isScoped = true; + if (separatorIndex === -1 || specifier.length === 0) { + validPackageName = false; + } else { + separatorIndex = specifier.indexOf('/', separatorIndex + 1); } } - if (opts.noext === true) { - isExtglob = false; - isGlob = false; - } - - let base = str; - let prefix = ''; - let glob = ''; + const packageName = + separatorIndex === -1 ? specifier : specifier.slice(0, separatorIndex); - if (start > 0) { - prefix = str.slice(0, start); - str = str.slice(start); - lastIndex -= start; + // Package name cannot have leading . and cannot have percent-encoding or + // separators. + let i = -1; + while (++i < packageName.length) { + if (packageName[i] === '%' || packageName[i] === '\\') { + validPackageName = false; + break + } } - if (base && isGlob === true && lastIndex > 0) { - base = str.slice(0, lastIndex); - glob = str.slice(lastIndex); - } else if (isGlob === true) { - base = ''; - glob = str; - } else { - base = str; + if (!validPackageName) { + throw new ERR_INVALID_MODULE_SPECIFIER( + specifier, + 'is not a valid package name', + fileURLToPath(base) + ) } - if (base && base !== '' && base !== '/' && base !== str) { - if (isPathSeparator(base.charCodeAt(base.length - 1))) { - base = base.slice(0, -1); - } - } + const packageSubpath = + '.' + (separatorIndex === -1 ? '' : specifier.slice(separatorIndex)); - if (opts.unescape === true) { - if (glob) glob = utils$6.removeBackslashes(glob); + return {packageName, packageSubpath, isScoped} +} - if (base && backslashes === true) { - base = utils$6.removeBackslashes(base); - } - } +/** + * @param {string} specifier + * @param {URL} base + * @param {Set} conditions + * @returns {URL} + */ +function packageResolve(specifier, base, conditions) { + const {packageName, packageSubpath, isScoped} = parsePackageName( + specifier, + base + ); - const state = { - prefix, - input, - start, - base, - glob, - isBrace, - isBracket, - isGlob, - isExtglob, - isGlobstar, - negated, - negatedExtglob - }; + // ResolveSelf + const packageConfig = getPackageScopeConfig(base); - if (opts.tokens === true) { - state.maxDepth = 0; - if (!isPathSeparator(code)) { - tokens.push(token); + // Can’t test. + /* c8 ignore next 16 */ + if (packageConfig.exists) { + const packageJsonUrl = pathToFileURL(packageConfig.pjsonPath); + if ( + packageConfig.name === packageName && + packageConfig.exports !== undefined && + packageConfig.exports !== null + ) { + return packageExportsResolve( + packageJsonUrl, + packageSubpath, + packageConfig, + base, + conditions + ).resolved } - state.tokens = tokens; } - if (opts.parts === true || opts.tokens === true) { - let prevIndex; - - for (let idx = 0; idx < slashes.length; idx++) { - const n = prevIndex ? prevIndex + 1 : start; - const i = slashes[idx]; - const value = input.slice(n, i); - if (opts.tokens) { - if (idx === 0 && start !== 0) { - tokens[idx].isPrefix = true; - tokens[idx].value = prefix; - } else { - tokens[idx].value = value; - } - depth(tokens[idx]); - state.maxDepth += tokens[idx].depth; - } - if (idx !== 0 || value !== '') { - parts.push(value); - } - prevIndex = i; + let packageJsonUrl = new URL$1( + './node_modules/' + packageName + '/package.json', + base + ); + let packageJsonPath = fileURLToPath(packageJsonUrl); + /** @type {string} */ + let lastPath; + do { + const stat = tryStatSync(packageJsonPath.slice(0, -13)); + if (!stat.isDirectory()) { + lastPath = packageJsonPath; + packageJsonUrl = new URL$1( + (isScoped ? '../../../../node_modules/' : '../../../node_modules/') + + packageName + + '/package.json', + packageJsonUrl + ); + packageJsonPath = fileURLToPath(packageJsonUrl); + continue } - if (prevIndex && prevIndex + 1 < input.length) { - const value = input.slice(prevIndex + 1); - parts.push(value); + // Package match. + const packageConfig = getPackageConfig(packageJsonPath, specifier, base); + if (packageConfig.exports !== undefined && packageConfig.exports !== null) + return packageExportsResolve( + packageJsonUrl, + packageSubpath, + packageConfig, + base, + conditions + ).resolved + if (packageSubpath === '.') + return legacyMainResolve(packageJsonUrl, packageConfig, base) + return new URL$1(packageSubpath, packageJsonUrl) + // Cross-platform root check. + } while (packageJsonPath.length !== lastPath.length) - if (opts.tokens) { - tokens[tokens.length - 1].value = value; - depth(tokens[tokens.length - 1]); - state.maxDepth += tokens[tokens.length - 1].depth; - } - } + throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base)) +} - state.slashes = slashes; - state.parts = parts; +/** + * @param {string} specifier + * @returns {boolean} + */ +function isRelativeSpecifier(specifier) { + if (specifier[0] === '.') { + if (specifier.length === 1 || specifier[1] === '/') return true + if ( + specifier[1] === '.' && + (specifier.length === 2 || specifier[2] === '/') + ) { + return true + } } - return state; -}; - -var scan_1 = scan$1; - -const constants$4 = constants$5; -const utils$5 = utils$7; + return false +} /** - * Constants + * @param {string} specifier + * @returns {boolean} */ - -const { - MAX_LENGTH: MAX_LENGTH$4, - POSIX_REGEX_SOURCE, - REGEX_NON_SPECIAL_CHARS, - REGEX_SPECIAL_CHARS_BACKREF, - REPLACEMENTS -} = constants$4; +function shouldBeTreatedAsRelativeOrAbsolutePath(specifier) { + if (specifier === '') return false + if (specifier[0] === '/') return true + return isRelativeSpecifier(specifier) +} /** - * Helpers + * The “Resolver Algorithm Specification” as detailed in the Node docs (which is + * sync and slightly lower-level than `resolve`). + * + * + * + * @param {string} specifier + * @param {URL} base + * @param {Set} [conditions] + * @returns {URL} */ +function moduleResolve(specifier, base, conditions) { + // Order swapped from spec for minor perf gain. + // Ok since relative URLs cannot parse as URLs. + /** @type {URL} */ + let resolved; -const expandRange = (args, options) => { - if (typeof options.expandRange === 'function') { - return options.expandRange(...args, options); - } - - args.sort(); - const value = `[${args.join('-')}]`; - - try { - /* eslint-disable-next-line no-new */ - new RegExp(value); - } catch (ex) { - return args.map(v => utils$5.escapeRegex(v)).join('..'); + if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) { + resolved = new URL$1(specifier, base); + } else if (specifier[0] === '#') { +({resolved} = packageImportsResolve(specifier, base, conditions)); + } else { + try { + resolved = new URL$1(specifier); + } catch { + resolved = packageResolve(specifier, base, conditions); + } } - return value; -}; + return finalizeResolution(resolved, base) +} /** - * Create the message for a syntax error + * @param {string} specifier + * @param {{parentURL?: string, conditions?: string[]}} context + * @returns {{url: string}} */ +function defaultResolve(specifier, context = {}) { + const {parentURL} = context; + /** @type {URL} */ + let parsed; -const syntaxError$1 = (type, char) => { - return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; -}; + try { + parsed = new URL$1(specifier); + if (parsed.protocol === 'data:') { + return {url: specifier} + } + } catch {} -/** - * Parse the given input string. - * @param {String} input - * @param {Object} options - * @return {Object} - */ + if (parsed && parsed.protocol === 'node:') return {url: specifier} + if (parsed && parsed.protocol !== 'file:' && parsed.protocol !== 'data:') + throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed) -const parse$8 = (input, options) => { - if (typeof input !== 'string') { - throw new TypeError('Expected a string'); + if (listOfBuiltins.includes(specifier)) { + return {url: 'node:' + specifier} } - input = REPLACEMENTS[input] || input; - - const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; - - let len = input.length; - if (len > max) { - throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + if (parentURL.startsWith('data:')) { + // This is gonna blow up, we want the error + new URL$1(specifier, parentURL); } - const bos = { type: 'bos', value: '', output: opts.prepend || '' }; - const tokens = [bos]; - - const capture = opts.capture ? '' : '?:'; - const win32 = utils$5.isWindows(options); - - // create constants based on platform, for windows or posix - const PLATFORM_CHARS = constants$4.globChars(win32); - const EXTGLOB_CHARS = constants$4.extglobChars(PLATFORM_CHARS); - - const { - DOT_LITERAL, - PLUS_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - DOTS_SLASH, - NO_DOT, - NO_DOT_SLASH, - NO_DOTS_SLASH, - QMARK, - QMARK_NO_DOT, - STAR, - START_ANCHOR - } = PLATFORM_CHARS; + const conditions = getConditionsSet(context.conditions); + let url = moduleResolve(specifier, new URL$1(parentURL), conditions); - const globstar = opts => { - return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; - }; + const urlPath = fileURLToPath(url); + const real = realpathSync$1(urlPath); + const old = url; + url = pathToFileURL(real + (urlPath.endsWith(path$b.sep) ? '/' : '')); + url.search = old.search; + url.hash = old.hash; - const nodot = opts.dot ? '' : NO_DOT; - const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; - let star = opts.bash === true ? globstar(opts) : STAR; + return {url: `${url}`} +} - if (opts.capture) { - star = `(${star})`; +/** + * Provides a module-relative resolution function scoped to each module, + * returning the URL string. + * `import.meta.resolve` also accepts a second argument which is the parent + * module from which to resolve from. + * + * This function is asynchronous because the ES module resolver in Node.js is + * allowed to be asynchronous. + * + * @param {string} specifier The module specifier to resolve relative to parent. + * @param {string} parent The absolute parent module URL to resolve from. + * You should pass `import.meta.url` or something else + * @returns {Promise} + */ +async function resolve(specifier, parent) { + if (!parent) { + throw new Error( + 'Please pass `parent`: `import-meta-resolve` cannot ponyfill that' + ) } - // minimatch options support - if (typeof opts.noext === 'boolean') { - opts.noextglob = opts.noext; + try { + return defaultResolve(specifier, {parentURL: parent}).url + } catch (error) { + return error.code === 'ERR_UNSUPPORTED_DIR_IMPORT' + ? error.url + : Promise.reject(error) } +} - const state = { - input, - index: -1, - start: 0, - dot: opts.dot === true, - consumed: '', - output: '', - prefix: '', - backtrack: false, - negated: false, - brackets: 0, - braces: 0, - parens: 0, - quotes: 0, - globstar: false, - tokens - }; - - input = utils$5.removePrefix(input, state); - len = input.length; - - const extglobs = []; - const braces = []; - const stack = []; - let prev = bos; - let value; - - /** - * Tokenizing helpers - */ - - const eos = () => state.index === len - 1; - const peek = state.peek = (n = 1) => input[state.index + n]; - const advance = state.advance = () => input[++state.index] || ''; - const remaining = () => input.slice(state.index + 1); - const consume = (value = '', num = 0) => { - state.consumed += value; - state.index += num; - }; - - const append = token => { - state.output += token.output != null ? token.output : token.value; - consume(token.value); - }; - - const negate = () => { - let count = 1; +var libnpmconfig = {}; - while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { - advance(); - state.start++; - count++; +class FiggyPudding { + constructor (specs, opts, providers) { + this.__specs = specs || {}; + Object.keys(this.__specs).forEach(alias => { + if (typeof this.__specs[alias] === 'string') { + const key = this.__specs[alias]; + const realSpec = this.__specs[key]; + if (realSpec) { + const aliasArr = realSpec.aliases || []; + aliasArr.push(alias, key); + realSpec.aliases = [...(new Set(aliasArr))]; + this.__specs[alias] = realSpec; + } else { + throw new Error(`Alias refers to invalid key: ${key} -> ${alias}`) + } + } + }); + this.__opts = opts || {}; + this.__providers = reverse((providers).filter( + x => x != null && typeof x === 'object' + )); + this.__isFiggyPudding = true; + } + get (key) { + return pudGet(this, key, true) + } + get [Symbol.toStringTag] () { return 'FiggyPudding' } + forEach (fn, thisArg = this) { + for (let [key, value] of this.entries()) { + fn.call(thisArg, value, key, this); } - - if (count % 2 === 0) { - return false; + } + toJSON () { + const obj = {}; + this.forEach((val, key) => { + obj[key] = val; + }); + return obj + } + * entries (_matcher) { + for (let key of Object.keys(this.__specs)) { + yield [key, this.get(key)]; } - - state.negated = true; - state.start++; - return true; - }; - - const increment = type => { - state[type]++; - stack.push(type); - }; - - const decrement = type => { - state[type]--; - stack.pop(); - }; - - /** - * Push tokens onto the tokens array. This helper speeds up - * tokenizing by 1) helping us avoid backtracking as much as possible, - * and 2) helping us avoid creating extra tokens when consecutive - * characters are plain text. This improves performance and simplifies - * lookbehinds. - */ - - const push = tok => { - if (prev.type === 'globstar') { - const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); - const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); - - if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { - state.output = state.output.slice(0, -prev.output.length); - prev.type = 'star'; - prev.value = '*'; - prev.output = star; - state.output += prev.output; + const matcher = _matcher || this.__opts.other; + if (matcher) { + const seen = new Set(); + for (let p of this.__providers) { + const iter = p.entries ? p.entries(matcher) : entries(p); + for (let [key, val] of iter) { + if (matcher(key) && !seen.has(key)) { + seen.add(key); + yield [key, val]; + } + } } } - - if (extglobs.length && tok.type !== 'paren') { - extglobs[extglobs.length - 1].inner += tok.value; + } + * [Symbol.iterator] () { + for (let [key, value] of this.entries()) { + yield [key, value]; } - - if (tok.value || tok.output) append(tok); - if (prev && prev.type === 'text' && tok.type === 'text') { - prev.value += tok.value; - prev.output = (prev.output || '') + tok.value; - return; + } + * keys () { + for (let [key] of this.entries()) { + yield key; } - - tok.prev = prev; - tokens.push(tok); - prev = tok; + } + * values () { + for (let [, value] of this.entries()) { + yield value; + } + } + concat (...moreConfig) { + return new Proxy(new FiggyPudding( + this.__specs, + this.__opts, + reverse(this.__providers).concat(moreConfig) + ), proxyHandler) + } +} +try { + const util = require$$0$4; + FiggyPudding.prototype[util.inspect.custom] = function (depth, opts) { + return ( + this[Symbol.toStringTag] + ' ' + ) + util.inspect(this.toJSON(), opts) }; +} catch (e) {} - const extglobOpen = (type, value) => { - const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; +function BadKeyError (key) { + throw Object.assign(new Error( + `invalid config key requested: ${key}` + ), {code: 'EBADKEY'}) +} - token.prev = prev; - token.parens = state.parens; - token.output = state.output; - const output = (opts.capture ? '(' : '') + token.open; - - increment('parens'); - push({ type, value, output: state.output ? '' : ONE_CHAR }); - push({ type: 'paren', extglob: true, value: advance(), output }); - extglobs.push(token); - }; - - const extglobClose = token => { - let output = token.close + (opts.capture ? ')' : ''); - let rest; - - if (token.type === 'negate') { - let extglobStar = star; - - if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { - extglobStar = globstar(opts); - } - - if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { - output = token.close = `)$))${extglobStar}`; +function pudGet (pud, key, validate) { + let spec = pud.__specs[key]; + if (validate && !spec && (!pud.__opts.other || !pud.__opts.other(key))) { + BadKeyError(key); + } else { + if (!spec) { spec = {}; } + let ret; + for (let p of pud.__providers) { + ret = tryGet(key, p); + if (ret === undefined && spec.aliases && spec.aliases.length) { + for (let alias of spec.aliases) { + if (alias === key) { continue } + ret = tryGet(alias, p); + if (ret !== undefined) { + break + } + } } - - if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { - output = token.close = `)${rest})${extglobStar})`; + if (ret !== undefined) { + break } - - if (token.prev.type === 'bos') { - state.negatedExtglob = true; + } + if (ret === undefined && spec.default !== undefined) { + if (typeof spec.default === 'function') { + return spec.default(pud) + } else { + return spec.default } + } else { + return ret } + } +} - push({ type: 'paren', extglob: true, value, output }); - decrement('parens'); - }; +function tryGet (key, p) { + let ret; + if (p.__isFiggyPudding) { + ret = pudGet(p, key, false); + } else if (typeof p.get === 'function') { + ret = p.get(key); + } else { + ret = p[key]; + } + return ret +} - /** - * Fast paths - */ +const proxyHandler = { + has (obj, prop) { + return prop in obj.__specs && pudGet(obj, prop, false) !== undefined + }, + ownKeys (obj) { + return Object.keys(obj.__specs) + }, + get (obj, prop) { + if ( + typeof prop === 'symbol' || + prop.slice(0, 2) === '__' || + prop in FiggyPudding.prototype + ) { + return obj[prop] + } + return obj.get(prop) + }, + set (obj, prop, value) { + if ( + typeof prop === 'symbol' || + prop.slice(0, 2) === '__' + ) { + obj[prop] = value; + return true + } else { + throw new Error('figgyPudding options cannot be modified. Use .concat() instead.') + } + }, + deleteProperty () { + throw new Error('figgyPudding options cannot be deleted. Use .concat() and shadow them instead.') + } +}; - if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { - let backslashes = false; +var figgyPudding_1 = figgyPudding$1; +function figgyPudding$1 (specs, opts) { + function factory (...providers) { + return new Proxy(new FiggyPudding( + specs, + opts, + providers + ), proxyHandler) + } + return factory +} - let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { - if (first === '\\') { - backslashes = true; - return m; - } +function reverse (arr) { + const ret = []; + arr.forEach(x => ret.unshift(x)); + return ret +} - if (first === '?') { - if (esc) { - return esc + first + (rest ? QMARK.repeat(rest.length) : ''); - } - if (index === 0) { - return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); - } - return QMARK.repeat(chars.length); - } +function entries (obj) { + return Object.keys(obj).map(k => [k, obj[k]]) +} - if (first === '.') { - return DOT_LITERAL.repeat(chars.length); - } +var findUp$1 = {exports: {}}; - if (first === '*') { - if (esc) { - return esc + first + (rest ? star : ''); - } - return star; - } - return esc ? m : `\\${m}`; - }); +var locatePath$1 = {exports: {}}; - if (backslashes === true) { - if (opts.unescape === true) { - output = output.replace(/\\/g, ''); - } else { - output = output.replace(/\\+/g, m => { - return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); - }); - } - } +var pathExists$1 = {exports: {}}; - if (output === input && opts.contains === true) { - state.output = input; - return state; - } +const fs$5 = require$$0$3; - state.output = utils$5.wrapOutput(output, state, options); - return state; - } +pathExists$1.exports = fp => new Promise(resolve => { + fs$5.access(fp, err => { + resolve(!err); + }); +}); - /** - * Tokenize input until we reach end-of-string - */ +pathExists$1.exports.sync = fp => { + try { + fs$5.accessSync(fp); + return true; + } catch (err) { + return false; + } +}; - while (!eos()) { - value = advance(); +var pLimit$2 = {exports: {}}; - if (value === '\u0000') { - continue; - } +var pTry$2 = {exports: {}}; - /** - * Escaped characters - */ +const pTry$1 = (fn, ...arguments_) => new Promise(resolve => { + resolve(fn(...arguments_)); +}); - if (value === '\\') { - const next = peek(); +pTry$2.exports = pTry$1; +// TODO: remove this in the next major version +pTry$2.exports.default = pTry$1; - if (next === '/' && opts.bash !== true) { - continue; - } +const pTry = pTry$2.exports; - if (next === '.' || next === ';') { - continue; - } +const pLimit$1 = concurrency => { + if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { + return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up')); + } - if (!next) { - value += '\\'; - push({ type: 'text', value }); - continue; - } + const queue = []; + let activeCount = 0; - // collapse slashes to reduce potential for exploits - const match = /^\\+/.exec(remaining()); - let slashes = 0; + const next = () => { + activeCount--; - if (match && match[0].length > 2) { - slashes = match[0].length; - state.index += slashes; - if (slashes % 2 !== 0) { - value += '\\'; - } - } + if (queue.length > 0) { + queue.shift()(); + } + }; - if (opts.unescape === true) { - value = advance(); - } else { - value += advance(); - } + const run = (fn, resolve, ...args) => { + activeCount++; - if (state.brackets === 0) { - push({ type: 'text', value }); - continue; - } - } + const result = pTry(fn, ...args); - /** - * If we're inside a regex character class, continue - * until we reach the closing bracket. - */ + resolve(result); - if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { - if (opts.posix !== false && value === ':') { - const inner = prev.value.slice(1); - if (inner.includes('[')) { - prev.posix = true; + result.then(next, next); + }; - if (inner.includes(':')) { - const idx = prev.value.lastIndexOf('['); - const pre = prev.value.slice(0, idx); - const rest = prev.value.slice(idx + 2); - const posix = POSIX_REGEX_SOURCE[rest]; - if (posix) { - prev.value = pre + posix; - state.backtrack = true; - advance(); + const enqueue = (fn, resolve, ...args) => { + if (activeCount < concurrency) { + run(fn, resolve, ...args); + } else { + queue.push(run.bind(null, fn, resolve, ...args)); + } + }; - if (!bos.output && tokens.indexOf(prev) === 1) { - bos.output = ONE_CHAR; - } - continue; - } - } - } - } + const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args)); + Object.defineProperties(generator, { + activeCount: { + get: () => activeCount + }, + pendingCount: { + get: () => queue.length + }, + clearQueue: { + value: () => { + queue.length = 0; + } + } + }); - if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { - value = `\\${value}`; - } + return generator; +}; - if (value === ']' && (prev.value === '[' || prev.value === '[^')) { - value = `\\${value}`; - } +pLimit$2.exports = pLimit$1; +pLimit$2.exports.default = pLimit$1; - if (opts.posix === true && value === '!' && prev.value === '[') { - value = '^'; - } +const pLimit = pLimit$2.exports; - prev.value += value; - append({ value }); - continue; - } +class EndError extends Error { + constructor(value) { + super(); + this.value = value; + } +} - /** - * If we're inside a quoted string, continue - * until we reach the closing double quote. - */ +// The input can also be a promise, so we `Promise.resolve()` it +const testElement = (el, tester) => Promise.resolve(el).then(tester); - if (state.quotes === 1 && value !== '"') { - value = utils$5.escapeRegex(value); - prev.value += value; - append({ value }); - continue; - } +// The input can also be a promise, so we `Promise.all()` them both +const finder$1 = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); - /** - * Double quotes - */ +var pLocate$1 = (iterable, tester, opts) => { + opts = Object.assign({ + concurrency: Infinity, + preserveOrder: true + }, opts); - if (value === '"') { - state.quotes = state.quotes === 1 ? 0 : 1; - if (opts.keepQuotes === true) { - push({ type: 'text', value }); - } - continue; - } + const limit = pLimit(opts.concurrency); - /** - * Parentheses - */ + // Start all the promises concurrently with optional limit + const items = [...iterable].map(el => [el, limit(testElement, el, tester)]); - if (value === '(') { - increment('parens'); - push({ type: 'paren', value }); - continue; - } + // Check the promises either serially or concurrently + const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity); - if (value === ')') { - if (state.parens === 0 && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError$1('opening', '(')); - } + return Promise.all(items.map(el => checkLimit(finder$1, el))) + .then(() => {}) + .catch(err => err instanceof EndError ? err.value : Promise.reject(err)); +}; - const extglob = extglobs[extglobs.length - 1]; - if (extglob && state.parens === extglob.parens + 1) { - extglobClose(extglobs.pop()); - continue; - } +const path$7 = path$b; +const pathExists = pathExists$1.exports; +const pLocate = pLocate$1; - push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); - decrement('parens'); - continue; - } +locatePath$1.exports = (iterable, options) => { + options = Object.assign({ + cwd: process.cwd() + }, options); - /** - * Square brackets - */ + return pLocate(iterable, el => pathExists(path$7.resolve(options.cwd, el)), options); +}; - if (value === '[') { - if (opts.nobracket === true || !remaining().includes(']')) { - if (opts.nobracket !== true && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError$1('closing', ']')); - } +locatePath$1.exports.sync = (iterable, options) => { + options = Object.assign({ + cwd: process.cwd() + }, options); - value = `\\${value}`; - } else { - increment('brackets'); - } + for (const el of iterable) { + if (pathExists.sync(path$7.resolve(options.cwd, el))) { + return el; + } + } +}; - push({ type: 'bracket', value }); - continue; - } +const path$6 = path$b; +const locatePath = locatePath$1.exports; - if (value === ']') { - if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { - push({ type: 'text', value, output: `\\${value}` }); - continue; - } +findUp$1.exports = (filename, opts = {}) => { + const startDir = path$6.resolve(opts.cwd || ''); + const {root} = path$6.parse(startDir); - if (state.brackets === 0) { - if (opts.strictBrackets === true) { - throw new SyntaxError(syntaxError$1('opening', '[')); - } + const filenames = [].concat(filename); - push({ type: 'text', value, output: `\\${value}` }); - continue; - } + return new Promise(resolve => { + (function find(dir) { + locatePath(filenames, {cwd: dir}).then(file => { + if (file) { + resolve(path$6.join(dir, file)); + } else if (dir === root) { + resolve(null); + } else { + find(path$6.dirname(dir)); + } + }); + })(startDir); + }); +}; - decrement('brackets'); +findUp$1.exports.sync = (filename, opts = {}) => { + let dir = path$6.resolve(opts.cwd || ''); + const {root} = path$6.parse(dir); - const prevValue = prev.value.slice(1); - if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { - value = `/${value}`; - } + const filenames = [].concat(filename); - prev.value += value; - append({ value }); + // eslint-disable-next-line no-constant-condition + while (true) { + const file = locatePath.sync(filenames, {cwd: dir}); - // when literal brackets are explicitly disabled - // assume we should match with a regex character class - if (opts.literalBrackets === false || utils$5.hasRegexChars(prevValue)) { - continue; - } + if (file) { + return path$6.join(dir, file); + } - const escaped = utils$5.escapeRegex(prev.value); - state.output = state.output.slice(0, -prev.value.length); + if (dir === root) { + return null; + } - // when literal brackets are explicitly enabled - // assume we should escape the brackets to match literal characters - if (opts.literalBrackets === true) { - state.output += escaped; - prev.value = escaped; - continue; - } + dir = path$6.dirname(dir); + } +}; - // when the user specifies nothing, try to match both - prev.value = `(${capture}${escaped}|${prev.value})`; - state.output += prev.value; - continue; - } +var ini$1 = {}; - /** - * Braces - */ +ini$1.parse = ini$1.decode = decode; - if (value === '{' && opts.nobrace !== true) { - increment('braces'); +ini$1.stringify = ini$1.encode = encode$1; - const open = { - type: 'brace', - value, - output: '(', - outputIndex: state.output.length, - tokensIndex: state.tokens.length - }; +ini$1.safe = safe$1; +ini$1.unsafe = unsafe$1; - braces.push(open); - push(open); - continue; - } +var eol$1 = typeof process !== 'undefined' && + process.platform === 'win32' ? '\r\n' : '\n'; - if (value === '}') { - const brace = braces[braces.length - 1]; +function encode$1 (obj, opt) { + var children = []; + var out = ''; - if (opts.nobrace === true || !brace) { - push({ type: 'text', value, output: value }); - continue; - } + if (typeof opt === 'string') { + opt = { + section: opt, + whitespace: false, + }; + } else { + opt = opt || {}; + opt.whitespace = opt.whitespace === true; + } - let output = ')'; + var separator = opt.whitespace ? ' = ' : '='; - if (brace.dots === true) { - const arr = tokens.slice(); - const range = []; + Object.keys(obj).forEach(function (k, _, __) { + var val = obj[k]; + if (val && Array.isArray(val)) { + val.forEach(function (item) { + out += safe$1(k + '[]') + separator + safe$1(item) + '\n'; + }); + } else if (val && typeof val === 'object') + children.push(k); + else + out += safe$1(k) + separator + safe$1(val) + eol$1; + }); - for (let i = arr.length - 1; i >= 0; i--) { - tokens.pop(); - if (arr[i].type === 'brace') { - break; - } - if (arr[i].type !== 'dots') { - range.unshift(arr[i].value); - } - } + if (opt.section && out.length) + out = '[' + safe$1(opt.section) + ']' + eol$1 + out; - output = expandRange(range, opts); - state.backtrack = true; - } + children.forEach(function (k, _, __) { + var nk = dotSplit(k).join('\\.'); + var section = (opt.section ? opt.section + '.' : '') + nk; + var child = encode$1(obj[k], { + section: section, + whitespace: opt.whitespace, + }); + if (out.length && child.length) + out += eol$1; - if (brace.comma !== true && brace.dots !== true) { - const out = state.output.slice(0, brace.outputIndex); - const toks = state.tokens.slice(brace.tokensIndex); - brace.value = brace.output = '\\{'; - value = output = '\\}'; - state.output = out; - for (const t of toks) { - state.output += (t.output || t.value); - } - } + out += child; + }); - push({ type: 'brace', value, output }); - decrement('braces'); - braces.pop(); - continue; - } + return out +} - /** - * Pipes - */ +function dotSplit (str) { + return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') + .replace(/\\\./g, '\u0001') + .split(/\./).map(function (part) { + return part.replace(/\1/g, '\\.') + .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') + }) +} - if (value === '|') { - if (extglobs.length > 0) { - extglobs[extglobs.length - 1].conditions++; +function decode (str) { + var out = {}; + var p = out; + var section = null; + // section |key = value + var re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i; + var lines = str.split(/[\r\n]+/g); + + lines.forEach(function (line, _, __) { + if (!line || line.match(/^\s*[;#]/)) + return + var match = line.match(re); + if (!match) + return + if (match[1] !== undefined) { + section = unsafe$1(match[1]); + if (section === '__proto__') { + // not allowed + // keep parsing the section, but don't attach it. + p = {}; + return } - push({ type: 'text', value }); - continue; + p = out[section] = out[section] || {}; + return + } + var key = unsafe$1(match[2]); + if (key === '__proto__') + return + var value = match[3] ? unsafe$1(match[4]) : true; + switch (value) { + case 'true': + case 'false': + case 'null': value = JSON.parse(value); } - /** - * Commas - */ + // Convert keys with '[]' suffix to an array + if (key.length > 2 && key.slice(-2) === '[]') { + key = key.substring(0, key.length - 2); + if (key === '__proto__') + return + if (!p[key]) + p[key] = []; + else if (!Array.isArray(p[key])) + p[key] = [p[key]]; + } - if (value === ',') { - let output = value; + // safeguard against resetting a previously defined + // array by accidentally forgetting the brackets + if (Array.isArray(p[key])) + p[key].push(value); + else + p[key] = value; + }); - const brace = braces[braces.length - 1]; - if (brace && stack[stack.length - 1] === 'braces') { - brace.comma = true; - output = '|'; - } + // {a:{y:1},"a.b":{x:2}} --> {a:{y:1,b:{x:2}}} + // use a filter to return the keys that have to be deleted. + Object.keys(out).filter(function (k, _, __) { + if (!out[k] || + typeof out[k] !== 'object' || + Array.isArray(out[k])) + return false - push({ type: 'comma', value, output }); - continue; - } + // see if the parent section is also an object. + // if so, add it to that, and mark this one for deletion + var parts = dotSplit(k); + var p = out; + var l = parts.pop(); + var nl = l.replace(/\\\./g, '.'); + parts.forEach(function (part, _, __) { + if (part === '__proto__') + return + if (!p[part] || typeof p[part] !== 'object') + p[part] = {}; + p = p[part]; + }); + if (p === out && nl === l) + return false - /** - * Slashes - */ + p[nl] = out[k]; + return true + }).forEach(function (del, _, __) { + delete out[del]; + }); - if (value === '/') { - // if the beginning of the glob is "./", advance the start - // to the current index, and don't add the "./" characters - // to the state. This greatly simplifies lookbehinds when - // checking for BOS characters like "!" and "." (not "./") - if (prev.type === 'dot' && state.index === state.start + 1) { - state.start = state.index + 1; - state.consumed = ''; - state.output = ''; - tokens.pop(); - prev = bos; // reset "prev" to the first token - continue; - } + return out +} - push({ type: 'slash', value, output: SLASH_LITERAL }); - continue; - } +function isQuoted (val) { + return (val.charAt(0) === '"' && val.slice(-1) === '"') || + (val.charAt(0) === "'" && val.slice(-1) === "'") +} - /** - * Dots - */ +function safe$1 (val) { + return (typeof val !== 'string' || + val.match(/[=\r\n]/) || + val.match(/^\[/) || + (val.length > 1 && + isQuoted(val)) || + val !== val.trim()) + ? JSON.stringify(val) + : val.replace(/;/g, '\\;').replace(/#/g, '\\#') +} - if (value === '.') { - if (state.braces > 0 && prev.type === 'dot') { - if (prev.value === '.') prev.output = DOT_LITERAL; - const brace = braces[braces.length - 1]; - prev.type = 'dots'; - prev.output += value; - prev.value += value; - brace.dots = true; - continue; - } +function unsafe$1 (val, doUnesc) { + val = (val || '').trim(); + if (isQuoted(val)) { + // remove the single quotes before calling JSON.parse + if (val.charAt(0) === "'") + val = val.substr(1, val.length - 2); - if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { - push({ type: 'text', value, output: DOT_LITERAL }); - continue; - } + try { + val = JSON.parse(val); + } catch (_) {} + } else { + // walk the val to find the first not-escaped ; character + var esc = false; + var unesc = ''; + for (var i = 0, l = val.length; i < l; i++) { + var c = val.charAt(i); + if (esc) { + if ('\\;#'.indexOf(c) !== -1) + unesc += c; + else + unesc += '\\' + c; - push({ type: 'dot', value, output: DOT_LITERAL }); - continue; + esc = false; + } else if (';#'.indexOf(c) !== -1) + break + else if (c === '\\') + esc = true; + else + unesc += c; } + if (esc) + unesc += '\\'; - /** - * Question marks - */ - - if (value === '?') { - const isGroup = prev && prev.value === '('; - if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - extglobOpen('qmark', value); - continue; - } + return unesc.trim() + } + return val +} - if (prev && prev.type === 'paren') { - const next = peek(); - let output = value; +const fs$4 = require$$0$3; +const figgyPudding = figgyPudding_1; +const findUp = findUp$1.exports; +const ini = ini$1; +const os = require$$0$2; +const path$5 = path$b; - if (next === '<' && !utils$5.supportsLookbehinds()) { - throw new Error('Node.js v10 or higher is required for regex lookbehinds'); - } +const NpmConfig = figgyPudding({}, { + // Open up the pudding object. + other () { return true } +}); - if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { - output = `\\${value}`; - } +const ConfigOpts = figgyPudding({ + cache: { default: path$5.join(os.homedir(), '.npm') }, + configNames: { default: ['npmrc', '.npmrc'] }, + envPrefix: { default: /^npm_config_/i }, + cwd: { default: () => process.cwd() }, + globalconfig: { + default: () => path$5.join(getGlobalPrefix(), 'etc', 'npmrc') + }, + userconfig: { default: path$5.join(os.homedir(), '.npmrc') } +}); - push({ type: 'text', value, output }); - continue; - } +libnpmconfig.read = getNpmConfig; +function getNpmConfig (_opts, _builtin) { + const builtin = ConfigOpts(_builtin); + const env = {}; + for (let key of Object.keys(process.env)) { + if (!key.match(builtin.envPrefix)) continue + const newKey = key.toLowerCase() + .replace(builtin.envPrefix, '') + .replace(/(?!^)_/g, '-'); + env[newKey] = process.env[key]; + } + const cli = NpmConfig(_opts); + const userConfPath = ( + builtin.userconfig || + cli.userconfig || + env.userconfig + ); + const user = userConfPath && maybeReadIni(userConfPath); + const globalConfPath = ( + builtin.globalconfig || + cli.globalconfig || + env.globalconfig + ); + const global = globalConfPath && maybeReadIni(globalConfPath); + const projConfPath = findUp.sync(builtin.configNames, { cwd: builtin.cwd }); + let proj = {}; + if (projConfPath && projConfPath !== userConfPath) { + proj = maybeReadIni(projConfPath); + } + const newOpts = NpmConfig(builtin, global, user, proj, env, cli); + if (newOpts.cache) { + return newOpts.concat({ + cache: path$5.resolve( + ( + (cli.cache || env.cache) + ? builtin.cwd + : proj.cache + ? path$5.dirname(projConfPath) + : user.cache + ? path$5.dirname(userConfPath) + : global.cache + ? path$5.dirname(globalConfPath) + : path$5.dirname(userConfPath) + ), + newOpts.cache + ) + }) + } else { + return newOpts + } +} - if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { - push({ type: 'qmark', value, output: QMARK_NO_DOT }); - continue; - } +function maybeReadIni (f) { + let txt; + try { + txt = fs$4.readFileSync(f, 'utf8'); + } catch (err) { + if (err.code === 'ENOENT') { + return '' + } else { + throw err + } + } + return ini.parse(txt) +} - push({ type: 'qmark', value, output: QMARK }); - continue; +function getGlobalPrefix () { + if (process.env.PREFIX) { + return process.env.PREFIX + } else if (process.platform === 'win32') { + // c:\node\node.exe --> prefix=c:\node\ + return path$5.dirname(process.execPath) + } else { + // /usr/local/bin/node --> prefix=/usr/local + let pref = path$5.dirname(path$5.dirname(process.execPath)); + // destdir only is respected on Unix + if (process.env.DESTDIR) { + pref = path$5.join(process.env.DESTDIR, pref); } + return pref + } +} - /** - * Exclamation - */ +/** + * @typedef ResolveOptions + * @property {string} [prefix] + * @property {string|string[]} [cwd] + * @property {boolean} [global] + */ - if (value === '!') { - if (opts.noextglob !== true && peek() === '(') { - if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { - extglobOpen('negate', value); - continue; - } - } +const electron = process.versions.electron !== undefined; +const windows = process.platform === 'win32'; - if (opts.nonegate !== true && state.index === 0) { - negate(); - continue; - } - } +const argv = process.argv[1] || /* c8 ignore next */ ''; +const nvm = process.env.NVM_BIN; +const appData = process.env.APPDATA; - /** - * Plus - */ +/* c8 ignore next */ +const globalsLibrary = windows ? '' : 'lib'; - if (value === '+') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - extglobOpen('plus', value); - continue; - } +/** @type {{prefix?: string}} */ +let builtinNpmConfig; - if ((prev && prev.value === '(') || opts.regex === false) { - push({ type: 'plus', value, output: PLUS_LITERAL }); - continue; - } +// The prefix config defaults to the location where node is installed. +// On Windows, this is in a place called `%AppData%`, which we have to +// pass to `libnpmconfig` explicitly: +/* c8 ignore next 4 */ +if (windows && appData) { + builtinNpmConfig = {prefix: path$b.join(appData, 'npm')}; +} - if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { - push({ type: 'plus', value }); - continue; - } +/** + * Note: `libnpmconfig` uses `figgy-pudding` which is slated for archival. + * Either `libnpmconfig` will switch to an alternative or we’ll have to. + * @type {string} + */ +let npmPrefix = libnpmconfig.read(null, builtinNpmConfig).prefix; - push({ type: 'plus', value: PLUS_LITERAL }); - continue; - } +// If there is no prefix defined, use the defaults +// See: +/* c8 ignore next 5 */ +if (!npmPrefix) { + npmPrefix = windows + ? path$b.dirname(process.execPath) + : path$b.resolve(process.execPath, '../..'); +} - /** - * Plain text - */ +const globalsDefault = electron || argv.indexOf(npmPrefix) === 0; +let globalDir = path$b.resolve(npmPrefix, globalsLibrary, 'node_modules'); - if (value === '@') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - push({ type: 'at', extglob: true, value, output: '' }); - continue; - } +// If we’re in Electron, we’re running in a modified Node that cannot really +// install global node modules. +// To find the actual modules, the user has to set `prefix` somewhere in an +// `.npmrc` (which is picked up by `libnpmconfig`). +// Most people don’t do that, and some use NVM instead to manage different +// versions of Node. +// Luckily NVM leaks some environment variables that we can pick up on to try +// and detect the actual modules. +/* c8 ignore next 3 */ +if (electron && nvm && !require$$0$3.existsSync(globalDir)) { + globalDir = path$b.resolve(nvm, '..', globalsLibrary, 'node_modules'); +} - push({ type: 'text', value }); - continue; +/** + * Load the plugin found using `resolvePlugin`. + * + * @param {string} name The name to import. + * @param {LoadOptions} [options] + * @returns {Promise} + */ +async function loadPlugin(name, options = {}) { + const {key = 'default', ...rest} = options; + const fp = await resolvePlugin(name, rest); + /** @type {Object.} */ + // Bug with coverage on Node@12. + /* c8 ignore next 3 */ + const mod = await import(pathToFileURL(fp).href); + return key === false ? mod : mod[key] +} + +/** + * Find a plugin. + * + * See also: + * * https://docs.npmjs.com/files/folders#node-modules + * * https://github.com/sindresorhus/resolve-from + * + * Uses the standard node module loading strategy to find `$name` in each given + * `cwd` (and optionally the global `node_modules` directory). + * + * If a prefix is given and `$name` is not a path, `$prefix-$name` is also + * searched (preferring these over non-prefixed modules). + * + * @param {string} name + * @param {ResolveOptions} [options] + * @returns {Promise.} + */ +async function resolvePlugin(name, options = {}) { + const prefix = options.prefix + ? options.prefix + + (options.prefix.charAt(options.prefix.length - 1) === '-' ? '' : '-') + : undefined; + const cwd = options.cwd; + const globals = + options.global === undefined || options.global === null + ? globalsDefault + : options.global; + const sources = Array.isArray(cwd) ? cwd.concat() : [cwd || process.cwd()]; + /** @type {string} */ + let plugin; + /** @type {Error} */ + let lastError; + + // Non-path. + if (name.charAt(0) !== '.') { + if (globals) { + sources.push(globalDir); } - /** - * Plain text - */ + let scope = ''; - if (value !== '*') { - if (value === '$' || value === '^') { - value = `\\${value}`; + // Unprefix module. + if (prefix) { + // Scope? + if (name.charAt(0) === '@') { + const slash = name.indexOf('/'); + + // Let’s keep the algorithm simple. + // No need to care if this is a “valid” scope (I think?). + // But we do check for the slash. + if (slash !== -1) { + scope = name.slice(0, slash + 1); + name = name.slice(slash + 1); + } } - const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); - if (match) { - value += match[0]; - state.index += match[0].length; + if (name.slice(0, prefix.length) !== prefix) { + plugin = scope + prefix + name; } - push({ type: 'text', value }); - continue; + name = scope + name; } + } - /** - * Stars - */ + let index = -1; + /** @type {string} */ + let fp; - if (prev && (prev.type === 'globstar' || prev.star === true)) { - prev.type = 'star'; - prev.star = true; - prev.value += value; - prev.output = star; - state.backtrack = true; - state.globstar = true; - consume(value); - continue; - } + while (++index < sources.length) { + fp = plugin && (await attempt(sources[index], plugin)); + if (fp) return fp - let rest = remaining(); - if (opts.noextglob !== true && /^\([^?]/.test(rest)) { - extglobOpen('star', value); - continue; + fp = await attempt(sources[index], name); + if (fp) return fp + } + + // There’s always an error. + // Bug with coverage on Node@12. + /* c8 ignore next 8 */ + throw lastError + + /** + * @param {string} base + * @param {string} name + * @returns {Promise} + */ + async function attempt(base, name) { + try { + // `import-meta-resolve` resolves from files, whereas `load-plugin` works + // on folders, which is why we add a `/` at the end. + return fileURLToPath( + await resolve(name, pathToFileURL(base).href + '/') + ) + // Bug with coverage on Node@12. + /* c8 ignore next 1 */ + } catch (error) { + lastError = error; } + } +} - if (prev.type === 'star') { - if (opts.noglobstar === true) { - consume(value); - continue; - } +function isPlainObject$1(value) { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } - const prior = prev.prev; - const before = prior.prev; - const isStart = prior.type === 'slash' || prior.type === 'bos'; - const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +} - if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { - push({ type: 'star', value, output: '' }); - continue; - } +var format$1 = {exports: {}}; - const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); - const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); - if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { - push({ type: 'star', value, output: '' }); - continue; - } +(function (module) { +(function() { - // strip consecutive `/**/` - while (rest.slice(0, 3) === '/**') { - const after = input[state.index + 4]; - if (after && after !== '/') { + //// Export the API + var namespace; + + // CommonJS / Node module + { + namespace = module.exports = format; + } + + namespace.format = format; + namespace.vsprintf = vsprintf; + + if (typeof console !== 'undefined' && typeof console.log === 'function') { + namespace.printf = printf; + } + + function printf(/* ... */) { + console.log(format.apply(null, arguments)); + } + + function vsprintf(fmt, replacements) { + return format.apply(null, [fmt].concat(replacements)); + } + + function format(fmt) { + var argIndex = 1 // skip initial format argument + , args = [].slice.call(arguments) + , i = 0 + , n = fmt.length + , result = '' + , c + , escaped = false + , arg + , tmp + , leadingZero = false + , precision + , nextArg = function() { return args[argIndex++]; } + , slurpNumber = function() { + var digits = ''; + while (/\d/.test(fmt[i])) { + digits += fmt[i++]; + c = fmt[i]; + } + return digits.length > 0 ? parseInt(digits) : null; + } + ; + for (; i < n; ++i) { + c = fmt[i]; + if (escaped) { + escaped = false; + if (c == '.') { + leadingZero = false; + c = fmt[++i]; + } + else if (c == '0' && fmt[i + 1] == '.') { + leadingZero = true; + i += 2; + c = fmt[i]; + } + else { + leadingZero = true; + } + precision = slurpNumber(); + switch (c) { + case 'b': // number in binary + result += parseInt(nextArg(), 10).toString(2); + break; + case 'c': // character + arg = nextArg(); + if (typeof arg === 'string' || arg instanceof String) + result += arg; + else + result += String.fromCharCode(parseInt(arg, 10)); + break; + case 'd': // number in decimal + result += parseInt(nextArg(), 10); + break; + case 'f': // floating point number + tmp = String(parseFloat(nextArg()).toFixed(precision || 6)); + result += leadingZero ? tmp : tmp.replace(/^0/, ''); + break; + case 'j': // JSON + result += JSON.stringify(nextArg()); + break; + case 'o': // number in octal + result += '0' + parseInt(nextArg(), 10).toString(8); + break; + case 's': // string + result += nextArg(); + break; + case 'x': // lowercase hexadecimal + result += '0x' + parseInt(nextArg(), 10).toString(16); + break; + case 'X': // uppercase hexadecimal + result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase(); + break; + default: + result += c; break; } - rest = rest.slice(3); - consume('/**', 3); + } else if (c === '%') { + escaped = true; + } else { + result += c; } + } + return result; + } - if (prior.type === 'bos' && eos()) { - prev.type = 'globstar'; - prev.value += value; - prev.output = globstar(opts); - state.output = prev.output; - state.globstar = true; - consume(value); - continue; - } +}()); +}(format$1)); - if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; +var formatter = format$1.exports; - prev.type = 'globstar'; - prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); - prev.value += value; - state.globstar = true; - state.output += prior.output + prev.output; - consume(value); - continue; - } +// @ts-ignore - if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { - const end = rest[1] !== void 0 ? '|$' : ''; +var fault = Object.assign(create$1(Error), { + eval: create$1(EvalError), + range: create$1(RangeError), + reference: create$1(ReferenceError), + syntax: create$1(SyntaxError), + type: create$1(TypeError), + uri: create$1(URIError) +}); - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; +/** + * Create a new `EConstructor`, with the formatted `format` as a first argument. + * + * @template {Error} Fault + * @template {new (reason: string) => Fault} Class + * @param {Class} Constructor + */ +function create$1(Constructor) { + /** @type {string} */ + // @ts-ignore + FormattedError.displayName = Constructor.displayName || Constructor.name; - prev.type = 'globstar'; - prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; - prev.value += value; + return FormattedError - state.output += prior.output + prev.output; - state.globstar = true; + /** + * @param {string} [format] + * @param {...unknown} values + * @returns {Fault} + */ + function FormattedError(format, ...values) { + /** @type {string} */ + var reason = format ? formatter(format, ...values) : format; + return new Constructor(reason) + } +} - consume(value + advance()); +const debug$b = createDebug('unified-engine:find-up'); - push({ type: 'slash', value: '/', output: '' }); - continue; - } +/** + * @template Value + */ +class FindUp { + /** + * @callback Create + * @param {Buffer} buf + * @param {string} filePath + * @returns {Promise|Value|undefined} + */ - if (prior.type === 'bos' && rest[0] === '/') { - prev.type = 'globstar'; - prev.value += value; - prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; - state.output = prev.output; - state.globstar = true; - consume(value + advance()); - push({ type: 'slash', value: '/', output: '' }); - continue; - } + /** + * @callback Callback + * @param {Error|null} error + * @param {Value} [result] + * @returns {void} + */ - // remove single star from output - state.output = state.output.slice(0, -prev.output.length); + /** + * @typedef Options + * @property {string} cwd + * @property {string|undefined} filePath + * @property {boolean|undefined} [detect] + * @property {string[]} names + * @property {Create} create + */ - // reset previous token to globstar - prev.type = 'globstar'; - prev.output = globstar(opts); - prev.value += value; + /** + * @param {Options} options + */ + constructor(options) { + /** @type {Record} */ + this.cache = {}; + /** @type {string} */ + this.cwd = options.cwd; + /** @type {boolean|undefined} */ + this.detect = options.detect; + /** @type {string[]} */ + this.names = options.names; + /** @type {Create} */ + this.create = options.create; - // reset output with globstar - state.output += prev.output; - state.globstar = true; - consume(value); - continue; - } + /** @type {string|undefined} */ + this.givenFilePath = options.filePath + ? path$c.resolve(options.cwd, options.filePath) + : undefined; - const token = { type: 'star', value, output: star }; + /* eslint-disable no-unused-expressions */ + /** @type {Error|Value|Callback[]|undefined} */ + this.givenFile; + /* eslint-enable no-unused-expressions */ + } - if (opts.bash === true) { - token.output = '.*?'; - if (prev.type === 'bos' || prev.type === 'slash') { - token.output = nodot + token.output; + /** + * @param {string} filePath + * @param {Callback} callback + */ + load(filePath, callback) { + const self = this; + const givenFile = this.givenFile; + const {givenFilePath} = this; + + if (givenFilePath) { + if (givenFile) { + apply(callback, givenFile); + } else { + const cbs = [callback]; + this.givenFile = cbs; + debug$b('Checking given file `%s`', givenFilePath); + fs$a.readFile(givenFilePath, (error, buf) => { + if (error) { + /** @type {NodeJS.ErrnoException} */ + const result = fault( + 'Cannot read given file `%s`\n%s', + path$c.relative(this.cwd, givenFilePath), + error.stack + ); + result.code = 'ENOENT'; + result.path = error.path; + result.syscall = error.syscall; + loaded(result); + } else { + wrap(this.create, (error, /** @type {Value} */ result) => { + if (error) { + debug$b(error.message); + loaded( + fault( + 'Cannot parse given file `%s`\n%s', + path$c.relative(this.cwd, givenFilePath), + error.stack + ) + ); + } else { + debug$b('Read given file `%s`', givenFilePath); + loaded(result); + } + })(buf, givenFilePath); + } + + /** @param {Error|Value} result */ + function loaded(result) { + self.givenFile = result; + applyAll(cbs, result); + } + }); } - push(token); - continue; + + return } - if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { - token.output = value; - push(token); - continue; + if (!this.detect) { + return callback(null) } - if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { - if (prev.type === 'dot') { - state.output += NO_DOT_SLASH; - prev.output += NO_DOT_SLASH; + filePath = path$c.resolve(this.cwd, filePath); + const parent = path$c.dirname(filePath); - } else if (opts.dot === true) { - state.output += NO_DOTS_SLASH; - prev.output += NO_DOTS_SLASH; + if (parent in this.cache) { + apply(callback, this.cache[parent]); + } else { + this.cache[parent] = [callback]; + find(parent); + } - } else { - state.output += nodot; - prev.output += nodot; - } + /** + * @param {string} directory + */ + function find(directory) { + let index = -1; - if (peek() !== '*') { - state.output += ONE_CHAR; - prev.output += ONE_CHAR; + next(); + + function next() { + // Try to read the next file. + // We do not use `readdir` because on huge directories, that could be + // *very* slow. + if (++index < self.names.length) { + fs$a.readFile(path$c.join(directory, self.names[index]), done); + } else { + const parent = path$c.dirname(directory); + + if (directory === parent) { + debug$b('No files found for `%s`', filePath); + found(null); + } else if (parent in self.cache) { + apply(found, self.cache[parent]); + } else { + self.cache[parent] = [found]; + find(parent); + } + } } - } - push(token); - } + /** + * @param {NodeJS.ErrnoException|null} error + * @param {Buffer} [buf] + * @returns {void} + */ + function done(error, buf) { + const fp = path$c.join(directory, self.names[index]); - while (state.brackets > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ']')); - state.output = utils$5.escapeLast(state.output, '['); - decrement('brackets'); - } + if (error) { + // Hard to test. + /* c8 ignore next 13 */ + if (error.code === 'ENOENT') { + return next() + } - while (state.parens > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', ')')); - state.output = utils$5.escapeLast(state.output, '('); - decrement('parens'); - } + debug$b(error.message); + return found( + fault( + 'Cannot read file `%s`\n%s', + path$c.relative(self.cwd, fp), + error.message + ) + ) + } - while (state.braces > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', '}')); - state.output = utils$5.escapeLast(state.output, '{'); - decrement('braces'); - } + wrap(self.create, (error, /** @type {Value} */ result) => { + if (error) { + found( + fault( + 'Cannot parse file `%s`\n%s', + path$c.relative(self.cwd, fp), + error.message + ) + ); + } else if (result) { + debug$b('Read file `%s`', fp); + found(null, result); + } else { + next(); + } + })(buf, fp); + } - if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { - push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); - } + /** + * @param {Error|null} error + * @param {Value} [result] + * @returns {void} + */ + function found(error, result) { + /** @type {Callback[]} */ + // @ts-expect-error: always a list if found. + const cbs = self.cache[directory]; + self.cache[directory] = error || result; + applyAll(cbs, error || result); + } + } - // rebuild the output if we had to backtrack at any point - if (state.backtrack === true) { - state.output = ''; + /** + * @param {Callback[]} cbs + * @param {Value|Error|undefined} result + */ + function applyAll(cbs, result) { + let index = cbs.length; - for (const token of state.tokens) { - state.output += token.output != null ? token.output : token.value; + while (index--) { + apply(cbs[index], result); + } + } - if (token.suffix) { - state.output += token.suffix; + /** + * @param {Callback} cb + * @param {Value|Error|Callback[]|undefined} result + */ + function apply(cb, result) { + if (Array.isArray(result)) { + result.push(cb); + } else if (result instanceof Error) { + cb(result); + } else { + cb(null, result); } } } - - return state; -}; +} /** - * Fast paths for creating regular expressions for common glob patterns. - * This can significantly speed up processing and has very little downside - * impact when none of the fast paths match. + * @typedef {import('unified').Plugin} Plugin + * @typedef {import('unified').PluginTuple} PluginTuple + * @typedef {import('unified').PluggableList} PluggableList + * + * @typedef {Record} Settings + * + * @typedef {Record} PluginIdObject + * @typedef {Array} PluginIdList + * + * @typedef Preset + * @property {Settings} [settings] + * @property {PluggableList|PluginIdObject|PluginIdList|undefined} [plugins] + * + * @typedef Config + * @property {Settings} [settings] + * @property {Array} [plugins] + * + * @callback ConfigTransform + * @param {any} config + * @param {string} filePath + * @returns {Preset} + * + * @callback Loader + * @param {Buffer} buf + * @param {string} filePath + * @returns {Promise} + * + * @callback Callback + * @param {Error|null} error + * @param {Config} [result] + * @returns {void} */ -parse$8.fastpaths = (input, options) => { - const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$4, opts.maxLength) : MAX_LENGTH$4; - const len = input.length; - if (len > max) { - throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); - } - - input = REPLACEMENTS[input] || input; - const win32 = utils$5.isWindows(options); +const debug$a = createDebug('unified-engine:configuration'); - // create constants based on platform, for windows or posix - const { - DOT_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - DOTS_SLASH, - NO_DOT, - NO_DOTS, - NO_DOTS_SLASH, - STAR, - START_ANCHOR - } = constants$4.globChars(win32); +const own$c = {}.hasOwnProperty; - const nodot = opts.dot ? NO_DOTS : NO_DOT; - const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; - const capture = opts.capture ? '' : '?:'; - const state = { negated: false, prefix: '' }; - let star = opts.bash === true ? '.*?' : STAR; +/** @type {Record} */ +const loaders = { + '.json': loadJson, + '.cjs': loadScriptOrModule, + '.mjs': loadScriptOrModule, + '.js': loadScriptOrModule, + '.yaml': loadYaml, + '.yml': loadYaml +}; - if (opts.capture) { - star = `(${star})`; - } +const defaultLoader = loadJson; - const globstar = opts => { - if (opts.noglobstar === true) return star; - return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; - }; +/** + * @typedef Options + * @property {string} cwd + * @property {string} [packageField] + * @property {string} [pluginPrefix] + * @property {string} [rcName] + * @property {string} [rcPath] + * @property {boolean} [detectConfig] + * @property {ConfigTransform} [configTransform] + * @property {Preset} [defaultConfig] + * @property {Preset['settings']} [settings] + * @property {Preset['plugins']} [plugins] + */ + +class Configuration { + /** + * @param {Options} options + */ + constructor(options) { + /** @type {string[]} */ + const names = []; - const create = str => { - switch (str) { - case '*': - return `${nodot}${ONE_CHAR}${star}`; + /** @type {string} */ + this.cwd = options.cwd; + /** @type {string|undefined} */ + this.packageField = options.packageField; + /** @type {string|undefined} */ + this.pluginPrefix = options.pluginPrefix; + /** @type {ConfigTransform|undefined} */ + this.configTransform = options.configTransform; + /** @type {Preset|undefined} */ + this.defaultConfig = options.defaultConfig; + + if (options.rcName) { + names.push( + options.rcName, + options.rcName + '.js', + options.rcName + '.yml', + options.rcName + '.yaml' + ); + debug$a('Looking for `%s` configuration files', names); + } - case '.*': - return `${DOT_LITERAL}${ONE_CHAR}${star}`; + if (options.packageField) { + names.push('package.json'); + debug$a( + 'Looking for `%s` fields in `package.json` files', + options.packageField + ); + } - case '*.*': - return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + /** @type {Preset} */ + this.given = {settings: options.settings, plugins: options.plugins}; + this.create = this.create.bind(this); - case '*/*': - return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + /** @type {FindUp} */ + this.findUp = new FindUp({ + cwd: options.cwd, + filePath: options.rcPath, + detect: options.detectConfig, + names, + create: this.create + }); + } - case '**': - return nodot + globstar(opts); + /** + * @param {string} filePath + * @param {Callback} callback + * @returns {void} + */ + load(filePath, callback) { + this.findUp.load( + filePath || path$c.resolve(this.cwd, 'stdin.js'), + (error, file) => { + if (error || file) { + return callback(error, file) + } - case '**/*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + this.create(undefined, undefined).then((result) => { + callback(null, result); + }, callback); + } + ); + } - case '**/*.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + /** + * @param {Buffer|undefined} buf + * @param {string|undefined} filePath + * @returns {Promise} + */ + async create(buf, filePath) { + const options = {prefix: this.pluginPrefix, cwd: this.cwd}; + const result = {settings: {}, plugins: []}; + const extname = filePath ? path$c.extname(filePath) : undefined; + const loader = + extname && extname in loaders ? loaders[extname] : defaultLoader; + /** @type {Preset|undefined} */ + let value; - case '**/.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + if (filePath && buf) { + value = await loader.call(this, buf, filePath); - default: { - const match = /^(.*?)\.(\w+)$/.exec(str); - if (!match) return; + if (this.configTransform && value !== undefined) { + value = this.configTransform(value, filePath); + } + } - const source = create(match[1]); - if (!source) return; + // Exit if we did find a `package.json`, but it does not have configuration. + if ( + filePath && + value === undefined && + path$c.basename(filePath) === 'package.json' + ) { + return + } - return source + DOT_LITERAL + match[2]; + if (value === undefined) { + if (this.defaultConfig) { + await merge( + result, + this.defaultConfig, + Object.assign({}, options, {root: this.cwd}) + ); } + } else { + await merge( + result, + value, + // @ts-expect-error: `value` can only exist if w/ `filePath`. + Object.assign({}, options, {root: path$c.dirname(filePath)}) + ); } - }; - const output = utils$5.removePrefix(input, state); - let source = create(output); + await merge( + result, + this.given, + Object.assign({}, options, {root: this.cwd}) + ); - if (source && opts.strictSlashes !== true) { - source += `${SLASH_LITERAL}?`; + // C8 bug on Node@12 + /* c8 ignore next 2 */ + return result } +} - return source; -}; +/** @type {Loader} */ +async function loadScriptOrModule(_, filePath) { + // C8 bug on Node@12 + /* c8 ignore next 4 */ + // @ts-expect-error: Assume it matches config. + // type-coverage:ignore-next-line + return loadFromAbsolutePath(filePath, this.cwd) +} + +/** @type {Loader} */ +async function loadYaml(buf, filePath) { + // C8 bug on Node@12 + /* c8 ignore next 4 */ + // @ts-expect-error: Assume it matches config. + return jsYaml.load(String(buf), {filename: path$c.basename(filePath)}) +} -var parse_1$3 = parse$8; +/** @type {Loader} */ +async function loadJson(buf, filePath) { + /** @type {Record} */ + const result = parseJson_1(String(buf), filePath); -const path$2 = require$$0__default$2['default']; -const scan = scan_1; -const parse$7 = parse_1$3; -const utils$4 = utils$7; -const constants$3 = constants$5; -const isObject$3 = val => val && typeof val === 'object' && !Array.isArray(val); + // C8 bug on Node@12 + /* c8 ignore next 8 */ + // @ts-expect-error: Assume it matches config. + return path$c.basename(filePath) === 'package.json' + ? // @ts-expect-error: `this` is the configuration context, TS doesn’t like + // `this` on callbacks. + // type-coverage:ignore-next-line + result[this.packageField] + : result +} /** - * Creates a matcher function from one or more glob patterns. The - * returned function takes a string to match as its first argument, - * and returns true if the string is a match. The returned matcher - * function also takes a boolean as the second argument that, when true, - * returns an object with additional information. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch(glob[, options]); - * - * const isMatch = picomatch('*.!(*a)'); - * console.log(isMatch('a.a')); //=> false - * console.log(isMatch('a.b')); //=> true - * ``` - * @name picomatch - * @param {String|Array} `globs` One or more glob patterns. - * @param {Object=} `options` - * @return {Function=} Returns a matcher function. - * @api public + * @param {Required} target + * @param {Preset} raw + * @param {{root: string, prefix: string|undefined}} options + * @returns {Promise} */ - -const picomatch$3 = (glob, options, returnState = false) => { - if (Array.isArray(glob)) { - const fns = glob.map(input => picomatch$3(input, options, returnState)); - const arrayMatcher = str => { - for (const isMatch of fns) { - const state = isMatch(str); - if (state) return state; - } - return false; - }; - return arrayMatcher; +async function merge(target, raw, options) { + if (typeof raw === 'object' && raw !== null) { + await addPreset(raw); + } else { + throw new Error('Expected preset, not `' + raw + '`') } - const isState = isObject$3(glob) && glob.tokens && glob.input; - - if (glob === '' || (typeof glob !== 'string' && !isState)) { - throw new TypeError('Expected pattern to be a non-empty string'); - } + // C8 bug on Node@12 + /* c8 ignore next 6 */ + return target - const opts = options || {}; - const posix = utils$4.isWindows(options); - const regex = isState - ? picomatch$3.compileRe(glob, options) - : picomatch$3.makeRe(glob, options, false, true); + /** + * @param {Preset} result + */ + async function addPreset(result) { + const plugins = result.plugins; - const state = regex.state; - delete regex.state; + if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && plugins !== null) { + await (Array.isArray(plugins) ? addEach(plugins) : addIn(plugins)); + } else { + throw new Error( + 'Expected a list or object of plugins, not `' + plugins + '`' + ) + } - let isIgnored = () => false; - if (opts.ignore) { - const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; - isIgnored = picomatch$3(opts.ignore, ignoreOpts, returnState); + target.settings = Object.assign({}, target.settings, result.settings); + // C8 bug on Node@12 + /* c8 ignore next 6 */ } - const matcher = (input, returnObject = false) => { - const { isMatch, match, output } = picomatch$3.test(input, regex, options, { glob, posix }); - const result = { glob, state, regex, posix, input, output, match, isMatch }; + /** + * @param {PluginIdList|PluggableList} result + */ + async function addEach(result) { + let index = -1; - if (typeof opts.onResult === 'function') { - opts.onResult(result); - } + while (++index < result.length) { + const value = result[index]; - if (isMatch === false) { - result.isMatch = false; - return returnObject ? result : false; + // Keep order sequential instead of parallel. + /* eslint-disable no-await-in-loop */ + // @ts-expect-error: Spreading is fine. + // type-coverage:ignore-next-line + await (Array.isArray(value) ? use(...value) : use(value, undefined)); + /* eslint-enable no-await-in-loop */ } + // C8 bug on Node@12 + /* c8 ignore next 6 */ + } - if (isIgnored(input)) { - if (typeof opts.onIgnore === 'function') { - opts.onIgnore(result); + /** + * @param {PluginIdObject} result + */ + async function addIn(result) { + /** @type {string} */ + let key; + + for (key in result) { + if (own$c.call(result, key)) { + // Keep order sequential instead of parallel. + // eslint-disable-next-line no-await-in-loop + await use(key, result[key]); } - result.isMatch = false; - return returnObject ? result : false; } + // C8 bug on Node@12 + /* c8 ignore next 7 */ + } - if (typeof opts.onMatch === 'function') { - opts.onMatch(result); + /** + * @param {string|Plugin|Preset} usable + * @param {Settings|null|undefined} value + */ + async function use(usable, value) { + if (typeof usable === 'string') { + await addModule(usable, value); + } else if (typeof usable === 'function') { + addPlugin(usable, value); + } else { + await merge(target, usable, options); } - return returnObject ? result : true; - }; - - if (returnState) { - matcher.state = state; + // C8 bug on Node@12 + /* c8 ignore next 7 */ } - return matcher; -}; + /** + * @param {string} id + * @param {Settings|null|undefined} value + */ + async function addModule(id, value) { + /** @type {string} */ + let fp; -/** - * Test `input` with the given `regex`. This is used by the main - * `picomatch()` function to test the input string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.test(input, regex[, options]); - * - * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); - * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } - * ``` - * @param {String} `input` String to test. - * @param {RegExp} `regex` - * @return {Object} Returns an object with matching info. - * @api public - */ + try { + fp = await resolvePlugin(id, { + cwd: options.root, + prefix: options.prefix + }); + } catch (error) { + addPlugin(() => { + throw fault('Could not find module `%s`\n%s', id, error.stack) + }, value); + return + } -picomatch$3.test = (input, regex, options, { glob, posix } = {}) => { - if (typeof input !== 'string') { - throw new TypeError('Expected input to be a string'); - } + const result = await loadFromAbsolutePath(fp, options.root); - if (input === '') { - return { isMatch: false, output: '' }; + try { + if (typeof result === 'function') { + addPlugin(result, value); + } else { + await merge( + target, + result, + Object.assign({}, options, {root: path$c.dirname(fp)}) + ); + } + } catch { + throw fault( + 'Error: Expected preset or plugin, not %s, at `%s`', + result, + path$c.relative(options.root, fp) + ) + } + // C8 bug on Node@12 + /* c8 ignore next 8 */ } - const opts = options || {}; - const format = opts.format || (posix ? utils$4.toPosixSlashes : null); - let match = input === glob; - let output = (match && format) ? format(input) : input; + /** + * @param {Plugin} plugin + * @param {Settings|null|undefined} value + * @returns {void} + */ + function addPlugin(plugin, value) { + const entry = find(target.plugins, plugin); - if (match === false) { - output = format ? format(input) : input; - match = output === glob; - } + if (value === null) { + value = undefined; + } - if (match === false || opts.capture === true) { - if (opts.matchBase === true || opts.basename === true) { - match = picomatch$3.matchBase(input, regex, options, posix); + if (entry) { + reconfigure(entry, value); } else { - match = regex.exec(output); + target.plugins.push([plugin, value]); } } - - return { isMatch: Boolean(match), match, output }; -}; +} /** - * Match the basename of a filepath. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.matchBase(input, glob[, options]); - * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true - * ``` - * @param {String} `input` String to test. - * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). - * @return {Boolean} - * @api public + * @param {PluginTuple} entry + * @param {Settings|undefined} value + * @returns {void} */ +function reconfigure(entry, value) { + if (isPlainObject$1(entry[1]) && isPlainObject$1(value)) { + value = Object.assign({}, entry[1], value); + } -picomatch$3.matchBase = (input, glob, options, posix = utils$4.isWindows(options)) => { - const regex = glob instanceof RegExp ? glob : picomatch$3.makeRe(glob, options); - return regex.test(path$2.basename(input)); -}; + entry[1] = value; +} /** - * Returns true if **any** of the given glob `patterns` match the specified `string`. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.isMatch(string, patterns[, options]); - * - * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true - * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false - * ``` - * @param {String|Array} str The string to test. - * @param {String|Array} patterns One or more glob patterns to use for matching. - * @param {Object} [options] See available [options](#options). - * @return {Boolean} Returns true if any patterns match `str` - * @api public + * @param {Array} entries + * @param {Plugin} plugin + * @returns {PluginTuple|undefined} */ +function find(entries, plugin) { + let index = -1; -picomatch$3.isMatch = (str, patterns, options) => picomatch$3(patterns, options)(str); + while (++index < entries.length) { + const entry = entries[index]; + if (entry[0] === plugin) { + return entry + } + } +} /** - * Parse a glob pattern to create the source string for a regular - * expression. - * - * ```js - * const picomatch = require('picomatch'); - * const result = picomatch.parse(pattern[, options]); - * ``` - * @param {String} `pattern` - * @param {Object} `options` - * @return {Object} Returns an object with useful properties and output to be used as a regex source string. - * @api public + * @param {string} fp + * @param {string} base + * @returns {Promise} */ +async function loadFromAbsolutePath(fp, base) { + try { + /** @type {{default?: unknown}} */ + const result = await import(pathToFileURL$1(fp).href); -picomatch$3.parse = (pattern, options) => { - if (Array.isArray(pattern)) return pattern.map(p => picomatch$3.parse(p, options)); - return parse$7(pattern, { ...options, fastpaths: false }); -}; + if (!('default' in result)) { + throw new Error( + 'Expected a plugin or preset exported as the default export' + ) + } + + // @ts-expect-error: assume plugin/preset. + return result.default + // C8 bug on Node@12 + /* c8 ignore next 4 */ + } catch (error) { + throw fault('Cannot import `%s`\n%s', path$c.relative(base, fp), error.stack) + } +} /** - * Scan a glob pattern to separate the pattern into segments. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.scan(input[, options]); - * - * const result = picomatch.scan('!./foo/*.js'); - * console.log(result); - * { prefix: '!./', - * input: '!./foo/*.js', - * start: 3, - * base: 'foo', - * glob: '*.js', - * isBrace: false, - * isBracket: false, - * isGlob: true, - * isExtglob: false, - * isGlobstar: false, - * negated: true } - * ``` - * @param {String} `input` Glob pattern to scan. - * @param {Object} `options` - * @return {Object} Returns an object with - * @api public + * @typedef {import('./index.js').Settings} Settings */ -picomatch$3.scan = (input, options) => scan(input, options); - /** - * Compile a regular expression from the `state` object returned by the - * [parse()](#parse) method. - * - * @param {Object} `state` - * @param {Object} `options` - * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. - * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. - * @return {RegExp} - * @api public + * @param {Context} context + * @param {Settings} settings */ +function configure$3(context, settings) { + context.configuration = new Configuration(settings); +} -picomatch$3.compileRe = (state, options, returnOutput = false, returnState = false) => { - if (returnOutput === true) { - return state.output; - } - - const opts = options || {}; - const prepend = opts.contains ? '' : '^'; - const append = opts.contains ? '' : '$'; - - let source = `${prepend}(?:${state.output})${append}`; - if (state && state.negated === true) { - source = `^(?!${source}).*$`; - } - - const regex = picomatch$3.toRegex(source, options); - if (returnState === true) { - regex.state = state; - } - - return regex; -}; +// A simple implementation of make-array +function makeArray (subject) { + return Array.isArray(subject) + ? subject + : [subject] +} -/** - * Create a regular expression from a parsed glob pattern. - * - * ```js - * const picomatch = require('picomatch'); - * const state = picomatch.parse('*.js'); - * // picomatch.compileRe(state[, options]); - * - * console.log(picomatch.compileRe(state)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `state` The object returned from the `.parse` method. - * @param {Object} `options` - * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. - * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. - * @return {RegExp} Returns a regex created from the given pattern. - * @api public - */ +const EMPTY = ''; +const SPACE = ' '; +const ESCAPE = '\\'; +const REGEX_TEST_BLANK_LINE = /^\s+$/; +const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; +const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; +const REGEX_SPLITALL_CRLF = /\r?\n/g; +// /foo, +// ./foo, +// ../foo, +// . +// .. +const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; -picomatch$3.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { - if (!input || typeof input !== 'string') { - throw new TypeError('Expected a non-empty string'); - } +const SLASH = '/'; +const KEY_IGNORE = typeof Symbol !== 'undefined' + ? Symbol.for('node-ignore') + /* istanbul ignore next */ + : 'node-ignore'; - let parsed = { negated: false, fastpaths: true }; +const define = (object, key, value) => + Object.defineProperty(object, key, {value}); - if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { - parsed.output = parse$7.fastpaths(input, options); - } +const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; - if (!parsed.output) { - parsed = parse$7(input, options); - } +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +const sanitizeRange = range => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) + ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY +); - return picomatch$3.compileRe(parsed, options, returnOutput, returnState); +// See fixtures #59 +const cleanRangeBackSlash = slashes => { + const {length} = slashes; + return slashes.slice(0, length - length % 2) }; -/** - * Create a regular expression from the given regex source string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.toRegex(source[, options]); - * - * const { output } = picomatch.parse('*.js'); - * console.log(picomatch.toRegex(output)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `source` Regular expression source string. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` -picomatch$3.toRegex = (source, options) => { - try { - const opts = options || {}; - return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); - } catch (err) { - if (options && options.debug === true) throw err; - return /$^/; - } -}; +// '`foo/`' should not continue with the '`..`' +const REPLACERS = [ -/** - * Picomatch constants. - * @return {Object} - */ + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a \ ) -> (a ) + /\\?\s+$/, + match => match.indexOf('\\') === 0 + ? SPACE + : EMPTY + ], -picomatch$3.constants = constants$3; + // replace (\ ) with ' ' + [ + /\\\s/g, + () => SPACE + ], -/** - * Expose "picomatch" - */ + // Escape metacharacters + // which is written down by users but means special for regular expressions. -var picomatch_1 = picomatch$3; + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + match => `\\${match}` + ], -var picomatch$2 = picomatch_1; + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => '[^/]' + ], -const fs$3 = require$$0__default$3['default']; -const { Readable } = require$$0__default$5['default']; -const sysPath$3 = require$$0__default$2['default']; -const { promisify: promisify$3 } = require$$0__default['default']; -const picomatch$1 = picomatch$2; + // leading slash + [ -const readdir$1 = promisify$3(fs$3.readdir); -const stat$3 = promisify$3(fs$3.stat); -const lstat$2 = promisify$3(fs$3.lstat); -const realpath$1 = promisify$3(fs$3.realpath); + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => '^' + ], -/** - * @typedef {Object} EntryInfo - * @property {String} path - * @property {String} fullPath - * @property {fs.Stats=} stats - * @property {fs.Dirent=} dirent - * @property {String} basename - */ + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => '\\/' + ], -const BANG$2 = '!'; -const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; -const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); -const FILE_TYPE = 'files'; -const DIR_TYPE = 'directories'; -const FILE_DIR_TYPE = 'files_directories'; -const EVERYTHING_TYPE = 'all'; -const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, -const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); -const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); -const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); + // '**/foo' <-> 'foo' + () => '^(?:.*\\/)?' + ], -const normalizeFilter = filter => { - if (filter === undefined) return; - if (typeof filter === 'function') return filter; + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + function startingReplacer () { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern - if (typeof filter === 'string') { - const glob = picomatch$1(filter.trim()); - return entry => glob(entry.basename); - } + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' - if (Array.isArray(filter)) { - const positive = []; - const negative = []; - for (const item of filter) { - const trimmed = item.trim(); - if (trimmed.charAt(0) === BANG$2) { - negative.push(picomatch$1(trimmed.slice(1))); - } else { - positive.push(picomatch$1(trimmed)); - } + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^' } + ], - if (negative.length > 0) { - if (positive.length > 0) { - return entry => - positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); - } - return entry => !negative.some(f => f(entry.basename)); - } - return entry => positive.some(f => f(entry.basename)); - } -}; + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, -class ReaddirpStream extends Readable { - static get defaultOptions() { - return { - root: '.', - /* eslint-disable no-unused-vars */ - fileFilter: (path) => true, - directoryFilter: (path) => true, - /* eslint-enable no-unused-vars */ - type: FILE_TYPE, - lstat: false, - depth: 2147483648, - alwaysStat: false - }; - } + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer - constructor(options = {}) { - super({ - objectMode: true, - autoDestroy: true, - highWaterMark: options.highWaterMark || 4096 - }); - const opts = { ...ReaddirpStream.defaultOptions, ...options }; - const { root, type } = opts; + // Check if it is not the last `'/**'` + (_, index, str) => index + 6 < str.length - this._fileFilter = normalizeFilter(opts.fileFilter); - this._directoryFilter = normalizeFilter(opts.directoryFilter); + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' - const statMethod = opts.lstat ? lstat$2 : stat$3; - // Use bigint stats if it's windows and stat() supports options (node 10+). - if (wantBigintFsStats) { - this._stat = path => statMethod(path, { bigint: true }); - } else { - this._stat = statMethod; - } + // case: /** + // > A trailing `"/**"` matches everything inside. - this._maxDepth = opts.depth; - this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); - this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); - this._wantsEverything = type === EVERYTHING_TYPE; - this._root = sysPath$3.resolve(root); - this._isDirent = ('Dirent' in fs$3) && !opts.alwaysStat; - this._statsProp = this._isDirent ? 'dirent' : 'stats'; - this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; + // #21: everything inside but it should not include the current folder + : '\\/.+' + ], - // Launch stream with one parent, the root dir. - this.parents = [this._exploreDir(root, 1)]; - this.reading = false; - this.parent = undefined; - } + // intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' - async _read(batch) { - if (this.reading) return; - this.reading = true; + // 'abc.*/' -> go + // 'abc.*' -> skip this rule + /(^|[^\\]+)\\\*(?=.+)/g, - try { - while (!this.destroyed && batch > 0) { - const { path, depth, files = [] } = this.parent || {}; + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1) => `${p1}[^\\/]*` + ], - if (files.length > 0) { - const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); - for (const entry of await Promise.all(slice)) { - if (this.destroyed) return; + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], - const entryType = await this._getEntryType(entry); - if (entryType === 'directory' && this._directoryFilter(entry)) { - if (depth <= this._maxDepth) { - this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); - } + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], - if (this._wantsDir) { - this.push(entry); - batch--; - } - } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { - if (this._wantsFile) { - this.push(entry); - batch--; - } - } - } - } else { - const parent = this.parents.pop(); - if (!parent) { - this.push(null); - break; - } - this.parent = await parent; - if (this.destroyed) return; - } - } - } catch (error) { - this.destroy(error); - } finally { - this.reading = false; - } - } + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. - async _exploreDir(path, depth) { - let files; - try { - files = await readdir$1(path, this._rdOptions); - } catch (error) { - this._onError(error); - } - return { files, depth, path }; - } + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` + : close === ']' + ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? `[${sanitizeRange(range)}${endEscape}]` + // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' + : '[]' + ], - async _formatEntry(dirent, path) { - let entry; - try { - const basename = this._isDirent ? dirent.name : dirent; - const fullPath = sysPath$3.resolve(sysPath$3.join(path, basename)); - entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename }; - entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); - } catch (err) { - this._onError(err); - } - return entry; - } + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, - _onError(err) { - if (isNormalFlowError(err) && !this.destroyed) { - this.emit('warn', err); - } else { - this.destroy(err); - } - } + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 - async _getEntryType(entry) { - // entry may be undefined, because a warning or an error were emitted - // and the statsProp is undefined - const stats = entry && entry[this._statsProp]; - if (!stats) { - return; - } - if (stats.isFile()) { - return 'file'; - } - if (stats.isDirectory()) { - return 'directory'; - } - if (stats && stats.isSymbolicLink()) { - const full = entry.fullPath; - try { - const entryRealPath = await realpath$1(full); - const entryRealPathStats = await lstat$2(entryRealPath); - if (entryRealPathStats.isFile()) { - return 'file'; - } - if (entryRealPathStats.isDirectory()) { - const len = entryRealPath.length; - if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) { - const recursiveError = new Error( - `Circular symlink detected: "${full}" points to "${entryRealPath}"` - ); - recursiveError.code = RECURSIVE_ERROR_CODE; - return this._onError(recursiveError); - } - return 'directory'; - } - } catch (error) { - this._onError(error); - } - } - } + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. - _includeAsFile(entry) { - const stats = entry && entry[this._statsProp]; + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + match => /\/$/.test(match) + // foo/ will not match 'foo' + ? `${match}$` + // foo matches 'foo' and 'foo/' + : `${match}(?=$|\\/$)` + ], - return stats && this._wantsEverything && !stats.isDirectory(); - } -} + // trailing wildcard + [ + /(\^|\\\/)?\\\*$/, + (_, p1) => { + const prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything -/** - * @typedef {Object} ReaddirpArguments - * @property {Function=} fileFilter - * @property {Function=} directoryFilter - * @property {String=} type - * @property {Number=} depth - * @property {String=} root - * @property {Boolean=} lstat - * @property {Boolean=} bigint - */ + // '\\\/': + // 'abc/*' does not match 'abc/' + ? `${p1}[^/]+` -/** - * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. - * @param {String} root Root directory - * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth - */ -const readdirp$1 = (root, options = {}) => { - let type = options.entryType || options.type; - if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility - if (type) options.type = type; - if (!root) { - throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); - } else if (typeof root !== 'string') { - throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); - } else if (type && !ALL_TYPES.includes(type)) { - throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); - } + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*'; - options.root = root; - return new ReaddirpStream(options); -}; + return `${prefix}(?=$|\\/$)` + } + ], +]; -const readdirpPromise = (root, options = {}) => { - return new Promise((resolve, reject) => { - const files = []; - readdirp$1(root, options) - .on('data', entry => files.push(entry)) - .on('end', () => resolve(files)) - .on('error', error => reject(error)); - }); -}; +// A simple cache, because an ignore rule only has only one certain meaning +const regexCache = Object.create(null); -readdirp$1.promise = readdirpPromise; -readdirp$1.ReaddirpStream = ReaddirpStream; -readdirp$1.default = readdirp$1; +// @param {pattern} +const makeRegex = (pattern, negative, ignorecase) => { + const r = regexCache[pattern]; + if (r) { + return r + } -var readdirp_1 = readdirp$1; + // const replacers = negative + // ? NEGATIVE_REPLACERS + // : POSITIVE_REPLACERS -var anymatch$2 = {exports: {}}; + const source = REPLACERS.reduce( + (prev, current) => prev.replace(current[0], current[1].bind(pattern)), + pattern + ); -/*! - * normalize-path - * - * Copyright (c) 2014-2018, Jon Schlinkert. - * Released under the MIT License. - */ + return regexCache[pattern] = ignorecase + ? new RegExp(source, 'i') + : new RegExp(source) +}; -var normalizePath$2 = function(path, stripTrailing) { - if (typeof path !== 'string') { - throw new TypeError('expected path to be a string'); - } +const isString = subject => typeof subject === 'string'; - if (path === '\\' || path === '/') return '/'; +// > A blank line matches no files, so it can serve as a separator for readability. +const checkPattern = pattern => pattern + && isString(pattern) + && !REGEX_TEST_BLANK_LINE.test(pattern) - var len = path.length; - if (len <= 1) return path; + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0; - // ensure that win32 namespaces has two leading slashes, so that the path is - // handled properly by the win32 version of path.parse() after being normalized - // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces - var prefix = ''; - if (len > 4 && path[3] === '\\') { - var ch = path[2]; - if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { - path = path.slice(2); - prefix = '//'; - } +const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF); + +class IgnoreRule { + constructor ( + origin, + pattern, + negative, + regex + ) { + this.origin = origin; + this.pattern = pattern; + this.negative = negative; + this.regex = regex; } +} - var segs = path.split(/[/\\]+/); - if (stripTrailing !== false && segs[segs.length - 1] === '') { - segs.pop(); +const createRule = (pattern, ignorecase) => { + const origin = pattern; + let negative = false; + + // > An optional prefix "!" which negates the pattern; + if (pattern.indexOf('!') === 0) { + negative = true; + pattern = pattern.substr(1); } - return prefix + segs.join('/'); -}; -Object.defineProperty(anymatch$2.exports, "__esModule", { value: true }); + pattern = pattern + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); -const picomatch = picomatch$2; -const normalizePath$1 = normalizePath$2; + const regex = makeRegex(pattern, negative, ignorecase); -/** - * @typedef {(testString: string) => boolean} AnymatchFn - * @typedef {string|RegExp|AnymatchFn} AnymatchPattern - * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher - */ -const BANG$1 = '!'; -const DEFAULT_OPTIONS = {returnIndex: false}; -const arrify$1 = (item) => Array.isArray(item) ? item : [item]; + return new IgnoreRule( + origin, + pattern, + negative, + regex + ) +}; -/** - * @param {AnymatchPattern} matcher - * @param {object} options - * @returns {AnymatchFn} - */ -const createPattern = (matcher, options) => { - if (typeof matcher === 'function') { - return matcher; - } - if (typeof matcher === 'string') { - const glob = picomatch(matcher, options); - return (string) => matcher === string || glob(string); - } - if (matcher instanceof RegExp) { - return (string) => matcher.test(string); - } - return (string) => false; +const throwError = (message, Ctor) => { + throw new Ctor(message) }; -/** - * @param {Array} patterns - * @param {Array} negPatterns - * @param {String|Array} args - * @param {Boolean} returnIndex - * @returns {boolean|number} - */ -const matchPatterns = (patterns, negPatterns, args, returnIndex) => { - const isList = Array.isArray(args); - const _path = isList ? args[0] : args; - if (!isList && typeof _path !== 'string') { - throw new TypeError('anymatch: second argument must be a string: got ' + - Object.prototype.toString.call(_path)) +const checkPath = (path, originalPath, doThrow) => { + if (!isString(path)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ) } - const path = normalizePath$1(_path); - for (let index = 0; index < negPatterns.length; index++) { - const nglob = negPatterns[index]; - if (nglob(path)) { - return returnIndex ? -1 : false; - } + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow(`path must not be empty`, TypeError) } - const applied = isList && [path].concat(args.slice(1)); - for (let index = 0; index < patterns.length; index++) { - const pattern = patterns[index]; - if (isList ? pattern(...applied) : pattern(path)) { - return returnIndex ? index : true; - } + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + const r = '`path.relative()`d'; + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ) } - return returnIndex ? -1 : false; + return true }; -/** - * @param {AnymatchMatcher} matchers - * @param {Array|string} testString - * @param {object} options - * @returns {boolean|number|Function} - */ -const anymatch$1 = (matchers, testString, options = DEFAULT_OPTIONS) => { - if (matchers == null) { - throw new TypeError('anymatch: specify first argument'); - } - const opts = typeof options === 'boolean' ? {returnIndex: options} : options; - const returnIndex = opts.returnIndex || false; +const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path); - // Early cache for matchers. - const mtchers = arrify$1(matchers); - const negatedGlobs = mtchers - .filter(item => typeof item === 'string' && item.charAt(0) === BANG$1) - .map(item => item.slice(1)) - .map(item => picomatch(item, opts)); - const patterns = mtchers - .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG$1)) - .map(matcher => createPattern(matcher, opts)); +checkPath.isNotRelative = isNotRelative; +checkPath.convert = p => p; - if (testString == null) { - return (testString, ri = false) => { - const returnIndex = typeof ri === 'boolean' ? ri : false; - return matchPatterns(patterns, negatedGlobs, testString, returnIndex); - } +class Ignore$1 { + constructor ({ + ignorecase = true + } = {}) { + this._rules = []; + this._ignorecase = ignorecase; + define(this, KEY_IGNORE, true); + this._initCache(); } - return matchPatterns(patterns, negatedGlobs, testString, returnIndex); -}; - -anymatch$1.default = anymatch$1; -anymatch$2.exports = anymatch$1; - -/*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - -var isExtglob$1 = function isExtglob(str) { - if (typeof str !== 'string' || str === '') { - return false; + _initCache () { + this._ignoreCache = Object.create(null); + this._testCache = Object.create(null); } - var match; - while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { - if (match[2]) return true; - str = str.slice(match.index + match[0].length); + _addPattern (pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules); + this._added = true; + return + } + + if (checkPattern(pattern)) { + const rule = createRule(pattern, this._ignorecase); + this._added = true; + this._rules.push(rule); + } } - return false; -}; + // @param {Array | string | Ignore} pattern + add (pattern) { + this._added = false; -/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ + makeArray( + isString(pattern) + ? splitPattern(pattern) + : pattern + ).forEach(this._addPattern, this); -var isExtglob = isExtglob$1; -var chars = { '{': '}', '(': ')', '[': ']'}; -var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; -var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; + // Some rules have just added to the ignore, + // making the behavior changed. + if (this._added) { + this._initCache(); + } -var isGlob$2 = function isGlob(str, options) { - if (typeof str !== 'string' || str === '') { - return false; + return this } - if (isExtglob(str)) { - return true; + // legacy + addPattern (pattern) { + return this.add(pattern) } - var regex = strictRegex; - var match; + // | ignored : unignored + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X - // optionally relax regex - if (options && options.strict === false) { - regex = relaxedRegex; - } + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen - while ((match = regex.exec(str))) { - if (match[2]) return true; - var idx = match.index + match[0].length; + // @param {boolean} whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. - // if an open bracket/brace/paren is escaped, - // set the index to the next closing character - var open = match[1]; - var close = open ? chars[open] : null; - if (open && close) { - var n = str.indexOf(close, idx); - if (n !== -1) { - idx = n + 1; + // @returns {TestResult} true if a file is ignored + _testOne (path, checkUnignored) { + let ignored = false; + let unignored = false; + + this._rules.forEach(rule => { + const {negative} = rule; + if ( + unignored === negative && ignored !== unignored + || negative && !ignored && !unignored && !checkUnignored + ) { + return } - } - str = str.slice(idx); - } - return false; -}; + const matched = rule.regex.test(path); -var isGlob$1 = isGlob$2; -var pathPosixDirname = require$$0__default$2['default'].posix.dirname; -var isWin32 = require$$0__default$1['default'].platform() === 'win32'; + if (matched) { + ignored = !negative; + unignored = negative; + } + }); -var slash = '/'; -var backslash = /\\/g; -var enclosure = /[\{\[].*[\}\]]$/; -var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; -var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + return { + ignored, + unignored + } + } -/** - * @param {string} str - * @param {Object} opts - * @param {boolean} [opts.flipBackslashes=true] - * @returns {string} - */ -var globParent$1 = function globParent(str, opts) { - var options = Object.assign({ flipBackslashes: true }, opts); + // @returns {TestResult} + _test (originalPath, cache, checkUnignored, slices) { + const path = originalPath + // Supports nullable path + && checkPath.convert(originalPath); - // flip windows path separators - if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { - str = str.replace(backslash, slash); - } + checkPath(path, originalPath, throwError); - // special case for strings ending in enclosure containing path separator - if (enclosure.test(str)) { - str += slash; + return this._t(path, cache, checkUnignored, slices) } - // preserves full path in case of trailing path separator - str += 'a'; + _t (path, cache, checkUnignored, slices) { + if (path in cache) { + return cache[path] + } - // remove path parts that are globby - do { - str = pathPosixDirname(str); - } while (isGlob$1(str) || globby.test(str)); + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH); + } - // remove escape chars and return result - return str.replace(escaped, '$1'); -}; + slices.pop(); -var utils$3 = {}; + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._testOne(path, checkUnignored) + } -(function (exports) { + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ); -exports.isInteger = num => { - if (typeof num === 'number') { - return Number.isInteger(num); + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent + : this._testOne(path, checkUnignored) } - if (typeof num === 'string' && num.trim() !== '') { - return Number.isInteger(Number(num)); + + ignores (path) { + return this._test(path, this._ignoreCache, false).ignored } - return false; -}; -/** - * Find a node of the given type - */ + createFilter () { + return path => !this.ignores(path) + } -exports.find = (node, type) => node.nodes.find(node => node.type === type); + filter (paths) { + return makeArray(paths).filter(this.createFilter()) + } -/** - * Find a node of the given type - */ + // @returns {TestResult} + test (path) { + return this._test(path, this._testCache, true) + } +} -exports.exceedsLimit = (min, max, step = 1, limit) => { - if (limit === false) return false; - if (!exports.isInteger(min) || !exports.isInteger(max)) return false; - return ((Number(max) - Number(min)) / Number(step)) >= limit; -}; +const factory$1 = options => new Ignore$1(options); -/** - * Escape the given node with '\\' before node.value - */ +const returnFalse = () => false; -exports.escapeNode = (block, n = 0, type) => { - let node = block.nodes[n]; - if (!node) return; +const isPathValid = path => + checkPath(path && checkPath.convert(path), path, returnFalse); - if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { - if (node.escaped !== true) { - node.value = '\\' + node.value; - node.escaped = true; - } - } -}; +factory$1.isPathValid = isPathValid; -/** - * Returns true if the given brace node should be enclosed in literal braces - */ +// Fixes typescript +factory$1.default = factory$1; -exports.encloseBrace = node => { - if (node.type !== 'brace') return false; - if ((node.commas >> 0 + node.ranges >> 0) === 0) { - node.invalid = true; - return true; - } - return false; -}; +var ignore = factory$1; + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore if */ +if ( + // Detect `process` so that it can run in browsers. + typeof process !== 'undefined' + && ( + process.env && process.env.IGNORE_TEST_WIN32 + || process.platform === 'win32' + ) +) { + /* eslint no-control-regex: "off" */ + const makePosix = str => /^\\\\\?\\/.test(str) + || /["<>|\u0000-\u001F]+/u.test(str) + ? str + : str.replace(/\\/g, '/'); + + checkPath.convert = makePosix; + + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; + checkPath.isNotRelative = path => + REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) + || isNotRelative(path); +} /** - * Returns true if a brace node is invalid. + * @typedef {import('ignore').Ignore & {filePath: string}} IgnoreConfig + * + * @typedef {'cwd'|'dir'} ResolveFrom + * + * @typedef Options + * @property {string} cwd + * @property {boolean|undefined} detectIgnore + * @property {string|undefined} ignoreName + * @property {string|undefined} ignorePath + * @property {ResolveFrom|undefined} ignorePathResolveFrom + * + * @callback Callback + * @param {Error|null} error + * @param {boolean|undefined} [result] */ -exports.isInvalidBrace = block => { - if (block.type !== 'brace') return false; - if (block.invalid === true || block.dollar) return true; - if ((block.commas >> 0 + block.ranges >> 0) === 0) { - block.invalid = true; - return true; - } - if (block.open !== true || block.close !== true) { - block.invalid = true; - return true; +class Ignore { + /** + * @param {Options} options + */ + constructor(options) { + /** @type {string} */ + this.cwd = options.cwd; + /** @type {ResolveFrom|undefined} */ + this.ignorePathResolveFrom = options.ignorePathResolveFrom; + + /** @type {FindUp} */ + this.findUp = new FindUp({ + cwd: options.cwd, + filePath: options.ignorePath, + detect: options.detectIgnore, + names: options.ignoreName ? [options.ignoreName] : [], + create + }); } - return false; -}; -/** - * Returns true if a node is an open or close node - */ + /** + * @param {string} filePath + * @param {Callback} callback + */ + check(filePath, callback) { + this.findUp.load(filePath, (error, ignoreSet) => { + if (error) { + callback(error); + } else if (ignoreSet) { + const normal = path$c.relative( + path$c.resolve( + this.cwd, + this.ignorePathResolveFrom === 'cwd' ? '.' : ignoreSet.filePath + ), + path$c.resolve(this.cwd, filePath) + ); -exports.isOpenOrClose = node => { - if (node.type === 'open' || node.type === 'close') { - return true; + if ( + normal === '' || + normal === '..' || + normal.charAt(0) === path$c.sep || + normal.slice(0, 3) === '..' + path$c.sep + ) { + callback(null, false); + } else { + callback(null, ignoreSet.ignores(normal)); + } + } else { + callback(null, false); + } + }); } - return node.open === true || node.close === true; -}; +} /** - * Reduce an array of text nodes. + * @param {Buffer} buf + * @param {string} filePath + * @returns {IgnoreConfig} */ +function create(buf, filePath) { + /** @type {IgnoreConfig} */ + return Object.assign(ignore().add(String(buf)), { + filePath: path$c.dirname(filePath) + }) +} -exports.reduce = nodes => nodes.reduce((acc, node) => { - if (node.type === 'text') acc.push(node.value); - if (node.type === 'range') node.type = 'text'; - return acc; -}, []); +var old$1 = {}; -/** - * Flatten an array - */ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -exports.flatten = (...args) => { - const result = []; - const flat = arr => { - for (let i = 0; i < arr.length; i++) { - let ele = arr[i]; - Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele); - } - return result; - }; - flat(args); - return result; -}; -}(utils$3)); +var pathModule = path$b; +var isWindows = process.platform === 'win32'; +var fs$3 = require$$0$3; -const utils$2 = utils$3; +// JavaScript implementation of realpath, ported from node pre-v6 -var stringify$8 = (ast, options = {}) => { - let stringify = (node, parent = {}) => { - let invalidBlock = options.escapeInvalid && utils$2.isInvalidBrace(parent); - let invalidNode = node.invalid === true && options.escapeInvalid === true; - let output = ''; +var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); - if (node.value) { - if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) { - return '\\' + node.value; - } - return node.value; - } +function rethrow() { + // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and + // is fairly slow to generate. + var callback; + if (DEBUG) { + var backtrace = new Error; + callback = debugCallback; + } else + callback = missingCallback; - if (node.value) { - return node.value; + return callback; + + function debugCallback(err) { + if (err) { + backtrace.message = err.message; + err = backtrace; + missingCallback(err); } + } - if (node.nodes) { - for (let child of node.nodes) { - output += stringify(child); + function missingCallback(err) { + if (err) { + if (process.throwDeprecation) + throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs + else if (!process.noDeprecation) { + var msg = 'fs: missing callback ' + (err.stack || err.message); + if (process.traceDeprecation) + console.trace(msg); + else + console.error(msg); } } - return output; - }; + } +} - return stringify(ast); -}; +function maybeCallback(cb) { + return typeof cb === 'function' ? cb : rethrow(); +} -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ +pathModule.normalize; -var isNumber$3 = function(num) { - if (typeof num === 'number') { - return num - num === 0; - } - if (typeof num === 'string' && num.trim() !== '') { - return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); - } - return false; -}; +// Regexp that finds the next partion of a (partial) path +// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] +if (isWindows) { + var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; +} else { + var nextPartRe = /(.*?)(?:[\/]+|$)/g; +} -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ +// Regex to find the device root, including trailing slash. E.g. 'c:\\'. +if (isWindows) { + var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; +} else { + var splitRootRe = /^[\/]*/; +} -const isNumber$2 = isNumber$3; +old$1.realpathSync = function realpathSync(p, cache) { + // make p is absolute + p = pathModule.resolve(p); -const toRegexRange$1 = (min, max, options) => { - if (isNumber$2(min) === false) { - throw new TypeError('toRegexRange: expected the first argument to be a number'); + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return cache[p]; } - if (max === void 0 || min === max) { - return String(min); - } + var original = p, + seenLinks = {}, + knownHard = {}; - if (isNumber$2(max) === false) { - throw new TypeError('toRegexRange: expected the second argument to be a number.'); - } + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; - let opts = { relaxZeros: true, ...options }; - if (typeof opts.strictZeros === 'boolean') { - opts.relaxZeros = opts.strictZeros === false; - } + start(); - let relax = String(opts.relaxZeros); - let shorthand = String(opts.shorthand); - let capture = String(opts.capture); - let wrap = String(opts.wrap); - let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; - if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) { - return toRegexRange$1.cache[cacheKey].result; + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs$3.lstatSync(base); + knownHard[base] = true; + } } - let a = Math.min(min, max); - let b = Math.max(min, max); + // walk down the path, swapping out linked pathparts for their real + // values + // NB: p.length changes. + while (pos < p.length) { + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; - if (Math.abs(a - b) === 1) { - let result = min + '|' + max; - if (opts.capture) { - return `(${result})`; + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + continue; } - if (opts.wrap === false) { - return result; + + var resolvedLink; + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // some known symbolic link. no need to stat again. + resolvedLink = cache[base]; + } else { + var stat = fs$3.lstatSync(base); + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + continue; + } + + // read the link if it wasn't read before + // dev/ino always return 0 on windows, so skip the check. + var linkTarget = null; + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + linkTarget = seenLinks[id]; + } + } + if (linkTarget === null) { + fs$3.statSync(base); + linkTarget = fs$3.readlinkSync(base); + } + resolvedLink = pathModule.resolve(previous, linkTarget); + // track this, if given a cache. + if (cache) cache[base] = resolvedLink; + if (!isWindows) seenLinks[id] = linkTarget; } - return `(?:${result})`; + + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); } - let isPadded = hasPadding(min) || hasPadding(max); - let state = { min, max, a, b }; - let positives = []; - let negatives = []; + if (cache) cache[original] = p; - if (isPadded) { - state.isPadded = isPadded; - state.maxLen = String(state.max).length; - } + return p; +}; - if (a < 0) { - let newMin = b < 0 ? Math.abs(b) : 1; - negatives = splitToPatterns(newMin, Math.abs(a), state, opts); - a = state.a = 0; - } - if (b >= 0) { - positives = splitToPatterns(a, b, state, opts); +old$1.realpath = function realpath(p, cache, cb) { + if (typeof cb !== 'function') { + cb = maybeCallback(cache); + cache = null; } - state.negatives = negatives; - state.positives = positives; - state.result = collatePatterns(negatives, positives); + // make p is absolute + p = pathModule.resolve(p); - if (opts.capture === true) { - state.result = `(${state.result})`; - } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { - state.result = `(?:${state.result})`; + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return process.nextTick(cb.bind(null, null, cache[p])); } - toRegexRange$1.cache[cacheKey] = state; - return state.result; -}; + var original = p, + seenLinks = {}, + knownHard = {}; -function collatePatterns(neg, pos, options) { - let onlyNegative = filterPatterns(neg, pos, '-', false) || []; - let onlyPositive = filterPatterns(pos, neg, '', false) || []; - let intersected = filterPatterns(neg, pos, '-?', true) || []; - let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); - return subpatterns.join('|'); -} + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; -function splitToRanges(min, max) { - let nines = 1; - let zeros = 1; + start(); - let stop = countNines(min, nines); - let stops = new Set([max]); + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; - while (min <= stop && stop <= max) { - stops.add(stop); - nines += 1; - stop = countNines(min, nines); + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs$3.lstat(base, function(err) { + if (err) return cb(err); + knownHard[base] = true; + LOOP(); + }); + } else { + process.nextTick(LOOP); + } } - stop = countZeros(max + 1, zeros) - 1; + // walk down the path, swapping out linked pathparts for their real + // values + function LOOP() { + // stop if scanned past end of path + if (pos >= p.length) { + if (cache) cache[original] = p; + return cb(null, p); + } - while (min < stop && stop <= max) { - stops.add(stop); - zeros += 1; - stop = countZeros(max + 1, zeros) - 1; - } + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; - stops = [...stops]; - stops.sort(compare$2); - return stops; -} + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + return process.nextTick(LOOP); + } -/** - * Convert a range to a regex pattern - * @param {Number} `start` - * @param {Number} `stop` - * @return {String} - */ + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // known symbolic link. no need to stat again. + return gotResolvedLink(cache[base]); + } -function rangeToPattern(start, stop, options) { - if (start === stop) { - return { pattern: start, count: [], digits: 0 }; + return fs$3.lstat(base, gotStat); } - let zipped = zip(start, stop); - let digits = zipped.length; - let pattern = ''; - let count = 0; + function gotStat(err, stat) { + if (err) return cb(err); - for (let i = 0; i < digits; i++) { - let [startDigit, stopDigit] = zipped[i]; + // if not a symlink, skip to the next path part + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + return process.nextTick(LOOP); + } - if (startDigit === stopDigit) { - pattern += startDigit; + // stat & read the link if not read before + // call gotTarget as soon as the link target is known + // dev/ino always return 0 on windows, so skip the check. + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + return gotTarget(null, seenLinks[id], base); + } + } + fs$3.stat(base, function(err) { + if (err) return cb(err); - } else if (startDigit !== '0' || stopDigit !== '9') { - pattern += toCharacterClass(startDigit, stopDigit); + fs$3.readlink(base, function(err, target) { + if (!isWindows) seenLinks[id] = target; + gotTarget(err, target); + }); + }); + } - } else { - count++; - } + function gotTarget(err, target, base) { + if (err) return cb(err); + + var resolvedLink = pathModule.resolve(previous, target); + if (cache) cache[base] = resolvedLink; + gotResolvedLink(resolvedLink); } - if (count) { - pattern += options.shorthand === true ? '\\d' : '[0-9]'; + function gotResolvedLink(resolvedLink) { + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); } +}; - return { pattern, count: [count], digits }; -} +var fs_realpath = realpath; +realpath.realpath = realpath; +realpath.sync = realpathSync; +realpath.realpathSync = realpathSync; +realpath.monkeypatch = monkeypatch; +realpath.unmonkeypatch = unmonkeypatch; -function splitToPatterns(min, max, tok, options) { - let ranges = splitToRanges(min, max); - let tokens = []; - let start = min; - let prev; +var fs$2 = require$$0$3; +var origRealpath = fs$2.realpath; +var origRealpathSync = fs$2.realpathSync; - for (let i = 0; i < ranges.length; i++) { - let max = ranges[i]; - let obj = rangeToPattern(String(start), String(max), options); - let zeros = ''; +var version$2 = process.version; +var ok$1 = /^v[0-5]\./.test(version$2); +var old = old$1; - if (!tok.isPadded && prev && prev.pattern === obj.pattern) { - if (prev.count.length > 1) { - prev.count.pop(); - } +function newError (er) { + return er && er.syscall === 'realpath' && ( + er.code === 'ELOOP' || + er.code === 'ENOMEM' || + er.code === 'ENAMETOOLONG' + ) +} - prev.count.push(obj.count[0]); - prev.string = prev.pattern + toQuantifier(prev.count); - start = max + 1; - continue; - } +function realpath (p, cache, cb) { + if (ok$1) { + return origRealpath(p, cache, cb) + } - if (tok.isPadded) { - zeros = padZeros(max, tok, options); + if (typeof cache === 'function') { + cb = cache; + cache = null; + } + origRealpath(p, cache, function (er, result) { + if (newError(er)) { + old.realpath(p, cache, cb); + } else { + cb(er, result); } + }); +} - obj.string = zeros + obj.pattern + toQuantifier(obj.count); - tokens.push(obj); - start = max + 1; - prev = obj; +function realpathSync (p, cache) { + if (ok$1) { + return origRealpathSync(p, cache) } - return tokens; + try { + return origRealpathSync(p, cache) + } catch (er) { + if (newError(er)) { + return old.realpathSync(p, cache) + } else { + throw er + } + } } -function filterPatterns(arr, comparison, prefix, intersection, options) { - let result = []; +function monkeypatch () { + fs$2.realpath = realpath; + fs$2.realpathSync = realpathSync; +} - for (let ele of arr) { - let { string } = ele; +function unmonkeypatch () { + fs$2.realpath = origRealpath; + fs$2.realpathSync = origRealpathSync; +} - // only push if _both_ are negative... - if (!intersection && !contains(comparison, 'string', string)) { - result.push(prefix + string); +var concatMap$1 = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray$1(x)) res.push.apply(res, x); + else res.push(x); } + return res; +}; - // or _both_ are positive - if (intersection && contains(comparison, 'string', string)) { - result.push(prefix + string); - } - } - return result; -} +var isArray$1 = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; -/** - * Zip strings - */ +var balancedMatch = balanced$1; +function balanced$1(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); -function zip(a, b) { - let arr = []; - for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); - return arr; -} + var r = range(a, b, str); -function compare$2(a, b) { - return a > b ? 1 : b > a ? -1 : 0; + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; } -function contains(arr, key, val) { - return arr.some(ele => ele[key] === val); +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; } -function countNines(min, len) { - return Number(String(min).slice(0, -len) + '9'.repeat(len)); -} +balanced$1.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; -function countZeros(integer, zeros) { - return integer - (integer % Math.pow(10, zeros)); -} + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; -function toQuantifier(digits) { - let [start = 0, stop = ''] = digits; - if (stop || start > 1) { - return `{${start + (stop ? ',' + stop : '')}}`; + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } } - return ''; -} -function toCharacterClass(a, b, options) { - return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; + return result; } -function hasPadding(str) { - return /^-?(0+)\d/.test(str); -} +var concatMap = concatMap$1; +var balanced = balancedMatch; -function padZeros(value, tok, options) { - if (!tok.isPadded) { - return value; - } +var braceExpansion = expandTop; - let diff = Math.abs(tok.maxLen - String(value).length); - let relax = options.relaxZeros !== false; +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; - switch (diff) { - case 0: - return ''; - case 1: - return relax ? '0?' : '0'; - case 2: - return relax ? '0{0,2}' : '00'; - default: { - return relax ? `0{0,${diff}}` : `0{${diff}}`; - } - } +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); } -/** - * Cache - */ +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} -toRegexRange$1.cache = {}; -toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {}); +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} -/** - * Expose `toRegexRange` - */ -var toRegexRange_1 = toRegexRange$1; +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ + var parts = []; + var m = balanced('{', '}', str); -const util$1 = require$$0__default['default']; -const toRegexRange = toRegexRange_1; + if (!m) + return str.split(','); -const isObject$2 = val => val !== null && typeof val === 'object' && !Array.isArray(val); + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); -const transform = toNumber => { - return value => toNumber === true ? Number(value) : String(value); -}; + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } -const isValidValue = value => { - return typeof value === 'number' || (typeof value === 'string' && value !== ''); -}; + parts.push.apply(parts, p); -const isNumber$1 = num => Number.isInteger(+num); + return parts; +} -const zeros = input => { - let value = `${input}`; - let index = -1; - if (value[0] === '-') value = value.slice(1); - if (value === '0') return false; - while (value[++index] === '0'); - return index > 0; -}; +function expandTop(str) { + if (!str) + return []; -const stringify$7 = (start, end, options) => { - if (typeof start === 'string' || typeof end === 'string') { - return true; + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); } - return options.stringify === true; -}; -const pad = (input, maxLength, toNumber) => { - if (maxLength > 0) { - let dash = input[0] === '-' ? '-' : ''; - if (dash) input = input.slice(1); - input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); - } - if (toNumber === false) { - return String(input); - } - return input; -}; + return expand$2(escapeBraces(str), true).map(unescapeBraces); +} -const toMaxLen = (input, maxLength) => { - let negative = input[0] === '-' ? '-' : ''; - if (negative) { - input = input.slice(1); - maxLength--; - } - while (input.length < maxLength) input = '0' + input; - return negative ? ('-' + input) : input; -}; +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} -const toSequence = (parts, options) => { - parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); - parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} - let prefix = options.capture ? '' : '?:'; - let positives = ''; - let negatives = ''; - let result; +function expand$2(str, isTop) { + var expansions = []; - if (parts.positives.length) { - positives = parts.positives.join('|'); - } + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; - if (parts.negatives.length) { - negatives = `-(${prefix}${parts.negatives.join('|')})`; + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand$2(str); + } + return [str]; } - if (positives && negatives) { - result = `${positives}|${negatives}`; + var n; + if (isSequence) { + n = m.body.split(/\.\./); } else { - result = positives || negatives; + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand$2(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand$2(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } } - if (options.wrap) { - return `(${prefix}${result})`; - } + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. - return result; -}; + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand$2(m.post, false) + : ['']; -const toRange = (a, b, isNumbers, options) => { - if (isNumbers) { - return toRegexRange(a, b, { wrap: false, ...options }); - } + var N; - let start = String.fromCharCode(a); - if (a === b) return start; + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length); + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); - let stop = String.fromCharCode(b); - return `[${start}-${stop}]`; -}; + N = []; -const toRegex = (start, end, options) => { - if (Array.isArray(start)) { - let wrap = options.wrap === true; - let prefix = options.capture ? '' : '?:'; - return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand$2(el, false) }); } - return toRegexRange(start, end, options); -}; -const rangeError = (...args) => { - return new RangeError('Invalid range arguments: ' + util$1.inspect(...args)); -}; + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } -const invalidRange = (start, end, options) => { - if (options.strictRanges === true) throw rangeError([start, end]); - return []; -}; + return expansions; +} -const invalidStep = (step, options) => { - if (options.strictRanges === true) { - throw new TypeError(`Expected step "${step}" to be a number`); - } - return []; -}; +var minimatch_1 = minimatch$3; +minimatch$3.Minimatch = Minimatch$1; -const fillNumbers = (start, end, step = 1, options = {}) => { - let a = Number(start); - let b = Number(end); +var path$4 = { sep: '/' }; +try { + path$4 = path$b; +} catch (er) {} - if (!Number.isInteger(a) || !Number.isInteger(b)) { - if (options.strictRanges === true) throw rangeError([start, end]); - return []; - } +var GLOBSTAR = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {}; +var expand$1 = braceExpansion; - // fix negative zero - if (a === 0) a = 0; - if (b === 0) b = 0; +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +}; - let descending = a > b; - let startString = String(start); - let endString = String(end); - let stepString = String(step); - step = Math.max(Math.abs(step), 1); +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]'; - let padded = zeros(startString) || zeros(endString) || zeros(stepString); - let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; - let toNumber = padded === false && stringify$7(start, end, options) === false; - let format = options.transform || transform(toNumber); +// * => any number of characters +var star = qmark + '*?'; - if (options.toRegex && step === 1) { - return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); - } +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'; - let parts = { negatives: [], positives: [] }; - let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); - let range = []; - let index = 0; +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'; - while (descending ? a >= b : a <= b) { - if (options.toRegex === true && step > 1) { - push(a); - } else { - range.push(pad(format(a, index), maxLen, toNumber)); - } - a = descending ? a - step : a + step; - index++; - } +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!'); - if (options.toRegex === true) { - return step > 1 - ? toSequence(parts, options) - : toRegex(range, null, { wrap: false, ...options }); - } +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true; + return set + }, {}) +} - return range; -}; +// normalizes slashes. +var slashSplit = /\/+/; -const fillLetters = (start, end, step = 1, options = {}) => { - if ((!isNumber$1(start) && start.length > 1) || (!isNumber$1(end) && end.length > 1)) { - return invalidRange(start, end, options); +minimatch$3.filter = filter; +function filter (pattern, options) { + options = options || {}; + return function (p, i, list) { + return minimatch$3(p, pattern, options) } +} +function ext (a, b) { + a = a || {}; + b = b || {}; + var t = {}; + Object.keys(b).forEach(function (k) { + t[k] = b[k]; + }); + Object.keys(a).forEach(function (k) { + t[k] = a[k]; + }); + return t +} - let format = options.transform || (val => String.fromCharCode(val)); - let a = `${start}`.charCodeAt(0); - let b = `${end}`.charCodeAt(0); - - let descending = a > b; - let min = Math.min(a, b); - let max = Math.max(a, b); +minimatch$3.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch$3 - if (options.toRegex && step === 1) { - return toRange(min, max, false, options); - } + var orig = minimatch$3; - let range = []; - let index = 0; + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + }; - while (descending ? a >= b : a <= b) { - range.push(format(a, index)); - a = descending ? a - step : a + step; - index++; - } + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + }; - if (options.toRegex === true) { - return toRegex(range, null, { wrap: false, options }); - } + return m +}; - return range; +Minimatch$1.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch$1 + return minimatch$3.defaults(def).Minimatch }; -const fill$2 = (start, end, step, options = {}) => { - if (end == null && isValidValue(start)) { - return [start]; +function minimatch$3 (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') } - if (!isValidValue(start) || !isValidValue(end)) { - return invalidRange(start, end, options); + if (!options) options = {}; + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false } - if (typeof step === 'function') { - return fill$2(start, end, 1, { transform: step }); + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch$1(pattern, options).match(p) +} + +function Minimatch$1 (pattern, options) { + if (!(this instanceof Minimatch$1)) { + return new Minimatch$1(pattern, options) } - if (isObject$2(step)) { - return fill$2(start, end, 0, step); + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') } - let opts = { ...options }; - if (opts.capture === true) opts.wrap = true; - step = step || opts.step || 1; + if (!options) options = {}; + pattern = pattern.trim(); - if (!isNumber$1(step)) { - if (step != null && !isObject$2(step)) return invalidStep(step, opts); - return fill$2(start, end, 1, step); + // windows support: need to use /, not \ + if (path$4.sep !== '/') { + pattern = pattern.split(path$4.sep).join('/'); } - if (isNumber$1(start) && isNumber$1(end)) { - return fillNumbers(start, end, step, opts); - } + this.options = options; + this.set = []; + this.pattern = pattern; + this.regexp = null; + this.negate = false; + this.comment = false; + this.empty = false; - return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); -}; + // make the set of regexps etc. + this.make(); +} -var fillRange = fill$2; +Minimatch$1.prototype.debug = function () {}; -const fill$1 = fillRange; -const utils$1 = utils$3; +Minimatch$1.prototype.make = make; +function make () { + // don't do it more than once. + if (this._made) return -const compile$1 = (ast, options = {}) => { - let walk = (node, parent = {}) => { - let invalidBlock = utils$1.isInvalidBrace(parent); - let invalidNode = node.invalid === true && options.escapeInvalid === true; - let invalid = invalidBlock === true || invalidNode === true; - let prefix = options.escapeInvalid === true ? '\\' : ''; - let output = ''; + var pattern = this.pattern; + var options = this.options; - if (node.isOpen === true) { - return prefix + node.value; - } - if (node.isClose === true) { - return prefix + node.value; - } + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true; + return + } + if (!pattern) { + this.empty = true; + return + } - if (node.type === 'open') { - return invalid ? (prefix + node.value) : '('; - } + // step 1: figure out negation, etc. + this.parseNegate(); - if (node.type === 'close') { - return invalid ? (prefix + node.value) : ')'; - } + // step 2: expand braces + var set = this.globSet = this.braceExpand(); - if (node.type === 'comma') { - return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); - } + if (options.debug) this.debug = console.error; - if (node.value) { - return node.value; - } + this.debug(this.pattern, set); - if (node.nodes && node.ranges > 0) { - let args = utils$1.reduce(node.nodes); - let range = fill$1(...args, { ...options, wrap: false, toRegex: true }); + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }); - if (range.length !== 0) { - return args.length > 1 && range.length > 1 ? `(${range})` : range; - } - } + this.debug(this.pattern, set); - if (node.nodes) { - for (let child of node.nodes) { - output += walk(child, node); - } - } - return output; - }; + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this); - return walk(ast); -}; + this.debug(this.pattern, set); -var compile_1 = compile$1; + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }); -const fill = fillRange; -const stringify$6 = stringify$8; -const utils = utils$3; + this.debug(this.pattern, set); -const append = (queue = '', stash = '', enclose = false) => { - let result = []; + this.set = set; +} - queue = [].concat(queue); - stash = [].concat(stash); +Minimatch$1.prototype.parseNegate = parseNegate; +function parseNegate () { + var pattern = this.pattern; + var negate = false; + var options = this.options; + var negateOffset = 0; - if (!stash.length) return queue; - if (!queue.length) { - return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate; + negateOffset++; } - for (let item of queue) { - if (Array.isArray(item)) { - for (let value of item) { - result.push(append(value, stash, enclose)); - } + if (negateOffset) this.pattern = pattern.substr(negateOffset); + this.negate = negate; +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch$3.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +}; + +Minimatch$1.prototype.braceExpand = braceExpand; + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch$1) { + options = this.options; } else { - for (let ele of stash) { - if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; - result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); - } + options = {}; } } - return utils.flatten(result); -}; -const expand$1 = (ast, options = {}) => { - let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern; - let walk = (node, parent = {}) => { - node.queue = []; + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } - let p = parent; - let q = parent.queue; + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } - while (p.type !== 'brace' && p.type !== 'root' && p.parent) { - p = p.parent; - q = p.queue; - } + return expand$1(pattern) +} - if (node.invalid || node.dollar) { - q.push(append(q.pop(), stringify$6(node, options))); - return; - } +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch$1.prototype.parse = parse$3; +var SUBPARSE = {}; +function parse$3 (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } - if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { - q.push(append(q.pop(), ['{}'])); - return; - } + var options = this.options; - if (node.nodes && node.ranges > 0) { - let args = utils.reduce(node.nodes); + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' - if (utils.exceedsLimit(...args, options.step, rangeLimit)) { - throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); - } + var re = ''; + var hasMagic = !!options.nocase; + var escaping = false; + // ? => one single character + var patternListStack = []; + var negativeLists = []; + var stateChar; + var inClass = false; + var reClassStart = -1; + var classStart = -1; + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)'; + var self = this; - let range = fill(...args, options); - if (range.length === 0) { - range = stringify$6(node, options); + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star; + hasMagic = true; + break + case '?': + re += qmark; + hasMagic = true; + break + default: + re += '\\' + stateChar; + break } - - q.push(append(q.pop(), range)); - node.nodes = []; - return; + self.debug('clearStateChar %j %j', stateChar, re); + stateChar = false; } + } - let enclose = utils.encloseBrace(node); - let queue = node.queue; - let block = node; + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c); - while (block.type !== 'brace' && block.type !== 'root' && block.parent) { - block = block.parent; - queue = block.queue; + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c; + escaping = false; + continue } - for (let i = 0; i < node.nodes.length; i++) { - let child = node.nodes[i]; + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false - if (child.type === 'comma' && node.type === 'brace') { - if (i === 1) queue.push(''); - queue.push(''); - continue; - } + case '\\': + clearStateChar(); + escaping = true; + continue - if (child.type === 'close') { - q.push(append(q.pop(), queue, enclose)); - continue; - } + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c); - if (child.value && child.type !== 'open') { - queue.push(append(queue.pop(), child.value)); - continue; - } + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class'); + if (c === '!' && i === classStart + 1) c = '^'; + re += c; + continue + } - if (child.nodes) { - walk(child, node); - } - } + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar); + clearStateChar(); + stateChar = c; + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar(); + continue - return queue; - }; + case '(': + if (inClass) { + re += '('; + continue + } - return utils.flatten(walk(ast)); -}; + if (!stateChar) { + re += '\\('; + continue + } -var expand_1 = expand$1; + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }); + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:'; + this.debug('plType %j %j', stateChar, re); + stateChar = false; + continue -var constants$2 = { - MAX_LENGTH: 1024 * 64, + case ')': + if (inClass || !patternListStack.length) { + re += '\\)'; + continue + } - // Digits - CHAR_0: '0', /* 0 */ - CHAR_9: '9', /* 9 */ + clearStateChar(); + hasMagic = true; + var pl = patternListStack.pop(); + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close; + if (pl.type === '!') { + negativeLists.push(pl); + } + pl.reEnd = re.length; + continue - // Alphabet chars. - CHAR_UPPERCASE_A: 'A', /* A */ - CHAR_LOWERCASE_A: 'a', /* a */ - CHAR_UPPERCASE_Z: 'Z', /* Z */ - CHAR_LOWERCASE_Z: 'z', /* z */ + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|'; + escaping = false; + continue + } - CHAR_LEFT_PARENTHESES: '(', /* ( */ - CHAR_RIGHT_PARENTHESES: ')', /* ) */ + clearStateChar(); + re += '|'; + continue - CHAR_ASTERISK: '*', /* * */ + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar(); - // Non-alphabetic chars. - CHAR_AMPERSAND: '&', /* & */ - CHAR_AT: '@', /* @ */ - CHAR_BACKSLASH: '\\', /* \ */ - CHAR_BACKTICK: '`', /* ` */ - CHAR_CARRIAGE_RETURN: '\r', /* \r */ - CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ - CHAR_COLON: ':', /* : */ - CHAR_COMMA: ',', /* , */ - CHAR_DOLLAR: '$', /* . */ - CHAR_DOT: '.', /* . */ - CHAR_DOUBLE_QUOTE: '"', /* " */ - CHAR_EQUAL: '=', /* = */ - CHAR_EXCLAMATION_MARK: '!', /* ! */ - CHAR_FORM_FEED: '\f', /* \f */ - CHAR_FORWARD_SLASH: '/', /* / */ - CHAR_HASH: '#', /* # */ - CHAR_HYPHEN_MINUS: '-', /* - */ - CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ - CHAR_LEFT_CURLY_BRACE: '{', /* { */ - CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ - CHAR_LINE_FEED: '\n', /* \n */ - CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ - CHAR_PERCENT: '%', /* % */ - CHAR_PLUS: '+', /* + */ - CHAR_QUESTION_MARK: '?', /* ? */ - CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ - CHAR_RIGHT_CURLY_BRACE: '}', /* } */ - CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ - CHAR_SEMICOLON: ';', /* ; */ - CHAR_SINGLE_QUOTE: '\'', /* ' */ - CHAR_SPACE: ' ', /* */ - CHAR_TAB: '\t', /* \t */ - CHAR_UNDERSCORE: '_', /* _ */ - CHAR_VERTICAL_LINE: '|', /* | */ - CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ -}; + if (inClass) { + re += '\\' + c; + continue + } -const stringify$5 = stringify$8; + inClass = true; + classStart = i; + reClassStart = re.length; + re += c; + continue -/** - * Constants - */ + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c; + escaping = false; + continue + } -const { - MAX_LENGTH: MAX_LENGTH$3, - CHAR_BACKSLASH, /* \ */ - CHAR_BACKTICK, /* ` */ - CHAR_COMMA: CHAR_COMMA$1, /* , */ - CHAR_DOT, /* . */ - CHAR_LEFT_PARENTHESES, /* ( */ - CHAR_RIGHT_PARENTHESES, /* ) */ - CHAR_LEFT_CURLY_BRACE, /* { */ - CHAR_RIGHT_CURLY_BRACE, /* } */ - CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */ - CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */ - CHAR_DOUBLE_QUOTE: CHAR_DOUBLE_QUOTE$1, /* " */ - CHAR_SINGLE_QUOTE: CHAR_SINGLE_QUOTE$1, /* ' */ - CHAR_NO_BREAK_SPACE, - CHAR_ZERO_WIDTH_NOBREAK_SPACE -} = constants$2; + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i); + try { + RegExp('[' + cs + ']'); + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE); + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'; + hasMagic = hasMagic || sp[1]; + inClass = false; + continue + } + } -/** - * parse - */ + // finish up the class. + hasMagic = true; + inClass = false; + re += c; + continue -const parse$6 = (input, options = {}) => { - if (typeof input !== 'string') { - throw new TypeError('Expected a string'); - } + default: + // swallow any state char that wasn't consumed + clearStateChar(); - let opts = options || {}; - let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$3, opts.maxLength) : MAX_LENGTH$3; - if (input.length > max) { - throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); - } + if (escaping) { + // no need + escaping = false; + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\'; + } - let ast = { type: 'root', input, nodes: [] }; - let stack = [ast]; - let block = ast; - let prev = ast; - let brackets = 0; - let length = input.length; - let index = 0; - let depth = 0; - let value; + re += c; - /** - * Helpers - */ + } // switch + } // for - const advance = () => input[index++]; - const push = node => { - if (node.type === 'text' && prev.type === 'dot') { - prev.type = 'text'; - } + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1); + sp = this.parse(cs, SUBPARSE); + re = re.substr(0, reClassStart) + '\\[' + sp[0]; + hasMagic = hasMagic || sp[1]; + } - if (prev && prev.type === 'text' && node.type === 'text') { - prev.value += node.value; - return; - } + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length); + this.debug('setting tail', re, pl); + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\'; + } - block.nodes.push(node); - node.parent = block; - node.prev = prev; - prev = node; - return node; - }; + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }); - push({ type: 'bos' }); + this.debug('tail=%j\n %s', tail, tail, pl, re); + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type; - while (index < length) { - block = stack[stack.length - 1]; - value = advance(); + hasMagic = true; + re = re.slice(0, pl.reStart) + t + '\\(' + tail; + } - /** - * Invalid chars - */ + // handle trailing things that only matter at the very end. + clearStateChar(); + if (escaping) { + // trailing \\ + re += '\\\\'; + } - if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { - continue; - } + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false; + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true; + } - /** - * Escaped chars - */ + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n]; - if (value === CHAR_BACKSLASH) { - push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); - continue; - } + var nlBefore = re.slice(0, nl.reStart); + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8); + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd); + var nlAfter = re.slice(nl.reEnd); - /** - * Right square bracket (literal): ']' - */ + nlLast += nlAfter; - if (value === CHAR_RIGHT_SQUARE_BRACKET$1) { - push({ type: 'text', value: '\\' + value }); - continue; + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1; + var cleanAfter = nlAfter; + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, ''); } + nlAfter = cleanAfter; - /** - * Left square bracket: '[' - */ + var dollar = ''; + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$'; + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast; + re = newRe; + } - if (value === CHAR_LEFT_SQUARE_BRACKET$1) { - brackets++; - let next; + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re; + } - while (index < length && (next = advance())) { - value += next; + if (addPatternStart) { + re = patternStart + re; + } - if (next === CHAR_LEFT_SQUARE_BRACKET$1) { - brackets++; - continue; - } + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } - if (next === CHAR_BACKSLASH) { - value += advance(); - continue; - } + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } - if (next === CHAR_RIGHT_SQUARE_BRACKET$1) { - brackets--; + var flags = options.nocase ? 'i' : ''; + try { + var regExp = new RegExp('^' + re + '$', flags); + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } - if (brackets === 0) { - break; - } - } - } + regExp._glob = pattern; + regExp._src = re; - push({ type: 'text', value }); - continue; - } + return regExp +} - /** - * Parentheses - */ +minimatch$3.makeRe = function (pattern, options) { + return new Minimatch$1(pattern, options || {}).makeRe() +}; - if (value === CHAR_LEFT_PARENTHESES) { - block = push({ type: 'paren', nodes: [] }); - stack.push(block); - push({ type: 'text', value }); - continue; - } +Minimatch$1.prototype.makeRe = makeRe; +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp - if (value === CHAR_RIGHT_PARENTHESES) { - if (block.type !== 'paren') { - push({ type: 'text', value }); - continue; - } - block = stack.pop(); - push({ type: 'text', value }); - block = stack[stack.length - 1]; - continue; - } + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set; - /** - * Quotes: '|"|` - */ + if (!set.length) { + this.regexp = false; + return this.regexp + } + var options = this.options; - if (value === CHAR_DOUBLE_QUOTE$1 || value === CHAR_SINGLE_QUOTE$1 || value === CHAR_BACKTICK) { - let open = value; - let next; + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot; + var flags = options.nocase ? 'i' : ''; - if (options.keepQuotes !== true) { - value = ''; - } + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|'); - while (index < length && (next = advance())) { - if (next === CHAR_BACKSLASH) { - value += next + advance(); - continue; - } + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$'; - if (next === open) { - if (options.keepQuotes === true) value += next; - break; - } + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$'; - value += next; - } + try { + this.regexp = new RegExp(re, flags); + } catch (ex) { + this.regexp = false; + } + return this.regexp +} - push({ type: 'text', value }); - continue; - } +minimatch$3.match = function (list, pattern, options) { + options = options || {}; + var mm = new Minimatch$1(pattern, options); + list = list.filter(function (f) { + return mm.match(f) + }); + if (mm.options.nonull && !list.length) { + list.push(pattern); + } + return list +}; - /** - * Left curly brace: '{' - */ +Minimatch$1.prototype.match = match; +function match (f, partial) { + this.debug('match', f, this.pattern); + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' - if (value === CHAR_LEFT_CURLY_BRACE) { - depth++; + if (f === '/' && partial) return true - let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; - let brace = { - type: 'brace', - open: true, - close: false, - dollar, - depth, - commas: 0, - ranges: 0, - nodes: [] - }; + var options = this.options; - block = push(brace); - stack.push(block); - push({ type: 'open', value }); - continue; - } + // windows: need to use /, not \ + if (path$4.sep !== '/') { + f = f.split(path$4.sep).join('/'); + } - /** - * Right curly brace: '}' - */ + // treat the test path as a set of pathparts. + f = f.split(slashSplit); + this.debug(this.pattern, 'split', f); - if (value === CHAR_RIGHT_CURLY_BRACE) { - if (block.type !== 'brace') { - push({ type: 'text', value }); - continue; - } + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. - let type = 'close'; - block = stack.pop(); - block.close = true; + var set = this.set; + this.debug(this.pattern, 'set', set); - push({ type, value }); - depth--; + // Find the basename of the path by looking for the last non-empty segment + var filename; + var i; + for (i = f.length - 1; i >= 0; i--) { + filename = f[i]; + if (filename) break + } - block = stack[stack.length - 1]; - continue; + for (i = 0; i < set.length; i++) { + var pattern = set[i]; + var file = f; + if (options.matchBase && pattern.length === 1) { + file = [filename]; + } + var hit = this.matchOne(file, pattern, partial); + if (hit) { + if (options.flipNegate) return true + return !this.negate } + } - /** - * Comma: ',' - */ + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} - if (value === CHAR_COMMA$1 && depth > 0) { - if (block.ranges > 0) { - block.ranges = 0; - let open = block.nodes.shift(); - block.nodes = [open, { type: 'text', value: stringify$5(block) }]; - } +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch$1.prototype.matchOne = function (file, pattern, partial) { + var options = this.options; - push({ type: 'comma', value }); - block.commas++; - continue; - } + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }); - /** - * Dot: '.' - */ + this.debug('matchOne', file.length, pattern.length); - if (value === CHAR_DOT && depth > 0 && block.commas === 0) { - let siblings = block.nodes; + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop'); + var p = pattern[pi]; + var f = file[fi]; - if (depth === 0 || siblings.length === 0) { - push({ type: 'text', value }); - continue; - } + this.debug(pattern, p, f); - if (prev.type === 'dot') { - block.range = []; - prev.value += value; - prev.type = 'range'; + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false - if (block.nodes.length !== 3 && block.nodes.length !== 5) { - block.invalid = true; - block.ranges = 0; - prev.type = 'text'; - continue; - } + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]); - block.ranges++; - block.args = []; - continue; + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi; + var pr = pi + 1; + if (pr === pl) { + this.debug('** at the end'); + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true } - if (prev.type === 'range') { - siblings.pop(); + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr]; - let before = siblings[siblings.length - 1]; - before.value += prev.value + value; - prev = before; - block.ranges--; - continue; + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee); + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee); + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr); + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue'); + fr++; + } } - push({ type: 'dot', value }); - continue; + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr); + if (fr === fl) return true + } + return false } - /** - * Text - */ + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit; + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase(); + } else { + hit = f === p; + } + this.debug('string match', p, f, hit); + } else { + hit = f.match(p); + this.debug('pattern match', p, f, hit); + } - push({ type: 'text', value }); + if (!hit) return false } - // Mark imbalanced braces and brackets as invalid - do { - block = stack.pop(); - - if (block.type !== 'root') { - block.nodes.forEach(node => { - if (!node.nodes) { - if (node.type === 'open') node.isOpen = true; - if (node.type === 'close') node.isClose = true; - if (!node.nodes) node.type = 'text'; - node.invalid = true; - } - }); + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* - // get the location of the block on parent.nodes (block's siblings) - let parent = stack[stack.length - 1]; - let index = parent.nodes.indexOf(block); - // replace the (invalid) block with it's nodes - parent.nodes.splice(index, 1, ...block.nodes); - } - } while (stack.length > 0); + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === ''); + return emptyFileEnd + } - push({ type: 'eos' }); - return ast; + // should be unreachable. + throw new Error('wtf?') }; -var parse_1$2 = parse$6; +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} -const stringify$4 = stringify$8; -const compile = compile_1; -const expand = expand_1; -const parse$5 = parse_1$2; +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} -/** - * Expand the given pattern or create a regex-compatible string. - * - * ```js - * const braces = require('braces'); - * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] - * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] - * ``` - * @param {String} `str` - * @param {Object} `options` - * @return {String} - * @api public - */ +var inherits$2 = {exports: {}}; -const braces$1 = (input, options = {}) => { - let output = []; +var inherits_browser = {exports: {}}; - if (Array.isArray(input)) { - for (let pattern of input) { - let result = braces$1.create(pattern, options); - if (Array.isArray(result)) { - output.push(...result); - } else { - output.push(result); - } +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + inherits_browser.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); } - } else { - output = [].concat(braces$1.create(input, options)); - } + }; +} else { + // old school shim for old browsers + inherits_browser.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; +} - if (options && options.expand === true && options.nodupes === true) { - output = [...new Set(output)]; - } - return output; -}; +try { + var util$1 = require$$0$4; + /* istanbul ignore next */ + if (typeof util$1.inherits !== 'function') throw ''; + inherits$2.exports = util$1.inherits; +} catch (e) { + /* istanbul ignore next */ + inherits$2.exports = inherits_browser.exports; +} -/** - * Parse the given `str` with the given `options`. - * - * ```js - * // braces.parse(pattern, [, options]); - * const ast = braces.parse('a/{b,c}/d'); - * console.log(ast); - * ``` - * @param {String} pattern Brace pattern to parse - * @param {Object} options - * @return {Object} Returns an AST - * @api public - */ +var pathIsAbsolute = {exports: {}}; -braces$1.parse = (input, options = {}) => parse$5(input, options); +function posix(path) { + return path.charAt(0) === '/'; +} -/** - * Creates a braces string from an AST, or an AST node. - * - * ```js - * const braces = require('braces'); - * let ast = braces.parse('foo/{a,b}/bar'); - * console.log(stringify(ast.nodes[2])); //=> '{a,b}' - * ``` - * @param {String} `input` Brace pattern or AST. - * @param {Object} `options` - * @return {Array} Returns an array of expanded values. - * @api public - */ +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); -braces$1.stringify = (input, options = {}) => { - if (typeof input === 'string') { - return stringify$4(braces$1.parse(input, options), options); - } - return stringify$4(input, options); -}; + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} -/** - * Compiles a brace pattern into a regex-compatible, optimized string. - * This method is called by the main [braces](#braces) function by default. - * - * ```js - * const braces = require('braces'); - * console.log(braces.compile('a/{b,c}/d')); - * //=> ['a/(b|c)/d'] - * ``` - * @param {String} `input` Brace pattern or AST. - * @param {Object} `options` - * @return {Array} Returns an array of expanded values. - * @api public - */ +pathIsAbsolute.exports = process.platform === 'win32' ? win32 : posix; +pathIsAbsolute.exports.posix = posix; +pathIsAbsolute.exports.win32 = win32; -braces$1.compile = (input, options = {}) => { - if (typeof input === 'string') { - input = braces$1.parse(input, options); - } - return compile(input, options); -}; +var common$2 = {}; -/** - * Expands a brace pattern into an array. This method is called by the - * main [braces](#braces) function when `options.expand` is true. Before - * using this method it's recommended that you read the [performance notes](#performance)) - * and advantages of using [.compile](#compile) instead. - * - * ```js - * const braces = require('braces'); - * console.log(braces.expand('a/{b,c}/d')); - * //=> ['a/b/d', 'a/c/d']; - * ``` - * @param {String} `pattern` Brace pattern - * @param {Object} `options` - * @return {Array} Returns an array of expanded values. - * @api public - */ +common$2.alphasort = alphasort; +common$2.alphasorti = alphasorti; +common$2.setopts = setopts$2; +common$2.ownProp = ownProp$2; +common$2.makeAbs = makeAbs; +common$2.finish = finish; +common$2.mark = mark; +common$2.isIgnored = isIgnored$2; +common$2.childrenIgnored = childrenIgnored$2; -braces$1.expand = (input, options = {}) => { - if (typeof input === 'string') { - input = braces$1.parse(input, options); - } +function ownProp$2 (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} - let result = expand(input, options); +var path$3 = path$b; +var minimatch$2 = minimatch_1; +var isAbsolute$2 = pathIsAbsolute.exports; +var Minimatch = minimatch$2.Minimatch; - // filter out empty strings if specified - if (options.noempty === true) { - result = result.filter(Boolean); - } +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} - // filter out duplicates if specified - if (options.nodupes === true) { - result = [...new Set(result)]; - } +function alphasort (a, b) { + return a.localeCompare(b) +} - return result; -}; +function setupIgnores (self, options) { + self.ignore = options.ignore || []; -/** - * Processes a brace pattern and returns either an expanded array - * (if `options.expand` is true), a highly optimized regex-compatible string. - * This method is called by the main [braces](#braces) function. - * - * ```js - * const braces = require('braces'); - * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) - * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' - * ``` - * @param {String} `pattern` Brace pattern - * @param {Object} `options` - * @return {Array} Returns an array of expanded values. - * @api public - */ + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore]; -braces$1.create = (input, options = {}) => { - if (input === '' || input.length < 3) { - return [input]; + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap); } +} - return options.expand !== true - ? braces$1.compile(input, options) - : braces$1.expand(input, options); -}; +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null; + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, ''); + gmatcher = new Minimatch(gpattern, { dot: true }); + } -/** - * Expose "braces" - */ + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} -var braces_1 = braces$1; +function setopts$2 (self, pattern, options) { + if (!options) + options = {}; -var require$$0$4 = [ - "3dm", - "3ds", - "3g2", - "3gp", - "7z", - "a", - "aac", - "adp", - "ai", - "aif", - "aiff", - "alz", - "ape", - "apk", - "appimage", - "ar", - "arj", - "asf", - "au", - "avi", - "bak", - "baml", - "bh", - "bin", - "bk", - "bmp", - "btif", - "bz2", - "bzip2", - "cab", - "caf", - "cgm", - "class", - "cmx", - "cpio", - "cr2", - "cur", - "dat", - "dcm", - "deb", - "dex", - "djvu", - "dll", - "dmg", - "dng", - "doc", - "docm", - "docx", - "dot", - "dotm", - "dra", - "DS_Store", - "dsk", - "dts", - "dtshd", - "dvb", - "dwg", - "dxf", - "ecelp4800", - "ecelp7470", - "ecelp9600", - "egg", - "eol", - "eot", - "epub", - "exe", - "f4v", - "fbs", - "fh", - "fla", - "flac", - "flatpak", - "fli", - "flv", - "fpx", - "fst", - "fvt", - "g3", - "gh", - "gif", - "graffle", - "gz", - "gzip", - "h261", - "h263", - "h264", - "icns", - "ico", - "ief", - "img", - "ipa", - "iso", - "jar", - "jpeg", - "jpg", - "jpgv", - "jpm", - "jxr", - "key", - "ktx", - "lha", - "lib", - "lvp", - "lz", - "lzh", - "lzma", - "lzo", - "m3u", - "m4a", - "m4v", - "mar", - "mdi", - "mht", - "mid", - "midi", - "mj2", - "mka", - "mkv", - "mmr", - "mng", - "mobi", - "mov", - "movie", - "mp3", - "mp4", - "mp4a", - "mpeg", - "mpg", - "mpga", - "mxu", - "nef", - "npx", - "numbers", - "nupkg", - "o", - "odp", - "ods", - "odt", - "oga", - "ogg", - "ogv", - "otf", - "ott", - "pages", - "pbm", - "pcx", - "pdb", - "pdf", - "pea", - "pgm", - "pic", - "png", - "pnm", - "pot", - "potm", - "potx", - "ppa", - "ppam", - "ppm", - "pps", - "ppsm", - "ppsx", - "ppt", - "pptm", - "pptx", - "psd", - "pya", - "pyc", - "pyo", - "pyv", - "qt", - "rar", - "ras", - "raw", - "resources", - "rgb", - "rip", - "rlc", - "rmf", - "rmvb", - "rpm", - "rtf", - "rz", - "s3m", - "s7z", - "scpt", - "sgi", - "shar", - "snap", - "sil", - "sketch", - "slk", - "smv", - "snk", - "so", - "stl", - "suo", - "sub", - "swf", - "tar", - "tbz", - "tbz2", - "tga", - "tgz", - "thmx", - "tif", - "tiff", - "tlz", - "ttc", - "ttf", - "txz", - "udf", - "uvh", - "uvi", - "uvm", - "uvp", - "uvs", - "uvu", - "viv", - "vob", - "war", - "wav", - "wax", - "wbmp", - "wdp", - "weba", - "webm", - "webp", - "whl", - "wim", - "wm", - "wma", - "wmv", - "wmx", - "woff", - "woff2", - "wrm", - "wvx", - "xbm", - "xif", - "xla", - "xlam", - "xls", - "xlsb", - "xlsm", - "xlsx", - "xlt", - "xltm", - "xltx", - "xm", - "xmind", - "xpi", - "xpm", - "xwd", - "xz", - "z", - "zip", - "zipx" -]; + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern; + } -var binaryExtensions$1 = require$$0$4; + self.silent = !!options.silent; + self.pattern = pattern; + self.strict = options.strict !== false; + self.realpath = !!options.realpath; + self.realpathCache = options.realpathCache || Object.create(null); + self.follow = !!options.follow; + self.dot = !!options.dot; + self.mark = !!options.mark; + self.nodir = !!options.nodir; + if (self.nodir) + self.mark = true; + self.sync = !!options.sync; + self.nounique = !!options.nounique; + self.nonull = !!options.nonull; + self.nosort = !!options.nosort; + self.nocase = !!options.nocase; + self.stat = !!options.stat; + self.noprocess = !!options.noprocess; + self.absolute = !!options.absolute; -const path$1 = require$$0__default$2['default']; -const binaryExtensions = binaryExtensions$1; + self.maxLength = options.maxLength || Infinity; + self.cache = options.cache || Object.create(null); + self.statCache = options.statCache || Object.create(null); + self.symlinks = options.symlinks || Object.create(null); -const extensions$1 = new Set(binaryExtensions); + setupIgnores(self, options); -var isBinaryPath$1 = filePath => extensions$1.has(path$1.extname(filePath).slice(1).toLowerCase()); + self.changedCwd = false; + var cwd = process.cwd(); + if (!ownProp$2(options, "cwd")) + self.cwd = cwd; + else { + self.cwd = path$3.resolve(options.cwd); + self.changedCwd = self.cwd !== cwd; + } -var constants$1 = {}; + self.root = options.root || path$3.resolve(self.cwd, "/"); + self.root = path$3.resolve(self.root); + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/"); -(function (exports) { + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute$2(self.cwd) ? self.cwd : makeAbs(self, self.cwd); + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/"); + self.nomount = !!options.nomount; -const {sep} = require$$0__default$2['default']; -const {platform} = process; -const os = require$$0__default$1['default']; + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true; + options.nocomment = true; -exports.EV_ALL = 'all'; -exports.EV_READY = 'ready'; -exports.EV_ADD = 'add'; -exports.EV_CHANGE = 'change'; -exports.EV_ADD_DIR = 'addDir'; -exports.EV_UNLINK = 'unlink'; -exports.EV_UNLINK_DIR = 'unlinkDir'; -exports.EV_RAW = 'raw'; -exports.EV_ERROR = 'error'; + self.minimatch = new Minimatch(pattern, options); + self.options = self.minimatch.options; +} -exports.STR_DATA = 'data'; -exports.STR_END = 'end'; -exports.STR_CLOSE = 'close'; +function finish (self) { + var nou = self.nounique; + var all = nou ? [] : Object.create(null); -exports.FSEVENT_CREATED = 'created'; -exports.FSEVENT_MODIFIED = 'modified'; -exports.FSEVENT_DELETED = 'deleted'; -exports.FSEVENT_MOVED = 'moved'; -exports.FSEVENT_CLONED = 'cloned'; -exports.FSEVENT_UNKNOWN = 'unknown'; -exports.FSEVENT_TYPE_FILE = 'file'; -exports.FSEVENT_TYPE_DIRECTORY = 'directory'; -exports.FSEVENT_TYPE_SYMLINK = 'symlink'; + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i]; + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i]; + if (nou) + all.push(literal); + else + all[literal] = true; + } + } else { + // had matches + var m = Object.keys(matches); + if (nou) + all.push.apply(all, m); + else + m.forEach(function (m) { + all[m] = true; + }); + } + } -exports.KEY_LISTENERS = 'listeners'; -exports.KEY_ERR = 'errHandlers'; -exports.KEY_RAW = 'rawEmitters'; -exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW]; + if (!nou) + all = Object.keys(all); -exports.DOT_SLASH = `.${sep}`; + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort); -exports.BACK_SLASH_RE = /\\/g; -exports.DOUBLE_SLASH_RE = /\/\//; -exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; -exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; -exports.REPLACER_RE = /^\.[/\\]/; + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]); + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)); + var c = self.cache[e] || self.cache[makeAbs(self, e)]; + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c); + return notDir + }); + } + } -exports.SLASH = '/'; -exports.SLASH_SLASH = '//'; -exports.BRACE_START = '{'; -exports.BANG = '!'; -exports.ONE_DOT = '.'; -exports.TWO_DOTS = '..'; -exports.STAR = '*'; -exports.GLOBSTAR = '**'; -exports.ROOT_GLOBSTAR = '/**/*'; -exports.SLASH_GLOBSTAR = '/**'; -exports.DIR_SUFFIX = 'Dir'; -exports.ANYMATCH_OPTS = {dot: true}; -exports.STRING_TYPE = 'string'; -exports.FUNCTION_TYPE = 'function'; -exports.EMPTY_STR = ''; -exports.EMPTY_FN = () => {}; -exports.IDENTITY_FN = val => val; + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored$2(self, m) + }); -exports.isWindows = platform === 'win32'; -exports.isMacos = platform === 'darwin'; -exports.isLinux = platform === 'linux'; -exports.isIBMi = os.type() === 'OS400'; -}(constants$1)); + self.found = all; +} -const fs$2 = require$$0__default$3['default']; -const sysPath$2 = require$$0__default$2['default']; -const { promisify: promisify$2 } = require$$0__default['default']; -const isBinaryPath = isBinaryPath$1; -const { - isWindows: isWindows$1, - isLinux, - EMPTY_FN: EMPTY_FN$2, - EMPTY_STR: EMPTY_STR$1, - KEY_LISTENERS, - KEY_ERR, - KEY_RAW, - HANDLER_KEYS, - EV_CHANGE: EV_CHANGE$2, - EV_ADD: EV_ADD$2, - EV_ADD_DIR: EV_ADD_DIR$2, - EV_ERROR: EV_ERROR$2, - STR_DATA: STR_DATA$1, - STR_END: STR_END$2, - BRACE_START: BRACE_START$1, - STAR -} = constants$1; +function mark (self, p) { + var abs = makeAbs(self, p); + var c = self.cache[abs]; + var m = p; + if (c) { + var isDir = c === 'DIR' || Array.isArray(c); + var slash = p.slice(-1) === '/'; -const THROTTLE_MODE_WATCH = 'watch'; + if (isDir && !slash) + m += '/'; + else if (!isDir && slash) + m = m.slice(0, -1); -const open = promisify$2(fs$2.open); -const stat$2 = promisify$2(fs$2.stat); -const lstat$1 = promisify$2(fs$2.lstat); -const close = promisify$2(fs$2.close); -const fsrealpath = promisify$2(fs$2.realpath); + if (m !== p) { + var mabs = makeAbs(self, m); + self.statCache[mabs] = self.statCache[abs]; + self.cache[mabs] = self.cache[abs]; + } + } -const statMethods$1 = { lstat: lstat$1, stat: stat$2 }; + return m +} -// TODO: emit errors properly. Example: EMFILE on Macos. -const foreach = (val, fn) => { - if (val instanceof Set) { - val.forEach(fn); +// lotta situps... +function makeAbs (self, f) { + var abs = f; + if (f.charAt(0) === '/') { + abs = path$3.join(self.root, f); + } else if (isAbsolute$2(f) || f === '') { + abs = f; + } else if (self.changedCwd) { + abs = path$3.resolve(self.cwd, f); } else { - fn(val); + abs = path$3.resolve(f); } -}; -const addAndConvert = (main, prop, item) => { - let container = main[prop]; - if (!(container instanceof Set)) { - main[prop] = container = new Set([container]); - } - container.add(item); -}; + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/'); -const clearItem = cont => key => { - const set = cont[key]; - if (set instanceof Set) { - set.clear(); - } else { - delete cont[key]; - } -}; + return abs +} -const delFromSet = (main, prop, item) => { - const container = main[prop]; - if (container instanceof Set) { - container.delete(item); - } else if (container === item) { - delete main[prop]; - } -}; -const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored$2 (self, path) { + if (!self.ignore.length) + return false -/** - * @typedef {String} Path - */ + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} -// fs_watch helpers +function childrenIgnored$2 (self, path) { + if (!self.ignore.length) + return false -// object to hold per-process fs_watch instances -// (may be shared across chokidar FSWatcher instances) + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} -/** - * @typedef {Object} FsWatchContainer - * @property {Set} listeners - * @property {Set} errHandlers - * @property {Set} rawEmitters - * @property {fs.FSWatcher=} watcher - * @property {Boolean=} watcherUnusable - */ +var sync$1 = globSync$1; +globSync$1.GlobSync = GlobSync$1; -/** - * @type {Map} - */ -const FsWatchInstances = new Map(); +var fs$1 = require$$0$3; +var rp$1 = fs_realpath; +var minimatch$1 = minimatch_1; +var path$2 = path$b; +var assert$1 = assert$2; +var isAbsolute$1 = pathIsAbsolute.exports; +var common$1 = common$2; +common$1.alphasort; +common$1.alphasorti; +var setopts$1 = common$1.setopts; +var ownProp$1 = common$1.ownProp; +var childrenIgnored$1 = common$1.childrenIgnored; +var isIgnored$1 = common$1.isIgnored; -/** - * Instantiates the fs_watch interface - * @param {String} path to be watched - * @param {Object} options to be passed to fs_watch - * @param {Function} listener main event handler - * @param {Function} errHandler emits info about errors - * @param {Function} emitRaw emits raw event data - * @returns {fs.FSWatcher} new fsevents instance - */ -function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { - const handleEvent = (rawEvent, evPath) => { - listener(path); - emitRaw(rawEvent, evPath, {watchedPath: path}); +function globSync$1 (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') - // emit based on events occurring for files from a directory's watcher in - // case the file's watcher misses it (and rely on throttling to de-dupe) - if (evPath && path !== evPath) { - fsWatchBroadcast( - sysPath$2.resolve(path, evPath), KEY_LISTENERS, sysPath$2.join(path, evPath) - ); - } - }; - try { - return fs$2.watch(path, options, handleEvent); - } catch (error) { - errHandler(error); - } + return new GlobSync$1(pattern, options).found } -/** - * Helper for passing fs_watch event data to a collection of listeners - * @param {Path} fullPath absolute path bound to fs_watch instance - * @param {String} type listener type - * @param {*=} val1 arguments to be passed to listeners - * @param {*=} val2 - * @param {*=} val3 - */ -const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { - const cont = FsWatchInstances.get(fullPath); - if (!cont) return; - foreach(cont[type], (listener) => { - listener(val1, val2, val3); - }); -}; +function GlobSync$1 (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') -/** - * Instantiates the fs_watch interface or binds listeners - * to an existing one covering the same file system entry - * @param {String} path - * @param {String} fullPath absolute path - * @param {Object} options to be passed to fs_watch - * @param {Object} handlers container for event listener functions - */ -const setFsWatchListener = (path, fullPath, options, handlers) => { - const {listener, errHandler, rawEmitter} = handlers; - let cont = FsWatchInstances.get(fullPath); + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') - /** @type {fs.FSWatcher=} */ - let watcher; - if (!options.persistent) { - watcher = createFsWatchInstance( - path, options, listener, errHandler, rawEmitter - ); - return watcher.close.bind(watcher); + if (!(this instanceof GlobSync$1)) + return new GlobSync$1(pattern, options) + + setopts$1(this, pattern, options); + + if (this.noprocess) + return this + + var n = this.minimatch.set.length; + this.matches = new Array(n); + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false); } - if (cont) { - addAndConvert(cont, KEY_LISTENERS, listener); - addAndConvert(cont, KEY_ERR, errHandler); - addAndConvert(cont, KEY_RAW, rawEmitter); - } else { - watcher = createFsWatchInstance( - path, - options, - fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), - errHandler, // no need to use broadcast here - fsWatchBroadcast.bind(null, fullPath, KEY_RAW) - ); - if (!watcher) return; - watcher.on(EV_ERROR$2, async (error) => { - const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); - cont.watcherUnusable = true; // documented since Node 10.4.1 - // Workaround for https://github.com/joyent/node/issues/4337 - if (isWindows$1 && error.code === 'EPERM') { + this._finish(); +} + +GlobSync$1.prototype._finish = function () { + assert$1(this instanceof GlobSync$1); + if (this.realpath) { + var self = this; + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null); + for (var p in matchset) { try { - const fd = await open(path, 'r'); - await close(fd); - broadcastErr(error); - } catch (err) {} - } else { - broadcastErr(error); + p = self._makeAbs(p); + var real = rp$1.realpathSync(p, self.realpathCache); + set[real] = true; + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true; + else + throw er + } } }); - cont = { - listeners: listener, - errHandlers: errHandler, - rawEmitters: rawEmitter, - watcher - }; - FsWatchInstances.set(fullPath, cont); } - // const index = cont.listeners.indexOf(listener); - - // removes this instance's listeners and closes the underlying fs_watch - // instance if there are no more listeners left - return () => { - delFromSet(cont, KEY_LISTENERS, listener); - delFromSet(cont, KEY_ERR, errHandler); - delFromSet(cont, KEY_RAW, rawEmitter); - if (isEmptySet(cont.listeners)) { - // Check to protect against issue gh-730. - // if (cont.watcherUnusable) { - cont.watcher.close(); - // } - FsWatchInstances.delete(fullPath); - HANDLER_KEYS.forEach(clearItem(cont)); - cont.watcher = undefined; - Object.freeze(cont); - } - }; + common$1.finish(this); }; -// fs_watchFile helpers - -// object to hold per-process fs_watchFile instances -// (may be shared across chokidar FSWatcher instances) -const FsWatchFileInstances = new Map(); -/** - * Instantiates the fs_watchFile interface or binds listeners - * to an existing one covering the same file system entry - * @param {String} path to be watched - * @param {String} fullPath absolute path - * @param {Object} options options to be passed to fs_watchFile - * @param {Object} handlers container for event listener functions - * @returns {Function} closer - */ -const setFsWatchFileListener = (path, fullPath, options, handlers) => { - const {listener, rawEmitter} = handlers; - let cont = FsWatchFileInstances.get(fullPath); +GlobSync$1.prototype._process = function (pattern, index, inGlobStar) { + assert$1(this instanceof GlobSync$1); - const copts = cont && cont.options; - if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { - fs$2.unwatchFile(fullPath); - cont = undefined; + // Get the first [n] parts of pattern that are all strings. + var n = 0; + while (typeof pattern[n] === 'string') { + n ++; } + // now n is the index of the first one that is *not* a string. - /* eslint-enable no-unused-vars, prefer-destructuring */ + // See if there's anything else + var prefix; + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index); + return - if (cont) { - addAndConvert(cont, KEY_LISTENERS, listener); - addAndConvert(cont, KEY_RAW, rawEmitter); - } else { - // TODO - // listeners.add(listener); - // rawEmitters.add(rawEmitter); - cont = { - listeners: listener, - rawEmitters: rawEmitter, - options, - watcher: fs$2.watchFile(fullPath, options, (curr, prev) => { - foreach(cont.rawEmitters, (rawEmitter) => { - rawEmitter(EV_CHANGE$2, fullPath, {curr, prev}); - }); - const currmtime = curr.mtimeMs; - if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { - foreach(cont.listeners, (listener) => listener(path, curr)); - } - }) - }; - FsWatchFileInstances.set(fullPath, cont); + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null; + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/'); + break } - // const index = cont.listeners.indexOf(listener); - // Removes this instance's listeners and closes the underlying fs_watchFile - // instance if there are no more listeners left. - return () => { - delFromSet(cont, KEY_LISTENERS, listener); - delFromSet(cont, KEY_RAW, rawEmitter); - if (isEmptySet(cont.listeners)) { - FsWatchFileInstances.delete(fullPath); - fs$2.unwatchFile(fullPath); - cont.options = cont.watcher = undefined; - Object.freeze(cont); - } - }; -}; + var remain = pattern.slice(n); -/** - * @mixin - */ -class NodeFsHandler$1 { + // get the list of entries. + var read; + if (prefix === null) + read = '.'; + else if (isAbsolute$1(prefix) || isAbsolute$1(pattern.join('/'))) { + if (!prefix || !isAbsolute$1(prefix)) + prefix = '/' + prefix; + read = prefix; + } else + read = prefix; -/** - * @param {import("../index").FSWatcher} fsW - */ -constructor(fsW) { - this.fsw = fsW; - this._boundHandleError = (error) => fsW._handleError(error); -} + var abs = this._makeAbs(read); -/** - * Watch file for changes with fs_watchFile or fs_watch. - * @param {String} path to file or dir - * @param {Function} listener on fs change - * @returns {Function} closer for the watcher instance - */ -_watchWithNodeFs(path, listener) { - const opts = this.fsw.options; - const directory = sysPath$2.dirname(path); - const basename = sysPath$2.basename(path); - const parent = this.fsw._getWatchedDir(directory); - parent.add(basename); - const absolutePath = sysPath$2.resolve(path); - const options = {persistent: opts.persistent}; - if (!listener) listener = EMPTY_FN$2; + //if ignored, skip processing + if (childrenIgnored$1(this, read)) + return - let closer; - if (opts.usePolling) { - options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ? - opts.binaryInterval : opts.interval; - closer = setFsWatchFileListener(path, absolutePath, options, { - listener, - rawEmitter: this.fsw._emitRaw - }); - } else { - closer = setFsWatchListener(path, absolutePath, options, { - listener, - errHandler: this._boundHandleError, - rawEmitter: this.fsw._emitRaw - }); - } - return closer; -} + var isGlobStar = remain[0] === minimatch$1.GLOBSTAR; + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar); + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar); +}; -/** - * Watch a file and emit add event if warranted. - * @param {Path} file Path - * @param {fs.Stats} stats result of fs_stat - * @param {Boolean} initialAdd was the file added at watch instantiation? - * @returns {Function} closer for the watcher instance - */ -_handleFile(file, stats, initialAdd) { - if (this.fsw.closed) { - return; - } - const dirname = sysPath$2.dirname(file); - const basename = sysPath$2.basename(file); - const parent = this.fsw._getWatchedDir(dirname); - // stats is always present - let prevStats = stats; - // if the file is already being watched, do nothing - if (parent.has(basename)) return; +GlobSync$1.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar); - const listener = async (path, newStats) => { - if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; - if (!newStats || newStats.mtimeMs === 0) { - try { - const newStats = await stat$2(file); - if (this.fsw.closed) return; - // Check that change event was not fired because of changed only accessTime. - const at = newStats.atimeMs; - const mt = newStats.mtimeMs; - if (!at || at <= mt || mt !== prevStats.mtimeMs) { - this.fsw._emit(EV_CHANGE$2, file, newStats); - } - if (isLinux && prevStats.ino !== newStats.ino) { - this.fsw._closeFile(path); - prevStats = newStats; - this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener)); - } else { - prevStats = newStats; - } - } catch (error) { - // Fix issues where mtime is null but file is still present - this.fsw._remove(dirname, basename); - } - // add is about to be emitted if file not already tracked in parent - } else if (parent.has(basename)) { - // Check that change event was not fired because of changed only accessTime. - const at = newStats.atimeMs; - const mt = newStats.mtimeMs; - if (!at || at <= mt || mt !== prevStats.mtimeMs) { - this.fsw._emit(EV_CHANGE$2, file, newStats); + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0]; + var negate = !!this.minimatch.negate; + var rawGlob = pn._glob; + var dotOk = this.dot || rawGlob.charAt(0) === '.'; + + var matchedEntries = []; + for (var i = 0; i < entries.length; i++) { + var e = entries[i]; + if (e.charAt(0) !== '.' || dotOk) { + var m; + if (negate && !prefix) { + m = !e.match(pn); + } else { + m = e.match(pn); } - prevStats = newStats; + if (m) + matchedEntries.push(e); } - }; - // kick off the watcher - const closer = this._watchWithNodeFs(file, listener); - - // emit an add event if we're supposed to - if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { - if (!this.fsw._throttle(EV_ADD$2, file, 0)) return; - this.fsw._emit(EV_ADD$2, file, stats); } - return closer; -} + var len = matchedEntries.length; + // If there are no matched entries, then nothing matches. + if (len === 0) + return -/** - * Handle symlinks encountered while reading a dir. - * @param {Object} entry returned by readdirp - * @param {String} directory path of dir being read - * @param {String} path of this item - * @param {String} item basename of this item - * @returns {Promise} true if no more processing is needed for this entry. - */ -async _handleSymlink(entry, directory, path, item) { - if (this.fsw.closed) { - return; - } - const full = entry.fullPath; - const dir = this.fsw._getWatchedDir(directory); + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. - if (!this.fsw.options.followSymlinks) { - // watch symlink directly (don't follow) and detect changes - this.fsw._incrReadyCount(); - const linkPath = await fsrealpath(path); - if (this.fsw.closed) return; - if (dir.has(item)) { - if (this.fsw._symlinkPaths.get(full) !== linkPath) { - this.fsw._symlinkPaths.set(full, linkPath); - this.fsw._emit(EV_CHANGE$2, path, entry.stats); + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null); + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i]; + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e; + else + e = prefix + e; } - } else { - dir.add(item); - this.fsw._symlinkPaths.set(full, linkPath); - this.fsw._emit(EV_ADD$2, path, entry.stats); + + if (e.charAt(0) === '/' && !this.nomount) { + e = path$2.join(this.root, e); + } + this._emitMatch(index, e); } - this.fsw._emitReady(); - return true; + // This was the last one, and no stats were needed + return } - // don't follow the same symlink more than once - if (this.fsw._symlinkPaths.has(full)) { - return true; + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift(); + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i]; + var newPattern; + if (prefix) + newPattern = [prefix, e]; + else + newPattern = [e]; + this._process(newPattern.concat(remain), index, inGlobStar); } +}; - this.fsw._symlinkPaths.set(full, true); -} -_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { - // Normalize the directory name on Windows - directory = sysPath$2.join(directory, EMPTY_STR$1); +GlobSync$1.prototype._emitMatch = function (index, e) { + if (isIgnored$1(this, e)) + return - if (!wh.hasGlob) { - throttler = this.fsw._throttle('readdir', directory, 1000); - if (!throttler) return; - } + var abs = this._makeAbs(e); - const previous = this.fsw._getWatchedDir(wh.path); - const current = new Set(); + if (this.mark) + e = this._mark(e); - let stream = this.fsw._readdirp(directory, { - fileFilter: entry => wh.filterPath(entry), - directoryFilter: entry => wh.filterDir(entry), - depth: 0 - }).on(STR_DATA$1, async (entry) => { - if (this.fsw.closed) { - stream = undefined; - return; - } - const item = entry.path; - let path = sysPath$2.join(directory, item); - current.add(item); + if (this.absolute) { + e = abs; + } - if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { - return; - } + if (this.matches[index][e]) + return - if (this.fsw.closed) { - stream = undefined; - return; - } - // Files that present in current directory snapshot - // but absent in previous are added to watch list and - // emit `add` event. - if (item === target || !target && !previous.has(item)) { - this.fsw._incrReadyCount(); + if (this.nodir) { + var c = this.cache[abs]; + if (c === 'DIR' || Array.isArray(c)) + return + } - // ensure relativeness of path is preserved in case of watcher reuse - path = sysPath$2.join(dir, sysPath$2.relative(dir, path)); + this.matches[index][e] = true; - this._addToNodeFs(path, initialAdd, wh, depth + 1); - } - }).on(EV_ERROR$2, this._boundHandleError); + if (this.stat) + this._stat(e); +}; - return new Promise(resolve => - stream.once(STR_END$2, () => { - if (this.fsw.closed) { - stream = undefined; - return; - } - const wasThrottled = throttler ? throttler.clear() : false; - resolve(); +GlobSync$1.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) - // Files that absent in current directory snapshot - // but present in previous emit `remove` event - // and are removed from @watched[directory]. - previous.getChildren().filter((item) => { - return item !== directory && - !current.has(item) && - // in case of intersecting globs; - // a path may have been filtered out of this readdir, but - // shouldn't be removed because it matches a different glob - (!wh.hasGlob || wh.filterPath({ - fullPath: sysPath$2.resolve(directory, item) - })); - }).forEach((item) => { - this.fsw._remove(directory, item); - }); + var entries; + var lstat; + try { + lstat = fs$1.lstatSync(abs); + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } - stream = undefined; + var isSym = lstat && lstat.isSymbolicLink(); + this.symlinks[abs] = isSym; - // one more time for any missed in case changes came in extremely quickly - if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); - }) - ); -} + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE'; + else + entries = this._readdir(abs, false); -/** - * Read directory to add / remove files from `@watched` list and re-read it on change. - * @param {String} dir fs path - * @param {fs.Stats} stats - * @param {Boolean} initialAdd - * @param {Number} depth relative to user-supplied path - * @param {String} target child path targeted for watch - * @param {Object} wh Common watch helpers for this path - * @param {String} realpath - * @returns {Promise} closer for the watcher instance. - */ -async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { - const parentDir = this.fsw._getWatchedDir(sysPath$2.dirname(dir)); - const tracked = parentDir.has(sysPath$2.basename(dir)); - if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { - if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats); - } + return entries +}; - // ensure dir is tracked (harmless if redundant) - parentDir.add(sysPath$2.basename(dir)); - this.fsw._getWatchedDir(dir); - let throttler; - let closer; +GlobSync$1.prototype._readdir = function (abs, inGlobStar) { - const oDepth = this.fsw.options.depth; - if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) { - if (!target) { - await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); - if (this.fsw.closed) return; - } + if (inGlobStar && !ownProp$1(this.symlinks, abs)) + return this._readdirInGlobStar(abs) - closer = this._watchWithNodeFs(dir, (dirPath, stats) => { - // if current directory is removed, do nothing - if (stats && stats.mtimeMs === 0) return; + if (ownProp$1(this.cache, abs)) { + var c = this.cache[abs]; + if (!c || c === 'FILE') + return null - this._handleRead(dirPath, false, wh, target, dir, depth, throttler); - }); + if (Array.isArray(c)) + return c } - return closer; -} -/** - * Handle added file, directory, or glob pattern. - * Delegates call to _handleFile / _handleDir after checks. - * @param {String} path to file or ir - * @param {Boolean} initialAdd was the file added at watch instantiation? - * @param {Object} priorWh depth relative to user-supplied path - * @param {Number} depth Child path actually targeted for watch - * @param {String=} target Child path actually targeted for watch - * @returns {Promise} - */ -async _addToNodeFs(path, initialAdd, priorWh, depth, target) { - const ready = this.fsw._emitReady; - if (this.fsw._isIgnored(path) || this.fsw.closed) { - ready(); - return false; + try { + return this._readdirEntries(abs, fs$1.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er); + return null } +}; - const wh = this.fsw._getWatchHelpers(path, depth); - if (!wh.hasGlob && priorWh) { - wh.hasGlob = priorWh.hasGlob; - wh.globFilter = priorWh.globFilter; - wh.filterPath = entry => priorWh.filterPath(entry); - wh.filterDir = entry => priorWh.filterDir(entry); +GlobSync$1.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i]; + if (abs === '/') + e = abs + e; + else + e = abs + '/' + e; + this.cache[e] = true; + } } - // evaluate what is at the path we're being asked to watch - try { - const stats = await statMethods$1[wh.statMethod](wh.watchPath); - if (this.fsw.closed) return; - if (this.fsw._isIgnored(wh.watchPath, stats)) { - ready(); - return false; - } + this.cache[abs] = entries; - const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START$1); - let closer; - if (stats.isDirectory()) { - const absPath = sysPath$2.resolve(path); - const targetPath = follow ? await fsrealpath(path) : path; - if (this.fsw.closed) return; - closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); - if (this.fsw.closed) return; - // preserve this symlink's target path - if (absPath !== targetPath && targetPath !== undefined) { - this.fsw._symlinkPaths.set(absPath, targetPath); - } - } else if (stats.isSymbolicLink()) { - const targetPath = follow ? await fsrealpath(path) : path; - if (this.fsw.closed) return; - const parent = sysPath$2.dirname(wh.watchPath); - this.fsw._getWatchedDir(parent).add(wh.watchPath); - this.fsw._emit(EV_ADD$2, wh.watchPath, stats); - closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); - if (this.fsw.closed) return; + // mark and cache dir-ness + return entries +}; - // preserve this symlink's target path - if (targetPath !== undefined) { - this.fsw._symlinkPaths.set(sysPath$2.resolve(path), targetPath); +GlobSync$1.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f); + this.cache[abs] = 'FILE'; + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd); + error.path = this.cwd; + error.code = er.code; + throw error } - } else { - closer = this._handleFile(wh.watchPath, stats, initialAdd); - } - ready(); + break - this.fsw._addPathCloser(path, closer); - return false; + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false; + break - } catch (error) { - if (this.fsw._handleError(error)) { - ready(); - return path; - } + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false; + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er); + break } -} - -} +}; -var nodefsHandler = NodeFsHandler$1; +GlobSync$1.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { -var fseventsHandler = {exports: {}}; + var entries = this._readdir(abs, inGlobStar); -const fs$1 = require$$0__default$3['default']; -const sysPath$1 = require$$0__default$2['default']; -const { promisify: promisify$1 } = require$$0__default['default']; + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return -let fsevents; -try { - fsevents = undefined; -} catch (error) { - if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error); -} + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1); + var gspref = prefix ? [ prefix ] : []; + var noGlobStar = gspref.concat(remainWithoutGlobStar); -if (fsevents) { - // TODO: real check - const mtch = process.version.match(/v(\d+)\.(\d+)/); - if (mtch && mtch[1] && mtch[2]) { - const maj = Number.parseInt(mtch[1], 10); - const min = Number.parseInt(mtch[2], 10); - if (maj === 8 && min < 16) { - fsevents = undefined; - } - } -} + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false); -const { - EV_ADD: EV_ADD$1, - EV_CHANGE: EV_CHANGE$1, - EV_ADD_DIR: EV_ADD_DIR$1, - EV_UNLINK: EV_UNLINK$1, - EV_ERROR: EV_ERROR$1, - STR_DATA, - STR_END: STR_END$1, - FSEVENT_CREATED, - FSEVENT_MODIFIED, - FSEVENT_DELETED, - FSEVENT_MOVED, - // FSEVENT_CLONED, - FSEVENT_UNKNOWN, - FSEVENT_TYPE_FILE, - FSEVENT_TYPE_DIRECTORY, - FSEVENT_TYPE_SYMLINK, + var len = entries.length; + var isSym = this.symlinks[abs]; - ROOT_GLOBSTAR, - DIR_SUFFIX, - DOT_SLASH, - FUNCTION_TYPE: FUNCTION_TYPE$1, - EMPTY_FN: EMPTY_FN$1, - IDENTITY_FN -} = constants$1; + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return -const Depth = (value) => isNaN(value) ? {} : {depth: value}; + for (var i = 0; i < len; i++) { + var e = entries[i]; + if (e.charAt(0) === '.' && !this.dot) + continue -const stat$1 = promisify$1(fs$1.stat); -const lstat = promisify$1(fs$1.lstat); -const realpath = promisify$1(fs$1.realpath); + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar); + this._process(instead, index, true); -const statMethods = { stat: stat$1, lstat }; + var below = gspref.concat(entries[i], remain); + this._process(below, index, true); + } +}; -/** - * @typedef {String} Path - */ +GlobSync$1.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix); -/** - * @typedef {Object} FsEventsWatchContainer - * @property {Set} listeners - * @property {Function} rawEmitter - * @property {{stop: Function}} watcher - */ + if (!this.matches[index]) + this.matches[index] = Object.create(null); -// fsevents instance helper functions -/** - * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) - * @type {Map} - */ -const FSEventsWatchers = new Map(); + // If it doesn't exist, then just mark the lack of results + if (!exists) + return -// Threshold of duplicate path prefixes at which to start -// consolidating going forward -const consolidateThreshhold = 10; + if (prefix && isAbsolute$1(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix); + if (prefix.charAt(0) === '/') { + prefix = path$2.join(this.root, prefix); + } else { + prefix = path$2.resolve(this.root, prefix); + if (trail) + prefix += '/'; + } + } -const wrongEventFlags = new Set([ - 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 -]); + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/'); -/** - * Instantiates the fsevents interface - * @param {Path} path path to be watched - * @param {Function} callback called when fsevents is bound and ready - * @returns {{stop: Function}} new fsevents instance - */ -const createFSEventsInstance = (path, callback) => { - const stop = fsevents.watch(path, callback); - return {stop}; + // Mark this as a match + this._emitMatch(index, prefix); }; -/** - * Instantiates the fsevents interface or binds listeners to an existing one covering - * the same file tree. - * @param {Path} path - to be watched - * @param {Path} realPath - real path for symlinks - * @param {Function} listener - called when fsevents emits events - * @param {Function} rawEmitter - passes data to listeners of the 'raw' event - * @returns {Function} closer - */ -function setFSEventsListener(path, realPath, listener, rawEmitter) { - let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath; - - const parentPath = sysPath$1.dirname(watchPath); - let cont = FSEventsWatchers.get(watchPath); +// Returns either 'DIR', 'FILE', or false +GlobSync$1.prototype._stat = function (f) { + var abs = this._makeAbs(f); + var needDir = f.slice(-1) === '/'; - // If we've accumulated a substantial number of paths that - // could have been consolidated by watching one directory - // above the current one, create a watcher on the parent - // path instead, so that we do consolidate going forward. - if (couldConsolidate(parentPath)) { - watchPath = parentPath; - } + if (f.length > this.maxLength) + return false - const resolvedPath = sysPath$1.resolve(path); - const hasSymlink = resolvedPath !== realPath; + if (!this.stat && ownProp$1(this.cache, abs)) { + var c = this.cache[abs]; - const filteredListener = (fullPath, flags, info) => { - if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); - if ( - fullPath === resolvedPath || - !fullPath.indexOf(resolvedPath + sysPath$1.sep) - ) listener(fullPath, flags, info); - }; + if (Array.isArray(c)) + c = 'DIR'; - // check if there is already a watcher on a parent path - // modifies `watchPath` to the parent path when it finds a match - let watchedParent = false; - for (const watchedPath of FSEventsWatchers.keys()) { - if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) { - watchPath = watchedPath; - cont = FSEventsWatchers.get(watchPath); - watchedParent = true; - break; - } - } + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c - if (cont || watchedParent) { - cont.listeners.add(filteredListener); - } else { - cont = { - listeners: new Set([filteredListener]), - rawEmitter, - watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { - if (!cont.listeners.size) return; - const info = fsevents.getInfo(fullPath, flags); - cont.listeners.forEach(list => { - list(fullPath, flags, info); - }); + if (needDir && c === 'FILE') + return false - cont.rawEmitter(info.event, fullPath, info); - }) - }; - FSEventsWatchers.set(watchPath, cont); + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. } - - // removes this instance's listeners and closes the underlying fsevents - // instance if there are no more listeners left - return () => { - const lst = cont.listeners; - - lst.delete(filteredListener); - if (!lst.size) { - FSEventsWatchers.delete(watchPath); - if (cont.watcher) return cont.watcher.stop().then(() => { - cont.rawEmitter = cont.watcher = undefined; - Object.freeze(cont); - }); + var stat = this.statCache[abs]; + if (!stat) { + var lstat; + try { + lstat = fs$1.lstatSync(abs); + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false; + return false + } } - }; -} -// Decide whether or not we should start a new higher-level -// parent watcher -const couldConsolidate = (path) => { - let count = 0; - for (const watchPath of FSEventsWatchers.keys()) { - if (watchPath.indexOf(path) === 0) { - count++; - if (count >= consolidateThreshhold) { - return true; + if (lstat && lstat.isSymbolicLink()) { + try { + stat = fs$1.statSync(abs); + } catch (er) { + stat = lstat; } + } else { + stat = lstat; } } - return false; -}; + this.statCache[abs] = stat; -// returns boolean indicating whether fsevents can be used -const canUse = () => fsevents && FSEventsWatchers.size < 128; + var c = true; + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE'; -// determines subdirectory traversal levels from root to path -const calcDepth = (path, root) => { - let i = 0; - while (!path.indexOf(root) && (path = sysPath$1.dirname(path)) !== root) i++; - return i; -}; + this.cache[abs] = this.cache[abs] || c; -// returns boolean indicating whether the fsevents' event info has the same type -// as the one returned by fs.stat -const sameTypes = (info, stats) => ( - info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || - info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || - info.type === FSEVENT_TYPE_FILE && stats.isFile() -); + if (needDir && c === 'FILE') + return false -/** - * @mixin - */ -class FsEventsHandler$1 { + return c +}; -/** - * @param {import('../index').FSWatcher} fsw - */ -constructor(fsw) { - this.fsw = fsw; -} -checkIgnored(path, stats) { - const ipaths = this.fsw._ignoredPaths; - if (this.fsw._isIgnored(path, stats)) { - ipaths.add(path); - if (stats && stats.isDirectory()) { - ipaths.add(path + ROOT_GLOBSTAR); - } - return true; - } +GlobSync$1.prototype._mark = function (p) { + return common$1.mark(this, p) +}; - ipaths.delete(path); - ipaths.delete(path + ROOT_GLOBSTAR); -} +GlobSync$1.prototype._makeAbs = function (f) { + return common$1.makeAbs(this, f) +}; -addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { - const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1; - this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts); -} +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +var wrappy_1 = wrappy$2; +function wrappy$2 (fn, cb) { + if (fn && cb) return wrappy$2(fn)(cb) -async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { - try { - const stats = await stat$1(path); - if (this.fsw.closed) return; - if (sameTypes(info, stats)) { - this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); - } else { - this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k]; + }); + + return wrapper + + function wrapper() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; } - } catch (error) { - if (error.code === 'EACCES') { - this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); - } else { - this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); + var ret = fn.apply(this, args); + var cb = args[args.length-1]; + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k]; + }); } + return ret } } -handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { - if (this.fsw.closed || this.checkIgnored(path)) return; +var once$3 = {exports: {}}; - if (event === EV_UNLINK$1) { - const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY; - // suppress unlink events on never before seen files - if (isDirectory || watchedDir.has(item)) { - this.fsw._remove(parent, item, isDirectory); - } - } else { - if (event === EV_ADD$1) { - // track new directories - if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path); +var wrappy$1 = wrappy_1; +once$3.exports = wrappy$1(once$2); +once$3.exports.strict = wrappy$1(onceStrict); - if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { - // push symlinks back to the top of the stack to get handled - const curDepth = opts.depth === undefined ? - undefined : calcDepth(fullPath, realPath) + 1; - return this._addToFsEvents(path, false, true, curDepth); - } +once$2.proto = once$2(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once$2(this) + }, + configurable: true + }); - // track new paths - // (other than symlinks being followed, which will be tracked soon) - this.fsw._getWatchedDir(parent).add(item); - } - /** - * @type {'add'|'addDir'|'unlink'|'unlinkDir'} - */ - const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; - this.fsw._emit(eventName, path); - if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true); + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }); +}); + +function once$2 (fn) { + var f = function () { + if (f.called) return f.value + f.called = true; + return f.value = fn.apply(this, arguments) + }; + f.called = false; + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true; + return f.value = fn.apply(this, arguments) + }; + var name = fn.name || 'Function wrapped with `once`'; + f.onceError = name + " shouldn't be called more than once"; + f.called = false; + return f +} + +var wrappy = wrappy_1; +var reqs = Object.create(null); +var once$1 = once$3.exports; + +var inflight_1 = wrappy(inflight$1); + +function inflight$1 (key, cb) { + if (reqs[key]) { + reqs[key].push(cb); + return null + } else { + reqs[key] = [cb]; + return makeres(key) } } -/** - * Handle symlinks encountered during directory scan - * @param {String} watchPath - file/dir path to be watched with fsevents - * @param {String} realPath - real path (in case of symlinks) - * @param {Function} transform - path transformer - * @param {Function} globFilter - path filter in case a glob pattern was provided - * @returns {Function} closer for the watcher instance -*/ -_watchWithFsEvents(watchPath, realPath, transform, globFilter) { - if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; - const opts = this.fsw.options; - const watchCallback = async (fullPath, flags, info) => { - if (this.fsw.closed) return; - if ( - opts.depth !== undefined && - calcDepth(fullPath, realPath) > opts.depth - ) return; - const path = transform(sysPath$1.join( - watchPath, sysPath$1.relative(watchPath, fullPath) - )); - if (globFilter && !globFilter(path)) return; - // ensure directories are tracked - const parent = sysPath$1.dirname(path); - const item = sysPath$1.basename(path); - const watchedDir = this.fsw._getWatchedDir( - info.type === FSEVENT_TYPE_DIRECTORY ? path : parent - ); +function makeres (key) { + return once$1(function RES () { + var cbs = reqs[key]; + var len = cbs.length; + var args = slice$1(arguments); - // correct for wrong events emitted - if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { - if (typeof opts.ignored === FUNCTION_TYPE$1) { - let stats; - try { - stats = await stat$1(path); - } catch (error) {} - if (this.fsw.closed) return; - if (this.checkIgnored(path, stats)) return; - if (sameTypes(info, stats)) { - this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); - } else { - this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); - } - } else { - this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args); } - } else { - switch (info.event) { - case FSEVENT_CREATED: - case FSEVENT_MODIFIED: - return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); - case FSEVENT_DELETED: - case FSEVENT_MOVED: - return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len); + process.nextTick(function () { + RES.apply(null, args); + }); + } else { + delete reqs[key]; } } - }; + }) +} - const closer = setFSEventsListener( - watchPath, - realPath, - watchCallback, - this.fsw._emitRaw - ); +function slice$1 (args) { + var length = args.length; + var array = []; - this.fsw._emitReady(); - return closer; + for (var i = 0; i < length; i++) array[i] = args[i]; + return array } -/** - * Handle symlinks encountered during directory scan - * @param {String} linkPath path to symlink - * @param {String} fullPath absolute path to the symlink - * @param {Function} transform pre-existing path transformer - * @param {Number} curDepth level of subdirectories traversed to where symlink is - * @returns {Promise} - */ -async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { - // don't follow the same symlink more than once - if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. - this.fsw._symlinkPaths.set(fullPath, true); - this.fsw._incrReadyCount(); +var glob_1 = glob; - try { - const linkTarget = await realpath(linkPath); - if (this.fsw.closed) return; - if (this.fsw._isIgnored(linkTarget)) { - return this.fsw._emitReady(); - } +var fs = require$$0$3; +var rp = fs_realpath; +var minimatch = minimatch_1; +var inherits$1 = inherits$2.exports; +var EE = require$$0$5.EventEmitter; +var path$1 = path$b; +var assert = assert$2; +var isAbsolute = pathIsAbsolute.exports; +var globSync = sync$1; +var common = common$2; +common.alphasort; +common.alphasorti; +var setopts = common.setopts; +var ownProp = common.ownProp; +var inflight = inflight_1; +var childrenIgnored = common.childrenIgnored; +var isIgnored = common.isIgnored; - this.fsw._incrReadyCount(); +var once = once$3.exports; - // add the linkTarget for watching with a wrapper for transform - // that causes emitted paths to incorporate the link's path - this._addToFsEvents(linkTarget || linkPath, (path) => { - let aliasedPath = linkPath; - if (linkTarget && linkTarget !== DOT_SLASH) { - aliasedPath = path.replace(linkTarget, linkPath); - } else if (path !== DOT_SLASH) { - aliasedPath = sysPath$1.join(linkPath, path); - } - return transform(aliasedPath); - }, false, curDepth); - } catch(error) { - if (this.fsw._handleError(error)) { - return this.fsw._emitReady(); - } +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {}; + if (!options) options = {}; + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) } + + return new Glob(pattern, options, cb) } -/** - * - * @param {Path} newPath - * @param {fs.Stats} stats - */ -emitAdd(newPath, stats, processPath, opts, forceAdd) { - const pp = processPath(newPath); - const isDir = stats.isDirectory(); - const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp)); - const base = sysPath$1.basename(pp); +glob.sync = globSync; +var GlobSync = glob.GlobSync = globSync.GlobSync; - // ensure empty dirs get tracked - if (isDir) this.fsw._getWatchedDir(pp); - if (dirObj.has(base)) return; - dirObj.add(base); +// old api surface +glob.glob = glob; - if (!opts.ignoreInitial || forceAdd === true) { - this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats); +function extend$1 (origin, add) { + if (add === null || typeof add !== 'object') { + return origin } -} - -initWatch(realPath, path, wh, processPath) { - if (this.fsw.closed) return; - const closer = this._watchWithFsEvents( - wh.watchPath, - sysPath$1.resolve(realPath || wh.watchPath), - processPath, - wh.globFilter - ); - this.fsw._addPathCloser(path, closer); -} -/** - * Handle added path with fsevents - * @param {String} path file/dir path or glob pattern - * @param {Function|Boolean=} transform converts working path to what the user expects - * @param {Boolean=} forceAdd ensure add is emitted - * @param {Number=} priorDepth Level of subdirectories already traversed. - * @returns {Promise} - */ -async _addToFsEvents(path, transform, forceAdd, priorDepth) { - if (this.fsw.closed) { - return; + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; } - const opts = this.fsw.options; - const processPath = typeof transform === FUNCTION_TYPE$1 ? transform : IDENTITY_FN; + return origin +} - const wh = this.fsw._getWatchHelpers(path); +glob.hasMagic = function (pattern, options_) { + var options = extend$1({}, options_); + options.noprocess = true; - // evaluate what is at the path we're being asked to watch - try { - const stats = await statMethods[wh.statMethod](wh.watchPath); - if (this.fsw.closed) return; - if (this.fsw._isIgnored(wh.watchPath, stats)) { - throw null; - } - if (stats.isDirectory()) { - // emit addDir unless this is a glob parent - if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd); + var g = new Glob(pattern, options); + var set = g.minimatch.set; - // don't recurse further if it would exceed depth setting - if (priorDepth && priorDepth > opts.depth) return; + if (!pattern) + return false - // scan the contents of the dir - this.fsw._readdirp(wh.watchPath, { - fileFilter: entry => wh.filterPath(entry), - directoryFilter: entry => wh.filterDir(entry), - ...Depth(opts.depth - (priorDepth || 0)) - }).on(STR_DATA, (entry) => { - // need to check filterPath on dirs b/c filterDir is less restrictive - if (this.fsw.closed) { - return; - } - if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; + if (set.length > 1) + return true - const joinedPath = sysPath$1.join(wh.watchPath, entry.path); - const {fullPath} = entry; + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } - if (wh.followSymlinks && entry.stats.isSymbolicLink()) { - // preserve the current depth here since it can't be derived from - // real paths past the symlink - const curDepth = opts.depth === undefined ? - undefined : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1; + return false +}; - this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); - } else { - this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); - } - }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => { - this.fsw._emitReady(); - }); - } else { - this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); - this.fsw._emitReady(); - } - } catch (error) { - if (!error || this.fsw._handleError(error)) { - // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__- - this.fsw._emitReady(); - this.fsw._emitReady(); - } +glob.Glob = Glob; +inherits$1(Glob, EE); +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options; + options = null; } - if (opts.persistent && forceAdd !== true) { - if (typeof transform === FUNCTION_TYPE$1) { - // realpath has already been resolved - this.initWatch(undefined, path, wh, processPath); - } else { - let realPath; - try { - realPath = await realpath(wh.watchPath); - } catch (e) {} - this.initWatch(realPath, path, wh, processPath); - } + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) } -} - -} -fseventsHandler.exports = FsEventsHandler$1; -fseventsHandler.exports.canUse = canUse; + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) -const { EventEmitter } = require$$0__default$4['default']; -const fs = require$$0__default$3['default']; -const sysPath = require$$0__default$2['default']; -const { promisify } = require$$0__default['default']; -const readdirp = readdirp_1; -const anymatch = anymatch$2.exports.default; -const globParent = globParent$1; -const isGlob = isGlob$2; -const braces = braces_1; -const normalizePath = normalizePath$2; + setopts(this, pattern, options); + this._didRealPath = false; -const NodeFsHandler = nodefsHandler; -const FsEventsHandler = fseventsHandler.exports; -const { - EV_ALL, - EV_READY, - EV_ADD, - EV_CHANGE, - EV_UNLINK, - EV_ADD_DIR, - EV_UNLINK_DIR, - EV_RAW, - EV_ERROR, + // process each pattern in the minimatch set + var n = this.minimatch.set.length; - STR_CLOSE, - STR_END, + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n); - BACK_SLASH_RE, - DOUBLE_SLASH_RE, - SLASH_OR_BACK_SLASH_RE, - DOT_RE, - REPLACER_RE, + if (typeof cb === 'function') { + cb = once(cb); + this.on('error', cb); + this.on('end', function (matches) { + cb(null, matches); + }); + } - SLASH, - SLASH_SLASH, - BRACE_START, - BANG, - ONE_DOT, - TWO_DOTS, - GLOBSTAR, - SLASH_GLOBSTAR, - ANYMATCH_OPTS, - STRING_TYPE, - FUNCTION_TYPE, - EMPTY_STR, - EMPTY_FN, + var self = this; + this._processing = 0; - isWindows, - isMacos, - isIBMi -} = constants$1; + this._emitQueue = []; + this._processQueue = []; + this.paused = false; -const stat = promisify(fs.stat); -const readdir = promisify(fs.readdir); + if (this.noprocess) + return this -/** - * @typedef {String} Path - * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName - * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType - */ + if (n === 0) + return done() -/** - * - * @typedef {Object} WatchHelpers - * @property {Boolean} followSymlinks - * @property {'stat'|'lstat'} statMethod - * @property {Path} path - * @property {Path} watchPath - * @property {Function} entryPath - * @property {Boolean} hasGlob - * @property {Object} globFilter - * @property {Function} filterPath - * @property {Function} filterDir - */ + var sync = true; + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done); + } + sync = false; -const arrify = (value = []) => Array.isArray(value) ? value : [value]; -const flatten$1 = (list, result = []) => { - list.forEach(item => { - if (Array.isArray(item)) { - flatten$1(item, result); - } else { - result.push(item); + function done () { + --self._processing; + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish(); + }); + } else { + self._finish(); + } } - }); - return result; -}; - -const unifyPaths = (paths_) => { - /** - * @type {Array} - */ - const paths = flatten$1(arrify(paths_)); - if (!paths.every(p => typeof p === STRING_TYPE)) { - throw new TypeError(`Non-string provided as watch path: ${paths}`); } - return paths.map(normalizePathToUnix); -}; +} -// If SLASH_SLASH occurs at the beginning of path, it is not replaced -// because "//StoragePC/DrivePool/Movies" is a valid network path -const toUnix = (string) => { - let str = string.replace(BACK_SLASH_RE, SLASH); - let prepend = false; - if (str.startsWith(SLASH_SLASH)) { - prepend = true; - } - while (str.match(DOUBLE_SLASH_RE)) { - str = str.replace(DOUBLE_SLASH_RE, SLASH); - } - if (prepend) { - str = SLASH + str; - } - return str; -}; +Glob.prototype._finish = function () { + assert(this instanceof Glob); + if (this.aborted) + return -// Our version of upath.normalize -// TODO: this is not equal to path-normalize module - investigate why -const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path))); + if (this.realpath && !this._didRealpath) + return this._realpath() -const normalizeIgnored = (cwd = EMPTY_STR) => (path) => { - if (typeof path !== STRING_TYPE) return path; - return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path)); + common.finish(this); + this.emit('end', this.found); }; -const getAbsolutePath = (path, cwd) => { - if (sysPath.isAbsolute(path)) { - return path; - } - if (path.startsWith(BANG)) { - return BANG + sysPath.join(cwd, path.slice(1)); +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true; + + var n = this.matches.length; + if (n === 0) + return this._finish() + + var self = this; + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next); + + function next () { + if (--n === 0) + self._finish(); } - return sysPath.join(cwd, path); }; -const undef = (opts, key) => opts[key] === undefined; +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index]; + if (!matchset) + return cb() -/** - * Directory entry. - * @property {Path} path - * @property {Set} items - */ -class DirEntry { - /** - * @param {Path} dir - * @param {Function} removeWatcher - */ - constructor(dir, removeWatcher) { - this.path = dir; - this._removeWatcher = removeWatcher; - /** @type {Set} */ - this.items = new Set(); - } + var found = Object.keys(matchset); + var self = this; + var n = found.length; - add(item) { - const {items} = this; - if (!items) return; - if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); - } + if (n === 0) + return cb() - async remove(item) { - const {items} = this; - if (!items) return; - items.delete(item); - if (items.size > 0) return; + var set = this.matches[index] = Object.create(null); + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p); + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true; + else if (er.syscall === 'stat') + set[p] = true; + else + self.emit('error', er); // srsly wtf right here - const dir = this.path; - try { - await readdir(dir); - } catch (err) { - if (this._removeWatcher) { - this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); + if (--n === 0) { + self.matches[index] = set; + cb(); } - } - } + }); + }); +}; - has(item) { - const {items} = this; - if (!items) return; - return items.has(item); - } +Glob.prototype._mark = function (p) { + return common.mark(this, p) +}; - /** - * @returns {Array} - */ - getChildren() { - const {items} = this; - if (!items) return; - return [...items.values()]; - } +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +}; - dispose() { - this.items.clear(); - delete this.path; - delete this._removeWatcher; - delete this.items; - Object.freeze(this); - } -} +Glob.prototype.abort = function () { + this.aborted = true; + this.emit('abort'); +}; -const STAT_METHOD_F = 'stat'; -const STAT_METHOD_L = 'lstat'; -class WatchHelper { - constructor(path, watchPath, follow, fsw) { - this.fsw = fsw; - this.path = path = path.replace(REPLACER_RE, EMPTY_STR); - this.watchPath = watchPath; - this.fullWatchPath = sysPath.resolve(watchPath); - this.hasGlob = watchPath !== path; - /** @type {object|boolean} */ - if (path === EMPTY_STR) this.hasGlob = false; - this.globSymlink = this.hasGlob && follow ? undefined : false; - this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; - this.dirParts = this.getDirParts(path); - this.dirParts.forEach((parts) => { - if (parts.length > 1) parts.pop(); - }); - this.followSymlinks = follow; - this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true; + this.emit('pause'); } +}; - checkGlobSymlink(entry) { - // only need to resolve once - // first entry should always have entry.parentDir === EMPTY_STR - if (this.globSymlink === undefined) { - this.globSymlink = entry.fullParentDir === this.fullWatchPath ? - false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath}; +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume'); + this.paused = false; + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0); + this._emitQueue.length = 0; + for (var i = 0; i < eq.length; i ++) { + var e = eq[i]; + this._emitMatch(e[0], e[1]); + } } - - if (this.globSymlink) { - return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); + if (this._processQueue.length) { + var pq = this._processQueue.slice(0); + this._processQueue.length = 0; + for (var i = 0; i < pq.length; i ++) { + var p = pq[i]; + this._processing--; + this._process(p[0], p[1], p[2], p[3]); + } } - - return entry.fullPath; } +}; - entryPath(entry) { - return sysPath.join(this.watchPath, - sysPath.relative(this.watchPath, this.checkGlobSymlink(entry)) - ); - } +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob); + assert(typeof cb === 'function'); - filterPath(entry) { - const {stats} = entry; - if (stats && stats.isSymbolicLink()) return this.filterDir(entry); - const resolvedPath = this.entryPath(entry); - const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? - this.globFilter(resolvedPath) : true; - return matchesGlob && - this.fsw._isntIgnored(resolvedPath, stats) && - this.fsw._hasReadPermissions(stats); - } + if (this.aborted) + return - getDirParts(path) { - if (!this.hasGlob) return []; - const parts = []; - const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path]; - expandedPath.forEach((path) => { - parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); - }); - return parts; + this._processing++; + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]); + return } - filterDir(entry) { - if (this.hasGlob) { - const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); - let globstar = false; - this.unmatchedGlob = !this.dirParts.some((parts) => { - return parts.every((part, i) => { - if (part === GLOBSTAR) globstar = true; - return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); - }); - }); - } - return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0; + while (typeof pattern[n] === 'string') { + n ++; } -} + // now n is the index of the first one that is *not* a string. -/** - * Watches files & directories for changes. Emitted events: - * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` - * - * new FSWatcher() - * .add(directories) - * .on('add', path => log('File', path, 'was added')) - */ -class FSWatcher extends EventEmitter { -// Not indenting methods for history sake; for now. -constructor(_opts) { - super(); + // see if there's anything else + var prefix; + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb); + return - const opts = {}; - if (_opts) Object.assign(opts, _opts); // for frozen objects + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null; + break - /** @type {Map} */ - this._watched = new Map(); - /** @type {Map} */ - this._closers = new Map(); - /** @type {Set} */ - this._ignoredPaths = new Set(); + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/'); + break + } - /** @type {Map} */ - this._throttled = new Map(); + var remain = pattern.slice(n); - /** @type {Map} */ - this._symlinkPaths = new Map(); + // get the list of entries. + var read; + if (prefix === null) + read = '.'; + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix; + read = prefix; + } else + read = prefix; - this._streams = new Set(); - this.closed = false; + var abs = this._makeAbs(read); - // Set up default options. - if (undef(opts, 'persistent')) opts.persistent = true; - if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false; - if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false; - if (undef(opts, 'interval')) opts.interval = 100; - if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300; - if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false; - opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() - // Enable fsevents on OS X when polling isn't explicitly enabled. - if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; + var isGlobStar = remain[0] === minimatch.GLOBSTAR; + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb); + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb); +}; - // If we can't use fsevents, ensure the options reflect it's disabled. - const canUseFsEvents = FsEventsHandler.canUse(); - if (!canUseFsEvents) opts.useFsEvents = false; +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this; + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }); +}; - // Use polling on Mac if not using fsevents. - // Other platforms use non-polling fs_watch. - if (undef(opts, 'usePolling') && !opts.useFsEvents) { - opts.usePolling = isMacos; - } +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - // Always default to polling on IBM i because fs.watch() is not available on IBM i. - if(isIBMi) { - opts.usePolling = true; - } + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() - // Global override (useful for end-developers that need to force polling for all - // instances of chokidar, regardless of usage/dependency depth) - const envPoll = process.env.CHOKIDAR_USEPOLLING; - if (envPoll !== undefined) { - const envLower = envPoll.toLowerCase(); + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0]; + var negate = !!this.minimatch.negate; + var rawGlob = pn._glob; + var dotOk = this.dot || rawGlob.charAt(0) === '.'; - if (envLower === 'false' || envLower === '0') { - opts.usePolling = false; - } else if (envLower === 'true' || envLower === '1') { - opts.usePolling = true; - } else { - opts.usePolling = !!envLower; + var matchedEntries = []; + for (var i = 0; i < entries.length; i++) { + var e = entries[i]; + if (e.charAt(0) !== '.' || dotOk) { + var m; + if (negate && !prefix) { + m = !e.match(pn); + } else { + m = e.match(pn); + } + if (m) + matchedEntries.push(e); } } - const envInterval = process.env.CHOKIDAR_INTERVAL; - if (envInterval) { - opts.interval = Number.parseInt(envInterval, 10); - } - // Editor atomic write normalization enabled by default with fs.watch - if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; - if (opts.atomic) this._pendingUnlinks = new Map(); + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - if (undef(opts, 'followSymlinks')) opts.followSymlinks = true; + var len = matchedEntries.length; + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() - if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false; - if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; - const awf = opts.awaitWriteFinish; - if (awf) { - if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; - if (!awf.pollInterval) awf.pollInterval = 100; - this._pendingWrites = new Map(); - } - if (opts.ignored) opts.ignored = arrify(opts.ignored); + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. - let readyCalls = 0; - this._emitReady = () => { - readyCalls++; - if (readyCalls >= this._readyCount) { - this._emitReady = EMPTY_FN; - this._readyEmitted = true; - // use process.nextTick to allow time for listener to be bound - process.nextTick(() => this.emit(EV_READY)); + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null); + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i]; + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e; + else + e = prefix + e; + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path$1.join(this.root, e); + } + this._emitMatch(index, e); } - }; - this._emitRaw = (...args) => this.emit(EV_RAW, ...args); - this._readyEmitted = false; - this.options = opts; + // This was the last one, and no stats were needed + return cb() + } - // Initialize with proper watcher. - if (opts.useFsEvents) { - this._fsEventsHandler = new FsEventsHandler(this); - } else { - this._nodeFsHandler = new NodeFsHandler(this); + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift(); + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i]; + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e; + else + e = prefix + e; + } + this._process([e].concat(remain), index, inGlobStar, cb); } + cb(); +}; - // You’re frozen when your heart’s not open. - Object.freeze(opts); -} +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return -// Public methods + if (isIgnored(this, e)) + return -/** - * Adds paths to be watched on an existing FSWatcher instance - * @param {Path|Array} paths_ - * @param {String=} _origAdd private; for handling non-existent paths to be watched - * @param {Boolean=} _internal private; indicates a non-user add - * @returns {FSWatcher} for chaining - */ -add(paths_, _origAdd, _internal) { - const {cwd, disableGlobbing} = this.options; - this.closed = false; - let paths = unifyPaths(paths_); - if (cwd) { - paths = paths.map((path) => { - const absPath = getAbsolutePath(path, cwd); - - // Check `path` instead of `absPath` because the cwd portion can't be a glob - if (disableGlobbing || !isGlob(path)) { - return absPath; - } - return normalizePath(absPath); - }); + if (this.paused) { + this._emitQueue.push([index, e]); + return } - // set aside negated glob strings - paths = paths.filter((path) => { - if (path.startsWith(BANG)) { - this._ignoredPaths.add(path.slice(1)); - return false; - } + var abs = isAbsolute(e) ? e : this._makeAbs(e); - // if a path is being added that was previously ignored, stop ignoring it - this._ignoredPaths.delete(path); - this._ignoredPaths.delete(path + SLASH_GLOBSTAR); + if (this.mark) + e = this._mark(e); - // reset the cached userIgnored anymatch fn - // to make ignoredPaths changes effective - this._userIgnored = undefined; + if (this.absolute) + e = abs; - return true; - }); + if (this.matches[index][e]) + return - if (this.options.useFsEvents && this._fsEventsHandler) { - if (!this._readyCount) this._readyCount = paths.length; - if (this.options.persistent) this._readyCount *= 2; - paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path)); - } else { - if (!this._readyCount) this._readyCount = 0; - this._readyCount += paths.length; - Promise.all( - paths.map(async path => { - const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd); - if (res) this._emitReady(); - return res; - }) - ).then(results => { - if (this.closed) return; - results.filter(item => item).forEach(item => { - this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); - }); - }); + if (this.nodir) { + var c = this.cache[abs]; + if (c === 'DIR' || Array.isArray(c)) + return } - return this; -} - -/** - * Close watchers or start ignoring events from specified paths. - * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs - * @returns {FSWatcher} for chaining -*/ -unwatch(paths_) { - if (this.closed) return this; - const paths = unifyPaths(paths_); - const {cwd} = this.options; + this.matches[index][e] = true; - paths.forEach((path) => { - // convert to absolute path unless relative path already matches - if (!sysPath.isAbsolute(path) && !this._closers.has(path)) { - if (cwd) path = sysPath.join(cwd, path); - path = sysPath.resolve(path); - } + var st = this.statCache[abs]; + if (st) + this.emit('stat', e, st); - this._closePath(path); + this.emit('match', e); +}; - this._ignoredPaths.add(path); - if (this._watched.has(path)) { - this._ignoredPaths.add(path + SLASH_GLOBSTAR); - } +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return - // reset the cached userIgnored anymatch fn - // to make ignoredPaths changes effective - this._userIgnored = undefined; - }); + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) - return this; -} + var lstatkey = 'lstat\0' + abs; + var self = this; + var lstatcb = inflight(lstatkey, lstatcb_); -/** - * Close watchers and remove all listeners from watched paths. - * @returns {Promise}. -*/ -close() { - if (this.closed) return this._closePromise; - this.closed = true; + if (lstatcb) + fs.lstat(abs, lstatcb); - // Memory management. - this.removeAllListeners(); - const closers = []; - this._closers.forEach(closerList => closerList.forEach(closer => { - const promise = closer(); - if (promise instanceof Promise) closers.push(promise); - })); - this._streams.forEach(stream => stream.destroy()); - this._userIgnored = undefined; - this._readyCount = 0; - this._readyEmitted = false; - this._watched.forEach(dirent => dirent.dispose()); - ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => { - this[`_${key}`].clear(); - }); + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() - this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve(); - return this._closePromise; -} + var isSym = lstat && lstat.isSymbolicLink(); + self.symlinks[abs] = isSym; -/** - * Expose list of watched paths - * @returns {Object} for chaining -*/ -getWatched() { - const watchList = {}; - this._watched.forEach((entry, dir) => { - const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; - watchList[key || ONE_DOT] = entry.getChildren().sort(); - }); - return watchList; -} + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE'; + cb(); + } else + self._readdir(abs, false, cb); + } +}; -emitWithAll(event, args) { - this.emit(...args); - if (event !== EV_ERROR) this.emit(EV_ALL, ...args); -} +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return -// Common helpers -// -------------- + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb); + if (!cb) + return -/** - * Normalize and emit events. - * Calling _emit DOES NOT MEAN emit() would be called! - * @param {EventName} event Type of event - * @param {Path} path File or directory path - * @param {*=} val1 arguments to be passed with event - * @param {*=} val2 - * @param {*=} val3 - * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag - */ -async _emit(event, path, val1, val2, val3) { - if (this.closed) return; + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) - const opts = this.options; - if (isWindows) path = sysPath.normalize(path); - if (opts.cwd) path = sysPath.relative(opts.cwd, path); - /** @type Array */ - const args = [event, path]; - if (val3 !== undefined) args.push(val1, val2, val3); - else if (val2 !== undefined) args.push(val1, val2); - else if (val1 !== undefined) args.push(val1); + if (ownProp(this.cache, abs)) { + var c = this.cache[abs]; + if (!c || c === 'FILE') + return cb() - const awf = opts.awaitWriteFinish; - let pw; - if (awf && (pw = this._pendingWrites.get(path))) { - pw.lastChange = new Date(); - return this; + if (Array.isArray(c)) + return cb(null, c) } + fs.readdir(abs, readdirCb(this, abs, cb)); +}; - if (opts.atomic) { - if (event === EV_UNLINK) { - this._pendingUnlinks.set(path, args); - setTimeout(() => { - this._pendingUnlinks.forEach((entry, path) => { - this.emit(...entry); - this.emit(EV_ALL, ...entry); - this._pendingUnlinks.delete(path); - }); - }, typeof opts.atomic === 'number' ? opts.atomic : 100); - return this; - } - if (event === EV_ADD && this._pendingUnlinks.has(path)) { - event = args[0] = EV_CHANGE; - this._pendingUnlinks.delete(path); - } +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb); + else + self._readdirEntries(abs, entries, cb); } +} - if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { - const awfEmit = (err, stats) => { - if (err) { - event = args[0] = EV_ERROR; - args[1] = err; - this.emitWithAll(event, args); - } else if (stats) { - // if stats doesn't exist the file must have been deleted - if (args.length > 2) { - args[2] = stats; - } else { - args.push(stats); - } - this.emitWithAll(event, args); - } - }; +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return - this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit); - return this; + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i]; + if (abs === '/') + e = abs + e; + else + e = abs + '/' + e; + this.cache[e] = true; + } } - if (event === EV_CHANGE) { - const isThrottled = !this._throttle(EV_CHANGE, path, 50); - if (isThrottled) return this; - } + this.cache[abs] = entries; + return cb(null, entries) +}; - if (opts.alwaysStat && val1 === undefined && - (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE) - ) { - const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path; - let stats; - try { - stats = await stat(fullPath); - } catch (err) {} - // Suppress event when fs_stat fails, to avoid sending undefined 'stat' - if (!stats || this.closed) return; - args.push(stats); - } - this.emitWithAll(event, args); +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return - return this; -} + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f); + this.cache[abs] = 'FILE'; + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd); + error.path = this.cwd; + error.code = er.code; + this.emit('error', error); + this.abort(); + } + break -/** - * Common handler for errors - * @param {Error} error - * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag - */ -_handleError(error) { - const code = error && error.code; - if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && - (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) - ) { - this.emit(EV_ERROR, error); - } - return error || this.closed; -} + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false; + break -/** - * Helper utility for throttling - * @param {ThrottleType} actionType type being throttled - * @param {Path} path being acted upon - * @param {Number} timeout duration of time to suppress duplicate actions - * @returns {Object|false} tracking object or false if action should be suppressed - */ -_throttle(actionType, path, timeout) { - if (!this._throttled.has(actionType)) { - this._throttled.set(actionType, new Map()); + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false; + if (this.strict) { + this.emit('error', er); + // If the error is handled, then we abort + // if not, we threw out of here + this.abort(); + } + if (!this.silent) + console.error('glob error', er); + break } - /** @type {Map} */ - const action = this._throttled.get(actionType); - /** @type {Object} */ - const actionPath = action.get(path); + return cb() +}; - if (actionPath) { - actionPath.count++; - return false; - } +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this; + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb); + }); +}; - let timeoutObject; - const clear = () => { - const item = action.get(path); - const count = item ? item.count : 0; - action.delete(path); - clearTimeout(timeoutObject); - if (item) clearTimeout(item.timeoutObject); - return count; - }; - timeoutObject = setTimeout(clear, timeout); - const thr = {timeoutObject, clear, count: 0}; - action.set(path, thr); - return thr; -} -_incrReadyCount() { - return this._readyCount++; -} +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) -/** - * Awaits write operation to finish. - * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. - * @param {Path} path being acted upon - * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished - * @param {EventName} event - * @param {Function} awfEmit Callback to be called when ready for event to be emitted. - */ -_awaitWriteFinish(path, threshold, event, awfEmit) { - let timeoutHandler; + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() - let fullPath = path; - if (this.options.cwd && !sysPath.isAbsolute(path)) { - fullPath = sysPath.join(this.options.cwd, path); - } + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1); + var gspref = prefix ? [ prefix ] : []; + var noGlobStar = gspref.concat(remainWithoutGlobStar); - const now = new Date(); + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb); - const awaitWriteFinish = (prevStat) => { - fs.stat(fullPath, (err, curStat) => { - if (err || !this._pendingWrites.has(path)) { - if (err && err.code !== 'ENOENT') awfEmit(err); - return; - } + var isSym = this.symlinks[abs]; + var len = entries.length; - const now = Number(new Date()); + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() - if (prevStat && curStat.size !== prevStat.size) { - this._pendingWrites.get(path).lastChange = now; - } - const pw = this._pendingWrites.get(path); - const df = now - pw.lastChange; + for (var i = 0; i < len; i++) { + var e = entries[i]; + if (e.charAt(0) === '.' && !this.dot) + continue - if (df >= threshold) { - this._pendingWrites.delete(path); - awfEmit(undefined, curStat); - } else { - timeoutHandler = setTimeout( - awaitWriteFinish, - this.options.awaitWriteFinish.pollInterval, - curStat - ); - } - }); - }; + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar); + this._process(instead, index, true, cb); - if (!this._pendingWrites.has(path)) { - this._pendingWrites.set(path, { - lastChange: now, - cancelWait: () => { - this._pendingWrites.delete(path); - clearTimeout(timeoutHandler); - return event; - } - }); - timeoutHandler = setTimeout( - awaitWriteFinish, - this.options.awaitWriteFinish.pollInterval - ); + var below = gspref.concat(entries[i], remain); + this._process(below, index, true, cb); } -} -_getGlobIgnored() { - return [...this._ignoredPaths.values()]; -} + cb(); +}; -/** - * Determines whether user has asked to ignore this path. - * @param {Path} path filepath or dir - * @param {fs.Stats=} stats result of fs.stat - * @returns {Boolean} - */ -_isIgnored(path, stats) { - if (this.options.atomic && DOT_RE.test(path)) return true; - if (!this._userIgnored) { - const {cwd} = this.options; - const ign = this.options.ignored; +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this; + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb); + }); +}; +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - const ignored = ign && ign.map(normalizeIgnored(cwd)); - const paths = arrify(ignored) - .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) - .map((path) => path + SLASH_GLOBSTAR); - const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); - this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null); + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix); + if (prefix.charAt(0) === '/') { + prefix = path$1.join(this.root, prefix); + } else { + prefix = path$1.resolve(this.root, prefix); + if (trail) + prefix += '/'; + } } - return this._userIgnored([path, stats]); -} + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/'); -_isntIgnored(path, stat) { - return !this._isIgnored(path, stat); -} + // Mark this as a match + this._emitMatch(index, prefix); + cb(); +}; -/** - * Provides a set of common helpers and properties relating to symlink and glob handling. - * @param {Path} path file, directory, or glob pattern being watched - * @param {Number=} depth at any depth > 0, this isn't a glob - * @returns {WatchHelper} object containing helpers for this path - */ -_getWatchHelpers(path, depth) { - const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path); - const follow = this.options.followSymlinks; +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f); + var needDir = f.slice(-1) === '/'; - return new WatchHelper(path, watchPath, follow, this); -} + if (f.length > this.maxLength) + return cb() -// Directory helpers -// ----------------- + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs]; -/** - * Provides directory tracking objects - * @param {String} directory path of the directory - * @returns {DirEntry} the directory's tracking object - */ -_getWatchedDir(directory) { - if (!this._boundRemove) this._boundRemove = this._remove.bind(this); - const dir = sysPath.resolve(directory); - if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); - return this._watched.get(dir); -} + if (Array.isArray(c)) + c = 'DIR'; -// File helpers -// ------------ + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) -/** - * Check for read permissions. - * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 - * @param {fs.Stats} stats - object, result of fs_stat - * @returns {Boolean} indicates whether the file can be read -*/ -_hasReadPermissions(stats) { - if (this.options.ignorePermissionErrors) return true; + if (needDir && c === 'FILE') + return cb() - // stats.mode may be bigint - const md = stats && Number.parseInt(stats.mode, 10); - const st = md & 0o777; - const it = Number.parseInt(st.toString(8)[0], 10); - return Boolean(4 & it); -} + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + var stat = this.statCache[abs]; + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE'; + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } -/** - * Handles emitting unlink events for - * files and directories, and via recursion, for - * files and directories within directories that are unlinked - * @param {String} directory within which the following item is located - * @param {String} item base path of item/directory - * @returns {void} -*/ -_remove(directory, item, isDirectory) { - // if what is being deleted is a directory, get that directory's paths - // for recursive deleting and cleaning of watched object - // if it is not a directory, nestedDirectoryChildren will be empty array - const path = sysPath.join(directory, item); - const fullPath = sysPath.resolve(path); - isDirectory = isDirectory != null - ? isDirectory - : this._watched.has(path) || this._watched.has(fullPath); + var self = this; + var statcb = inflight('stat\0' + abs, lstatcb_); + if (statcb) + fs.lstat(abs, statcb); - // prevent duplicate handling in case of arriving here nearly simultaneously - // via multiple paths (such as _handleFile and _handleDir) - if (!this._throttle('remove', path, 100)) return; + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb); + else + self._stat2(f, abs, er, stat, cb); + }) + } else { + self._stat2(f, abs, er, lstat, cb); + } + } +}; - // if the only watched file is removed, watch for its return - if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) { - this.add(directory, item, true); +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false; + return cb() } - // This will create a new entry in the watched object in either case - // so we got to do the directory check beforehand - const wp = this._getWatchedDir(path); - const nestedDirectoryChildren = wp.getChildren(); + var needDir = f.slice(-1) === '/'; + this.statCache[abs] = stat; - // Recursively remove children directories / files. - nestedDirectoryChildren.forEach(nested => this._remove(path, nested)); + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) - // Check if item was on the watched list and remove it - const parent = this._getWatchedDir(directory); - const wasTracked = parent.has(item); - parent.remove(item); + var c = true; + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE'; + this.cache[abs] = this.cache[abs] || c; - // Fixes issue #1042 -> Relative paths were detected and added as symlinks - // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612), - // but never removed from the map in case the path was deleted. - // This leads to an incorrect state if the path was recreated: - // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553 - if (this._symlinkPaths.has(fullPath)) { - this._symlinkPaths.delete(fullPath); + if (needDir && c === 'FILE') + return cb() + + return cb(null, c, stat) +}; + +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +var isBuffer = function isBuffer (obj) { + return obj != null && obj.constructor != null && + typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +}; + +const proc$1 = process; + +var own$b = {}.hasOwnProperty; + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point + */ + +/** + * Stringify one point, a position (start and end points), or a node’s + * positional information. + * + * @param {Node|Position|Point} [value] + * @returns {string} + */ +function stringifyPosition$1(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' } - // If we wait for this file to be fully written, cancel the wait. - let relPath = path; - if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path); - if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { - const event = this._pendingWrites.get(relPath).cancelWait(); - if (event === EV_ADD) return; + // Node. + if (own$b.call(value, 'position') || own$b.call(value, 'type')) { + // @ts-ignore looks like a node. + return position(value.position) } - // The Entry will either be a directory that just got removed - // or a bogus entry to a file, in either case we have to remove it - this._watched.delete(path); - this._watched.delete(fullPath); - const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK; - if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); + // Position. + if (own$b.call(value, 'start') || own$b.call(value, 'end')) { + // @ts-ignore looks like a position. + return position(value) + } - // Avoid conflicts if we later create another file with the same name - if (!this.options.useFsEvents) { - this._closePath(path); + // Point. + if (own$b.call(value, 'line') || own$b.call(value, 'column')) { + // @ts-ignore looks like a point. + return point$1(value) } + + // ? + return '' } /** - * Closes all watchers for a path - * @param {Path} path + * @param {Point} point + * @returns {string} */ -_closePath(path) { - this._closeFile(path); - const dir = sysPath.dirname(path); - this._getWatchedDir(dir).remove(sysPath.basename(path)); +function point$1(point) { + return index$1(point && point.line) + ':' + index$1(point && point.column) } /** - * Closes only file-specific watchers - * @param {Path} path + * @param {Position} pos + * @returns {string} */ -_closeFile(path) { - const closers = this._closers.get(path); - if (!closers) return; - closers.forEach(closer => closer()); - this._closers.delete(path); +function position(pos) { + return point$1(pos && pos.start) + '-' + point$1(pos && pos.end) } /** - * - * @param {Path} path - * @param {Function} closer + * @param {number} value + * @returns {number} */ -_addPathCloser(path, closer) { - if (!closer) return; - let list = this._closers.get(path); - if (!list) { - list = []; - this._closers.set(path, list); - } - list.push(closer); -} - -_readdirp(root, opts) { - if (this.closed) return; - const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; - let stream = readdirp(root, options); - this._streams.add(stream); - stream.once(STR_CLOSE, () => { - stream = undefined; - }); - stream.once(STR_END, () => { - if (stream) { - this._streams.delete(stream); - stream = undefined; - } - }); - return stream; -} - +function index$1(value) { + return value && typeof value === 'number' ? value : 1 } -// Export FSWatcher class -chokidar$1.FSWatcher = FSWatcher; - /** - * Instantiates watcher with paths to be tracked. - * @param {String|Array} paths file/directory paths and/or globs - * @param {Object=} options chokidar opts - * @returns an instance of FSWatcher for chaining. + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point */ -const watch = (paths, options) => { - const watcher = new FSWatcher(options); - watcher.add(paths); - return watcher; -}; -chokidar$1.watch = watch; - -var textTable = function (rows_, opts) { - if (!opts) opts = {}; - var hsep = opts.hsep === undefined ? ' ' : opts.hsep; - var align = opts.align || []; - var stringLength = opts.stringLength - || function (s) { return String(s).length; } - ; - - var dotsizes = reduce(rows_, function (acc, row) { - forEach(row, function (c, ix) { - var n = dotindex(c); - if (!acc[ix] || n > acc[ix]) acc[ix] = n; - }); - return acc; - }, []); - - var rows = map$6(rows_, function (row) { - return map$6(row, function (c_, ix) { - var c = String(c_); - if (align[ix] === '.') { - var index = dotindex(c); - var size = dotsizes[ix] + (/\./.test(c) ? 1 : 2) - - (stringLength(c) - index) - ; - return c + Array(size).join(' '); - } - else return c; - }); - }); - - var sizes = reduce(rows, function (acc, row) { - forEach(row, function (c, ix) { - var n = stringLength(c); - if (!acc[ix] || n > acc[ix]) acc[ix] = n; - }); - return acc; - }, []); - - return map$6(rows, function (row) { - return map$6(row, function (c, ix) { - var n = (sizes[ix] - stringLength(c)) || 0; - var s = Array(Math.max(n + 1, 1)).join(' '); - if (align[ix] === 'r' || align[ix] === '.') { - return s + c; - } - if (align[ix] === 'c') { - return Array(Math.ceil(n / 2 + 1)).join(' ') - + c + Array(Math.floor(n / 2 + 1)).join(' ') - ; - } - - return c + s; - }).join(hsep).replace(/\s+$/, ''); - }).join('\n'); -}; +class VFileMessage extends Error { + /** + * Constructor of a message for `reason` at `place` from `origin`. + * When an error is passed in as `reason`, copies the `stack`. + * + * @param {string|Error} reason Reason for message (`string` or `Error`). Uses the stack and message of the error if given. + * @param {Node|Position|Point} [place] Place at which the message occurred in a file (`Node`, `Position`, or `Point`, optional). + * @param {string} [origin] Place in code the message originates from (`string`, optional). + */ + constructor(reason, place, origin) { + /** @type {[string?, string?]} */ + var parts = [null, null]; + /** @type {Position} */ + var position = { + start: {line: null, column: null}, + end: {line: null, column: null} + }; + /** @type {number} */ + var index; -function dotindex (c) { - var m = /\.[^.]*$/.exec(c); - return m ? m.index + 1 : c.length; -} + super(); -function reduce (xs, f, init) { - if (xs.reduce) return xs.reduce(f, init); - var i = 0; - var acc = arguments.length >= 3 ? init : xs[i++]; - for (; i < xs.length; i++) { - f(acc, xs[i], i); + if (typeof place === 'string') { + origin = place; + place = null; } - return acc; -} -function forEach (xs, f) { - if (xs.forEach) return xs.forEach(f); - for (var i = 0; i < xs.length; i++) { - f.call(xs, xs[i], i); + if (typeof origin === 'string') { + index = origin.indexOf(':'); + + if (index === -1) { + parts[1] = origin; + } else { + parts[0] = origin.slice(0, index); + parts[1] = origin.slice(index + 1); + } } -} -function map$6 (xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f.call(xs, xs[i], i)); + if (place) { + // Node. + if ('type' in place || 'position' in place) { + if (place.position) { + position = place.position; + } + } + // Position. + else if ('start' in place || 'end' in place) { + // @ts-ignore Looks like a position. + position = place; + } + // Point. + else if ('line' in place || 'column' in place) { + // @ts-ignore Looks like a point. + position.start = place; + } } - return res; -} -var camelcase$1 = {exports: {}}; + // Fields from `Error` + this.name = stringifyPosition$1(place) || '1:1'; + this.message = typeof reason === 'object' ? reason.message : reason; + this.stack = typeof reason === 'object' ? reason.stack : ''; -const preserveCamelCase = string => { - let isLastCharLower = false; - let isLastCharUpper = false; - let isLastLastCharUpper = false; + /** + * Reason for message. + * @type {string} + */ + this.reason = this.message; + /** + * Starting line of error. + * @type {number?} + */ + this.line = position.start.line; + /** + * Starting column of error. + * @type {number?} + */ + this.column = position.start.column; + /** + * Namespace of warning. + * @type {string?} + */ + this.source = parts[0]; + /** + * Category of message. + * @type {string?} + */ + this.ruleId = parts[1]; + /** + * Full range information, when available. + * Has start and end properties, both set to an object with line and column, set to number?. + * @type {Position?} + */ + this.position = position; - for (let i = 0; i < string.length; i++) { - const character = string[i]; + // The following fields are “well known”. + // Not standard. + // Feel free to add other non-standard fields to your messages. - if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) { - string = string.slice(0, i) + '-' + string.slice(i); - isLastCharLower = false; - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = true; - i++; - } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) { - string = string.slice(0, i - 1) + '-' + string.slice(i - 1); - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = false; - isLastCharLower = true; - } else { - isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character; - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character; - } - } + /* eslint-disable no-unused-expressions */ + /** + * You may add a file property with a path of a file (used throughout the VFile ecosystem). + * @type {string?} + */ + this.file; + /** + * If true, marks associated file as no longer processable. + * @type {boolean?} + */ + this.fatal; + /** + * You may add a url property with a link to documentation for the message. + * @type {string?} + */ + this.url; + /** + * You may add a note property with a long form description of the message (supported by vfile-reporter). + * @type {string?} + */ + this.note; + /* eslint-enable no-unused-expressions */ + } +} - return string; -}; +VFileMessage.prototype.file = ''; +VFileMessage.prototype.name = ''; +VFileMessage.prototype.reason = ''; +VFileMessage.prototype.message = ''; +VFileMessage.prototype.stack = ''; +VFileMessage.prototype.fatal = null; +VFileMessage.prototype.column = null; +VFileMessage.prototype.line = null; +VFileMessage.prototype.source = null; +VFileMessage.prototype.ruleId = null; +VFileMessage.prototype.position = null; -const camelCase = (input, options) => { - if (!(typeof input === 'string' || Array.isArray(input))) { - throw new TypeError('Expected the input to be `string | string[]`'); - } +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point + * + * @typedef {'ascii'|'utf8'|'utf-8'|'utf16le'|'ucs2'|'ucs-2'|'base64'|'latin1'|'binary'|'hex'} BufferEncoding + * Encodings supported by the buffer class. + * This is a copy of the typing from Node, copied to prevent Node globals from + * being needed. + * Copied from: + * + * @typedef {string|Uint8Array} VFileValue Contents of the file. + * Can either be text, or a Buffer like structure. + * This does not directly use type `Buffer`, because it can also be used in a + * browser context. + * Instead this leverages `Uint8Array` which is the base type for `Buffer`, + * and a native JavaScript construct. + * + * @typedef {VFileValue|VFileOptions|VFile} VFileCompatible Things that can be + * passed to the constructor. + * + * @typedef VFileCoreOptions + * @property {VFileValue} [value] + * @property {string} [cwd] + * @property {Array.} [history] + * @property {string} [path] + * @property {string} [basename] + * @property {string} [stem] + * @property {string} [extname] + * @property {string} [dirname] + * @property {Object.} [data] + * + * @typedef {{[key: string]: unknown} & VFileCoreOptions} VFileOptions + * Configuration: a bunch of keys that will be shallow copied over to the new + * file. + * + * @typedef {Object.} VFileReporterSettings + * @typedef {(files: VFile[], options: T) => string} VFileReporter + */ - options = Object.assign({ - pascalCase: false - }, options); +// Order of setting (least specific to most), we need this because otherwise +// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a +// stem can be set. +var order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; - const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; +class VFile { + /** + * Create a new virtual file. + * + * If `options` is `string` or `Buffer`, treats it as `{value: options}`. + * If `options` is a `VFile`, shallow copies its data over to the new file. + * All other given fields are set on the newly created `VFile`. + * + * Path related properties are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * It’s not possible to set either `dirname` or `extname` without setting + * either `history`, `path`, `basename`, or `stem` as well. + * + * @param {VFileCompatible} [value] + */ + constructor(value) { + var index = -1; + /** @type {VFileOptions} */ + var options; + /** @type {string} */ + var prop; - if (Array.isArray(input)) { - input = input.map(x => x.trim()) - .filter(x => x.length) - .join('-'); - } else { - input = input.trim(); - } + if (!value) { + options = {}; + } else if (typeof value === 'string' || isBuffer(value)) { + // @ts-ignore Looks like a buffer. + options = {value}; + } else { + // @ts-ignore Looks like file or options. + options = value; + } - if (input.length === 0) { - return ''; - } + /** + * Place to store custom information. + * It’s OK to store custom data directly on the file, moving it to `data` + * gives a little more privacy. + * @type {Object.} + */ + this.data = {}; - if (input.length === 1) { - return options.pascalCase ? input.toUpperCase() : input.toLowerCase(); - } + /** + * List of messages associated with the file. + * @type {Array.} + */ + this.messages = []; - const hasUpperCase = input !== input.toLowerCase(); + /** + * List of file paths the file moved between. + * @type {Array.} + */ + this.history = []; - if (hasUpperCase) { - input = preserveCamelCase(input); - } + /** + * Base of `path`. + * Defaults to `process.cwd()` (`/` in browsers). + * @type {string} + */ + this.cwd = proc$1.cwd(); - input = input - .replace(/^[_.\- ]+/, '') - .toLowerCase() - .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()) - .replace(/\d+(\w|$)/g, m => m.toUpperCase()); + /* eslint-disable no-unused-expressions */ + /** + * Raw value. + * @type {VFileValue} + */ + this.value; - return postProcess(input); -}; + // The below are non-standard, they are “well-known”. + // As in, used in several tools. -camelcase$1.exports = camelCase; -// TODO: Remove this for the next major release -camelcase$1.exports.default = camelCase; + /** + * Whether a file was saved to disk. + * This is used by vfile reporters. + * @type {boolean} + */ + this.stored; -var minimist$1 = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; + /** + * Sometimes files have a non-string representation. + * This can be stored in the `result` field. + * One example is when turning markdown into React nodes. + * This is used by unified to store non-string results. + * @type {unknown} + */ + this.result; + /* eslint-enable no-unused-expressions */ - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; + // Set path related properties in the correct order. + while (++index < order.length) { + prop = order[index]; + + // Note: we specifically use `in` instead of `hasOwnProperty` to accept + // `vfile`s too. + if (prop in options && options[prop] !== undefined) { + this[prop] = prop === 'history' ? options[prop].concat() : options[prop]; + } } - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); + // Set non-path related properties. + for (prop in options) { + if (!order.includes(prop)) { + this[prop] = options[prop]; + } } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); + } - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); + /** + * Access full path (`~/index.min.js`). + */ + get path() { + return this.history[this.history.length - 1] + } - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; + /** + * Set full path (`~/index.min.js`). + * Cannot be nullified. + */ + set path(path) { + assertNonEmpty(path, 'path'); - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); + if (this.path !== path) { + this.history.push(path); } + } - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } + /** + * Access parent path (`~`). + */ + get dirname() { + return typeof this.path === 'string' ? path$b.dirname(this.path) : undefined + } - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } + /** + * Set parent path (`~`). + * Cannot be set if there's no `path` yet. + */ + set dirname(dirname) { + assertPath(this.path, 'dirname'); + this.path = path$b.join(dirname || '', this.basename); + } - function setKey (obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length-1; i++) { - var key = keys[i]; - if (key === '__proto__') return; - if (o[key] === undefined) o[key] = {}; - if (o[key] === Object.prototype || o[key] === Number.prototype - || o[key] === String.prototype) o[key] = {}; - if (o[key] === Array.prototype) o[key] = []; - o = o[key]; - } + /** + * Access basename (including extname) (`index.min.js`). + */ + get basename() { + return typeof this.path === 'string' ? path$b.basename(this.path) : undefined + } - var key = keys[keys.length - 1]; - if (key === '__proto__') return; - if (o === Object.prototype || o === Number.prototype - || o === String.prototype) o = {}; - if (o === Array.prototype) o = []; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } + /** + * Set basename (`index.min.js`). + * Cannot contain path separators. + * Cannot be nullified either (use `file.path = file.dirname` instead). + */ + set basename(basename) { + assertNonEmpty(basename, 'basename'); + assertPart(basename, 'basename'); + this.path = path$b.join(this.dirname || '', basename); + } - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg); - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } + /** + * Access extname (including dot) (`.js`). + */ + get extname() { + return typeof this.path === 'string' ? path$b.extname(this.path) : undefined + } - return argv; -}; + /** + * Set extname (including dot) (`.js`). + * Cannot be set if there's no `path` yet and cannot contain path separators. + */ + set extname(extname) { + assertPart(extname, 'extname'); + assertPath(this.path, 'extname'); -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); + if (extname) { + if (extname.charCodeAt(0) !== 46 /* `.` */) { + throw new Error('`extname` must start with `.`') + } - var key = keys[keys.length - 1]; - return key in o; -} + if (extname.includes('.', 1)) { + throw new Error('`extname` cannot contain multiple dots') + } + } -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} + this.path = path$b.join(this.dirname, this.stem + (extname || '')); + } -// This is a generated file. Do not edit. -var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; -var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; -var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; + /** + * Access stem (w/o extname) (`index.min`). + */ + get stem() { + return typeof this.path === 'string' + ? path$b.basename(this.path, this.extname) + : undefined + } -var unicode = { - Space_Separator: Space_Separator, - ID_Start: ID_Start, - ID_Continue: ID_Continue -}; + /** + * Set stem (w/o extname) (`index.min`). + * Cannot be nullified, and cannot contain path separators. + */ + set stem(stem) { + assertNonEmpty(stem, 'stem'); + assertPart(stem, 'stem'); + this.path = path$b.join(this.dirname || '', stem + (this.extname || '')); + } -var util = { - isSpaceSeparator (c) { - return typeof c === 'string' && unicode.Space_Separator.test(c) - }, + /** + * Serialize the file. + * + * @param {BufferEncoding} [encoding='utf8'] If `file.value` is a buffer, `encoding` is used to serialize buffers. + * @returns {string} + */ + toString(encoding) { + // @ts-ignore string’s don’t accept the parameter, but buffers do. + return (this.value || '').toString(encoding) + } - isIdStartChar (c) { - return typeof c === 'string' && ( - (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c === '$') || (c === '_') || - unicode.ID_Start.test(c) - ) - }, + /** + * Create a message and associates it w/ the file. + * + * @param {string|Error} reason Reason for message (`string` or `Error`). Uses the stack and message of the error if given. + * @param {Node|Position|Point} [place] Place at which the message occurred in a file (`Node`, `Position`, or `Point`, optional). + * @param {string} [origin] Place in code the message originates from (`string`, optional). + * @returns {VFileMessage} + */ + message(reason, place, origin) { + var message = new VFileMessage(reason, place, origin); - isIdContinueChar (c) { - return typeof c === 'string' && ( - (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - (c === '$') || (c === '_') || - (c === '\u200C') || (c === '\u200D') || - unicode.ID_Continue.test(c) - ) - }, + if (this.path) { + message.name = this.path + ':' + message.name; + message.file = this.path; + } - isDigit (c) { - return typeof c === 'string' && /[0-9]/.test(c) - }, + message.fatal = false; - isHexDigit (c) { - return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) - }, -}; + this.messages.push(message); -let source; -let parseState; -let stack; -let pos; -let line; -let column; -let token; -let key; -let root$1; + return message + } -var parse$4 = function parse (text, reviver) { - source = String(text); - parseState = 'start'; - stack = []; - pos = 0; - line = 1; - column = 0; - token = undefined; - key = undefined; - root$1 = undefined; + /** + * Info: create a message, associate it with the file, and mark the fatality + * as `null`. + * Calls `message()` internally. + * + * @param {string|Error} reason Reason for message (`string` or `Error`). Uses the stack and message of the error if given. + * @param {Node|Position|Point} [place] Place at which the message occurred in a file (`Node`, `Position`, or `Point`, optional). + * @param {string} [origin] Place in code the message originates from (`string`, optional). + * @returns {VFileMessage} + */ + info(reason, place, origin) { + var message = this.message(reason, place, origin); - do { - token = lex(); + message.fatal = null; - // This code is unreachable. - // if (!parseStates[parseState]) { - // throw invalidParseState() - // } + return message + } - parseStates[parseState](); - } while (token.type !== 'eof') + /** + * Fail: create a message, associate it with the file, mark the fatality as + * `true`. + * Note: fatal errors mean a file is no longer processable. + * Calls `message()` internally. + * + * @param {string|Error} reason Reason for message (`string` or `Error`). Uses the stack and message of the error if given. + * @param {Node|Position|Point} [place] Place at which the message occurred in a file (`Node`, `Position`, or `Point`, optional). + * @param {string} [origin] Place in code the message originates from (`string`, optional). + * @returns {never} + */ + fail(reason, place, origin) { + var message = this.message(reason, place, origin); - if (typeof reviver === 'function') { - return internalize({'': root$1}, '', reviver) - } + message.fatal = true; - return root$1 -}; + throw message + } +} -function internalize (holder, name, reviver) { - const value = holder[name]; - if (value != null && typeof value === 'object') { - for (const key in value) { - const replacement = internalize(value, key, reviver); - if (replacement === undefined) { - delete value[key]; - } else { - value[key] = replacement; - } - } - } +/** + * Assert that `part` is not a path (as in, does not contain `path.sep`). + * + * @param {string} part + * @param {string} name + * @returns {void} + */ +function assertPart(part, name) { + if (part && part.includes(path$b.sep)) { + throw new Error( + '`' + name + '` cannot be a path: did not expect `' + path$b.sep + '`' + ) + } +} - return reviver.call(holder, name, value) +/** + * Assert that `part` is not empty. + * + * @param {string} part + * @param {string} name + * @returns {void} + */ +function assertNonEmpty(part, name) { + if (!part) { + throw new Error('`' + name + '` cannot be empty') + } } -let lexState; -let buffer$2; -let doubleQuote; -let sign; -let c; +/** + * Assert `path` exists. + * + * @param {string} path + * @param {string} name + * @returns {void} + */ +function assertPath(path, name) { + if (!path) { + throw new Error('Setting `' + name + '` requires `path` to be set too') + } +} -function lex () { - lexState = 'default'; - buffer$2 = ''; - doubleQuote = false; - sign = 1; +/** + * @typedef {import('vfile').VFileValue} Value + * @typedef {import('vfile').VFileOptions} Options + * @typedef {import('vfile').BufferEncoding} BufferEncoding + * + * @typedef {number|string} Mode + * @typedef {BufferEncoding|{encoding?: null|BufferEncoding, flag?: string}} ReadOptions + * @typedef {BufferEncoding|{encoding?: null|BufferEncoding, mode: Mode?, flag?: string}} WriteOptions + * + * @typedef {string|Uint8Array} Path Path of the file. + * @typedef {Path|URL|Options|VFile} Compatible Things that can be + * passed to the function. + */ - for (;;) { - c = peek(); +/** + * Create a virtual file from a description. + * If `options` is a string or a buffer, it’s used as the path. + * If it’s a VFile itself, it’s returned instead. + * In all other cases, the options are passed through to `vfile()`. + * + * @param {Compatible} [options] + * @returns {VFile} + */ +function toVFile(options) { + if (typeof options === 'string' || isBuffer(options)) { + options = {path: String(options)}; + } else if (options instanceof URL$1) { + options = {path: fileURLToPath(options)}; + } - // This code is unreachable. - // if (!lexStates[lexState]) { - // throw invalidLexState(lexState) - // } + return looksLikeAVFile$1(options) ? options : new VFile(options) +} - const token = lexStates[lexState](); - if (token) { - return token - } - } +/** + * Create a virtual file and read it in, synchronously. + * + * @param {Compatible} description + * @param {ReadOptions} [options] + * @returns {VFile} + */ +function readSync(description, options) { + var file = toVFile(description); + file.value = require$$0$3.readFileSync(path$b.resolve(file.cwd, file.path), options); + return file } -function peek () { - if (source[pos]) { - return String.fromCodePoint(source.codePointAt(pos)) - } +/** + * Create a virtual file and write it in, synchronously. + * + * @param {Compatible} description + * @param {WriteOptions} [options] + * @returns {VFile} + */ +function writeSync(description, options) { + var file = toVFile(description); + require$$0$3.writeFileSync(path$b.resolve(file.cwd, file.path), file.value || '', options); + return file } -function read () { - const c = peek(); +const read$2 = + /** + * @type {{ + * (description: Compatible, options: ReadOptions, callback: Callback): void + * (description: Compatible, callback: Callback): void + * (description: Compatible, options?: ReadOptions): Promise + * }} + */ + ( + /** + * Create a virtual file and read it in, asynchronously. + * + * @param {Compatible} description + * @param {ReadOptions} [options] + * @param {Callback} [callback] + */ + function (description, options, callback) { + var file = toVFile(description); - if (c === '\n') { - line++; - column = 0; - } else if (c) { - column += c.length; - } else { - column++; - } + if (!callback && typeof options === 'function') { + callback = options; + options = null; + } - if (c) { - pos += c.length; - } + if (!callback) { + return new Promise(executor) + } - return c -} + executor(resolve, callback); -const lexStates = { - default () { - switch (c) { - case '\t': - case '\v': - case '\f': - case ' ': - case '\u00A0': - case '\uFEFF': - case '\n': - case '\r': - case '\u2028': - case '\u2029': - read(); - return + /** + * @param {VFile} result + */ + function resolve(result) { + callback(null, result); + } - case '/': - read(); - lexState = 'comment'; - return + /** + * @param {(x: VFile) => void} resolve + * @param {(x: Error, y?: VFile) => void} reject + */ + function executor(resolve, reject) { + /** @type {string} */ + var fp; - case undefined: - read(); - return newToken('eof') + try { + fp = path$b.resolve(file.cwd, file.path); + } catch (error) { + return reject(error) } - if (util.isSpaceSeparator(c)) { - read(); - return + require$$0$3.readFile(fp, options, done); + + /** + * @param {Error} error + * @param {Value} result + */ + function done(error, result) { + if (error) { + reject(error); + } else { + file.value = result; + resolve(file); + } } + } + } + ); - // This code is unreachable. - // if (!lexStates[parseState]) { - // throw invalidLexState(parseState) - // } +const write = + /** + * @type {{ + * (description: Compatible, options: WriteOptions, callback: Callback): void + * (description: Compatible, callback: Callback): void + * (description: Compatible, options?: WriteOptions): Promise + * }} + */ + ( + /** + * Create a virtual file and write it in, asynchronously. + * + * @param {Compatible} description + * @param {WriteOptions} [options] + * @param {Callback} [callback] + */ + function (description, options, callback) { + var file = toVFile(description); - return lexStates[parseState]() - }, + // Weird, right? Otherwise `fs` doesn’t accept it. + if (!callback && typeof options === 'function') { + callback = options; + options = undefined; + } - comment () { - switch (c) { - case '*': - read(); - lexState = 'multiLineComment'; - return + if (!callback) { + return new Promise(executor) + } - case '/': - read(); - lexState = 'singleLineComment'; - return - } + executor(resolve, callback); - throw invalidChar(read()) - }, + /** + * @param {VFile} result + */ + function resolve(result) { + callback(null, result); + } - multiLineComment () { - switch (c) { - case '*': - read(); - lexState = 'multiLineCommentAsterisk'; - return + /** + * @param {(x: VFile) => void} resolve + * @param {(x: Error, y?: VFile) => void} reject + */ + function executor(resolve, reject) { + /** @type {string} */ + var fp; - case undefined: - throw invalidChar(read()) + try { + fp = path$b.resolve(file.cwd, file.path); + } catch (error) { + return reject(error) } - read(); - }, - - multiLineCommentAsterisk () { - switch (c) { - case '*': - read(); - return - - case '/': - read(); - lexState = 'default'; - return + require$$0$3.writeFile(fp, file.value || '', options, done); - case undefined: - throw invalidChar(read()) + /** + * @param {Error} error + */ + function done(error) { + if (error) { + reject(error); + } else { + resolve(file); + } } + } + } + ); - read(); - lexState = 'multiLineComment'; - }, - - singleLineComment () { - switch (c) { - case '\n': - case '\r': - case '\u2028': - case '\u2029': - read(); - lexState = 'default'; - return +/** + * @param {Compatible} value + * @returns {value is VFile} + */ +function looksLikeAVFile$1(value) { + return ( + value && + typeof value === 'object' && + 'message' in value && + 'messages' in value + ) +} - case undefined: - read(); - return newToken('eof') - } +toVFile.readSync = readSync; +toVFile.writeSync = writeSync; +toVFile.read = read$2; +toVFile.write = write; - read(); - }, +/** + * @typedef {import('fs').Stats} Stats + * @typedef {import('vfile').VFile} VFile + * @typedef {import('./ignore.js').Ignore} Ignore + * @typedef {import('ignore').Ignore} GitIgnore + * + * @typedef Options + * @property {string} cwd + * @property {Array.} extensions + * @property {boolean|undefined} silentlyIgnore + * @property {Array.} ignorePatterns + * @property {Ignore} ignore + * + * @typedef SearchResults + * @property {fs.Stats|undefined} stats + * @property {boolean|undefined} ignored + * + * @typedef Result + * @property {Array.} input + * @property {VFile[]} output + * + * @typedef CleanResult + * @property {boolean} oneFileMode + * @property {VFile[]} files + * + * @callback Callback + * @param {Error|null} error + * @param {CleanResult} [result] + */ - value () { - switch (c) { - case '{': - case '[': - return newToken('punctuator', read()) +/** + * Search `patterns`, a mix of globs, paths, and files. + * + * @param {Array.} input + * @param {Options} options + * @param {Callback} callback + */ +function finder(input, options, callback) { + expand(input, options, (error, result) => { + // Glob errors are unusual. + // other errors are on the vfile results. + /* c8 ignore next 2 */ + if (error || !result) { + callback(error); + } else { + callback(null, {oneFileMode: oneFileMode(result), files: result.output}); + } + }); +} - case 'n': - read(); - literal('ull'); - return newToken('null', null) +/** + * Expand the given glob patterns, search given and found directories, and map + * to vfiles. + * + * @param {Array.} input + * @param {Options} options + * @param {(error: Error|null, result?: Result) => void} next + */ +function expand(input, options, next) { + /** @type {Array.} */ + let paths = []; + let actual = 0; + let expected = 0; + let index = -1; + /** @type {boolean|undefined} */ + let failed; - case 't': - read(); - literal('rue'); - return newToken('boolean', true) + while (++index < input.length) { + let file = input[index]; + if (typeof file === 'string') { + if (glob_1.hasMagic(file)) { + expected++; + glob_1(file, {cwd: options.cwd}, (error, files) => { + // Glob errors are unusual. + /* c8 ignore next 3 */ + if (failed) { + return + } - case 'f': - read(); - literal('alse'); - return newToken('boolean', false) + // Glob errors are unusual. + /* c8 ignore next 4 */ + if (error) { + failed = true; + done1(error); + } else { + actual++; + paths = paths.concat(files); - case '-': - case '+': - if (read() === '-') { - sign = -1; + if (actual === expected) { + search$1(paths, options, done1); } + } + }); + } else { + // `relative` to make the paths canonical. + file = + path$c.relative(options.cwd, path$c.resolve(options.cwd, file)) || '.'; + paths.push(file); + } + } else { + const fp = file.path ? path$c.relative(options.cwd, file.path) : options.cwd; + file.cwd = options.cwd; + file.path = fp; + file.history = [fp]; + paths.push(file); + } + } - lexState = 'sign'; - return + if (!expected) { + search$1(paths, options, done1); + } - case '.': - buffer$2 = read(); - lexState = 'decimalPointLeading'; - return + /** + * @param {Error|null} error + * @param {Array} [files] + */ + function done1(error, files) { + // `search` currently does not give errors. + /* c8 ignore next 2 */ + if (error || !files) { + next(error); + } else { + next(null, {input: paths, output: files}); + } + } +} - case '0': - buffer$2 = read(); - lexState = 'zero'; - return +/** + * Search `paths`. + * + * @param {Array.} input + * @param {Options & {nested?: boolean}} options + * @param {(error: Error|null, files: Array.) => void} next + */ +function search$1(input, options, next) { + const extraIgnore = ignore().add(options.ignorePatterns); + let expected = 0; + let actual = 0; + let index = -1; + /** @type {Array.} */ + let files = []; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - buffer$2 = read(); - lexState = 'decimalInteger'; - return + while (++index < input.length) { + each(input[index]); + } - case 'I': - read(); - literal('nfinity'); - return newToken('numeric', Infinity) + if (!expected) { + next(null, files); + } - case 'N': - read(); - literal('aN'); - return newToken('numeric', NaN) + /** + * @param {string|VFile} file + */ + function each(file) { + const ext = typeof file === 'string' ? path$c.extname(file) : file.extname; - case '"': - case "'": - doubleQuote = (read() === '"'); - buffer$2 = ''; - lexState = 'string'; - return - } + // Normalise globs. + if (typeof file === 'string') { + file = file.split('/').join(path$c.sep); + } - throw invalidChar(read()) - }, + const part = base$1(file); - identifierNameStartEscape () { - if (c !== 'u') { - throw invalidChar(read()) - } + if (options.nested && (part.charAt(0) === '.' || part === 'node_modules')) { + return + } - read(); - const u = unicodeEscape(); - switch (u) { - case '$': - case '_': - break + expected++; - default: - if (!util.isIdStartChar(u)) { - throw invalidIdentifier() + statAndIgnore( + file, + Object.assign({}, options, {extraIgnore}), + (error, result) => { + const ignored = result && result.ignored; + const dir = result && result.stats && result.stats.isDirectory(); + + if (ignored && (options.nested || options.silentlyIgnore)) { + return one(null, []) + } + + if (!ignored && dir) { + return fs$a.readdir( + path$c.resolve(options.cwd, filePath(file)), + (error, basenames) => { + // Should not happen often: the directory is `stat`ed first, which was ok, + // but reading it is not. + /* c8 ignore next 9 */ + if (error) { + const otherFile = toVFile(filePath(file)); + otherFile.cwd = options.cwd; + + try { + otherFile.fail('Cannot read directory'); + } catch {} + + one(null, [otherFile]); + } else { + search$1( + basenames.map((name) => path$c.join(filePath(file), name)), + Object.assign({}, options, {nested: true}), + one + ); + } } - - break + ) } - buffer$2 += u; - lexState = 'identifierName'; - }, + if ( + !dir && + options.nested && + options.extensions.length > 0 && + !options.extensions.includes(ext) + ) { + return one(null, []) + } - identifierName () { - switch (c) { - case '$': - case '_': - case '\u200C': - case '\u200D': - buffer$2 += read(); - return + file = toVFile(file); + file.cwd = options.cwd; - case '\\': - read(); - lexState = 'identifierNameEscape'; - return + if (ignored) { + try { + file.fail('Cannot process specified file: it’s ignored'); + // C8 bug on Node@12 + /* c8 ignore next 1 */ + } catch {} } - if (util.isIdContinueChar(c)) { - buffer$2 += read(); - return + if (error && error.code === 'ENOENT') { + try { + file.fail( + error.syscall === 'stat' ? 'No such file or directory' : error + ); + // C8 bug on Node@12 + /* c8 ignore next 1 */ + } catch {} } - return newToken('identifier', buffer$2) - }, - - identifierNameEscape () { - if (c !== 'u') { - throw invalidChar(read()) - } + one(null, [file]); + } + ); - read(); - const u = unicodeEscape(); - switch (u) { - case '$': - case '_': - case '\u200C': - case '\u200D': - break + /** + * Error is never given. Always given `results`. + * + * @param {Error|null} _ + * @param {Array.} results + */ + function one(_, results) { + /* istanbul ignore else - Always given. */ + if (results) { + files = files.concat(results); + } - default: - if (!util.isIdContinueChar(u)) { - throw invalidIdentifier() - } + actual++; - break - } + if (actual === expected) { + next(null, files); + } + } + } +} - buffer$2 += u; - lexState = 'identifierName'; - }, +/** + * @param {VFile|string} file + * @param {Options & {extraIgnore: GitIgnore}} options + * @param {(error: NodeJS.ErrnoException|null, result?: SearchResults) => void} callback + */ +function statAndIgnore(file, options, callback) { + const fp = path$c.resolve(options.cwd, filePath(file)); + const normal = path$c.relative(options.cwd, fp); + let expected = 1; + let actual = 0; + /** @type {Stats|undefined} */ + let stats; + /** @type {boolean|undefined} */ + let ignored; - sign () { - switch (c) { - case '.': - buffer$2 = read(); - lexState = 'decimalPointLeading'; - return + if (typeof file === 'string' || !file.value) { + expected++; + fs$a.stat(fp, (error, value) => { + stats = value; + onStartOrCheck(error); + }); + } - case '0': - buffer$2 = read(); - lexState = 'zero'; - return + options.ignore.check(fp, (error, value) => { + ignored = value; + onStartOrCheck(error); + }); - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - buffer$2 = read(); - lexState = 'decimalInteger'; - return + /** + * @param {Error|null} error + */ + function onStartOrCheck(error) { + actual++; - case 'I': - read(); - literal('nfinity'); - return newToken('numeric', sign * Infinity) + if (error) { + callback(error); + actual = -1; + } else if (actual === expected) { + callback(null, { + stats, + ignored: + ignored || + (normal === '' || + normal === '..' || + normal.charAt(0) === path$c.sep || + normal.slice(0, 3) === '..' + path$c.sep + ? false + : options.extraIgnore.ignores(normal)) + }); + } + } +} - case 'N': - read(); - literal('aN'); - return newToken('numeric', NaN) - } +/** + * @param {string|VFile} file + * @returns {string} + */ +function base$1(file) { + return typeof file === 'string' ? path$c.basename(file) : file.basename +} - throw invalidChar(read()) - }, +/** + * @param {string|VFile} file + * @returns {string} + */ +function filePath(file) { + return typeof file === 'string' ? file : file.path +} - zero () { - switch (c) { - case '.': - buffer$2 += read(); - lexState = 'decimalPoint'; - return +/** + * @param {Result} result + * @returns {boolean} + */ +function oneFileMode(result) { + return ( + result.output.length === 1 && + result.input.length === 1 && + result.output[0].path === result.input[0] + ) +} - case 'e': - case 'E': - buffer$2 += read(); - lexState = 'decimalExponent'; - return +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Settings} Settings + * @typedef {import('./index.js').Configuration} Configuration + */ - case 'x': - case 'X': - buffer$2 += read(); - lexState = 'hexadecimal'; - return +/** + * @param {Context} context + * @param {Settings} settings + * @param {Callback} next + */ +function fileSystem$1(context, settings, next) { + if (context.files.length === 0) { + next(); + } else { + finder( + context.files, + { + cwd: settings.cwd, + extensions: settings.extensions, + silentlyIgnore: settings.silentlyIgnore, + ignorePatterns: settings.ignorePatterns, + ignore: new Ignore({ + cwd: settings.cwd, + detectIgnore: settings.detectIgnore, + ignoreName: settings.ignoreName, + ignorePath: settings.ignorePath, + ignorePathResolveFrom: settings.ignorePathResolveFrom + }) + }, + (error, result) => { + // Glob errors typically don’t occur. + /* c8 ignore next 4 */ + if (!result) { + next(error); + return } - return newToken('numeric', sign * 0) - }, - - decimalInteger () { - switch (c) { - case '.': - buffer$2 += read(); - lexState = 'decimalPoint'; - return + const output = result.files; - case 'e': - case 'E': - buffer$2 += read(); - lexState = 'decimalExponent'; - return - } + // Sort alphabetically. + // Everything is unique so we do not care about cases where left and right + // are equal. + output.sort(sortAlphabetically); - if (util.isDigit(c)) { - buffer$2 += read(); - return + // Mark as given. + // This allows outputting files, which can be pretty dangerous, so it’s + // “hidden”. + let index = -1; + while (++index < output.length) { + output[index].data.unifiedEngineGiven = true; } - return newToken('numeric', sign * Number(buffer$2)) - }, + context.files = output; - decimalPointLeading () { - if (util.isDigit(c)) { - buffer$2 += read(); - lexState = 'decimalFraction'; - return + // If `out` was not set, detect it based on whether one file was given. + if (settings.out === null || settings.out === undefined) { + settings.out = result.oneFileMode; } - throw invalidChar(read()) - }, + next(error); + } + ); + } - decimalPoint () { - switch (c) { - case 'e': - case 'E': - buffer$2 += read(); - lexState = 'decimalExponent'; - return - } + /** + * @param {VFile} left + * @param {VFile} right + * @returns {number} + */ + function sortAlphabetically(left, right) { + return left.path < right.path ? -1 : 1 + } +} - if (util.isDigit(c)) { - buffer$2 += read(); - lexState = 'decimalFraction'; - return - } +/* eslint-disable node/no-deprecated-api */ - return newToken('numeric', sign * Number(buffer$2)) - }, +var toString$2 = Object.prototype.toString; - decimalFraction () { - switch (c) { - case 'e': - case 'E': - buffer$2 += read(); - lexState = 'decimalExponent'; - return - } +var isModern = ( + typeof Buffer !== 'undefined' && + typeof Buffer.alloc === 'function' && + typeof Buffer.allocUnsafe === 'function' && + typeof Buffer.from === 'function' +); - if (util.isDigit(c)) { - buffer$2 += read(); - return - } +function isArrayBuffer (input) { + return toString$2.call(input).slice(8, -1) === 'ArrayBuffer' +} - return newToken('numeric', sign * Number(buffer$2)) - }, +function fromArrayBuffer (obj, byteOffset, length) { + byteOffset >>>= 0; - decimalExponent () { - switch (c) { - case '+': - case '-': - buffer$2 += read(); - lexState = 'decimalExponentSign'; - return - } + var maxLength = obj.byteLength - byteOffset; - if (util.isDigit(c)) { - buffer$2 += read(); - lexState = 'decimalExponentInteger'; - return - } + if (maxLength < 0) { + throw new RangeError("'offset' is out of bounds") + } - throw invalidChar(read()) - }, + if (length === undefined) { + length = maxLength; + } else { + length >>>= 0; - decimalExponentSign () { - if (util.isDigit(c)) { - buffer$2 += read(); - lexState = 'decimalExponentInteger'; - return - } + if (length > maxLength) { + throw new RangeError("'length' is out of bounds") + } + } - throw invalidChar(read()) - }, + return isModern + ? Buffer.from(obj.slice(byteOffset, byteOffset + length)) + : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length))) +} - decimalExponentInteger () { - if (util.isDigit(c)) { - buffer$2 += read(); - return - } +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } - return newToken('numeric', sign * Number(buffer$2)) - }, + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } - hexadecimal () { - if (util.isHexDigit(c)) { - buffer$2 += read(); - lexState = 'hexadecimalInteger'; - return - } + return isModern + ? Buffer.from(string, encoding) + : new Buffer(string, encoding) +} - throw invalidChar(read()) - }, +function bufferFrom$1 (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } - hexadecimalInteger () { - if (util.isHexDigit(c)) { - buffer$2 += read(); - return - } + if (isArrayBuffer(value)) { + return fromArrayBuffer(value, encodingOrOffset, length) + } - return newToken('numeric', sign * Number(buffer$2)) - }, + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } - string () { - switch (c) { - case '\\': - read(); - buffer$2 += escape(); - return + return isModern + ? Buffer.from(value) + : new Buffer(value) +} - case '"': - if (doubleQuote) { - read(); - return newToken('string', buffer$2) - } +var bufferFrom_1 = bufferFrom$1; - buffer$2 += read(); - return +var typedarray = {}; - case "'": - if (!doubleQuote) { - read(); - return newToken('string', buffer$2) - } +(function (exports) { +var undefined$1 = (void 0); // Paranoia - buffer$2 += read(); - return - - case '\n': - case '\r': - throw invalidChar(read()) +// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to +// create, and consume so much memory, that the browser appears frozen. +var MAX_ARRAY_LENGTH = 1e5; - case '\u2028': - case '\u2029': - separatorChar(c); - break +// Approximations of internal ECMAScript conversion functions +var ECMAScript = (function() { + // Stash a copy in case other scripts modify these + var opts = Object.prototype.toString, + ophop = Object.prototype.hasOwnProperty; - case undefined: - throw invalidChar(read()) - } + return { + // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues: + Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); }, + HasProperty: function(o, p) { return p in o; }, + HasOwnProperty: function(o, p) { return ophop.call(o, p); }, + IsCallable: function(o) { return typeof o === 'function'; }, + ToInt32: function(v) { return v >> 0; }, + ToUint32: function(v) { return v >>> 0; } + }; +}()); - buffer$2 += read(); - }, +// Snapshot intrinsics +var LN2 = Math.LN2, + abs = Math.abs, + floor = Math.floor, + log = Math.log, + min = Math.min, + pow = Math.pow, + round = Math.round; - start () { - switch (c) { - case '{': - case '[': - return newToken('punctuator', read()) +// ES5: lock down object properties +function configureProperties(obj) { + if (getOwnPropNames && defineProp) { + var props = getOwnPropNames(obj), i; + for (i = 0; i < props.length; i += 1) { + defineProp(obj, props[i], { + value: obj[props[i]], + writable: false, + enumerable: false, + configurable: false + }); + } + } +} - // This code is unreachable since the default lexState handles eof. - // case undefined: - // return newToken('eof') - } +// emulate ES5 getter/setter API using legacy APIs +// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx +// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but +// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless) +var defineProp; +if (Object.defineProperty && (function() { + try { + Object.defineProperty({}, 'x', {}); + return true; + } catch (e) { + return false; + } + })()) { + defineProp = Object.defineProperty; +} else { + defineProp = function(o, p, desc) { + if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object"); + if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); } + if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); } + if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; } + return o; + }; +} - lexState = 'value'; - }, +var getOwnPropNames = Object.getOwnPropertyNames || function (o) { + if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object"); + var props = [], p; + for (p in o) { + if (ECMAScript.HasOwnProperty(o, p)) { + props.push(p); + } + } + return props; +}; - beforePropertyName () { - switch (c) { - case '$': - case '_': - buffer$2 = read(); - lexState = 'identifierName'; - return +// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value) +// for index in 0 ... obj.length +function makeArrayAccessors(obj) { + if (!defineProp) { return; } - case '\\': - read(); - lexState = 'identifierNameStartEscape'; - return + if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill"); - case '}': - return newToken('punctuator', read()) + function makeArrayAccessor(index) { + defineProp(obj, index, { + 'get': function() { return obj._getter(index); }, + 'set': function(v) { obj._setter(index, v); }, + enumerable: true, + configurable: false + }); + } - case '"': - case "'": - doubleQuote = (read() === '"'); - lexState = 'string'; - return - } + var i; + for (i = 0; i < obj.length; i += 1) { + makeArrayAccessor(i); + } +} - if (util.isIdStartChar(c)) { - buffer$2 += read(); - lexState = 'identifierName'; - return - } +// Internal conversion functions: +// pack() - take a number (interpreted as Type), output a byte array +// unpack() - take a byte array, output a Type-like number - throw invalidChar(read()) - }, +function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; } +function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; } - afterPropertyName () { - if (c === ':') { - return newToken('punctuator', read()) - } +function packI8(n) { return [n & 0xff]; } +function unpackI8(bytes) { return as_signed(bytes[0], 8); } - throw invalidChar(read()) - }, +function packU8(n) { return [n & 0xff]; } +function unpackU8(bytes) { return as_unsigned(bytes[0], 8); } - beforePropertyValue () { - lexState = 'value'; - }, +function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; } - afterPropertyValue () { - switch (c) { - case ',': - case '}': - return newToken('punctuator', read()) - } +function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); } - throw invalidChar(read()) - }, +function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); } - beforeArrayValue () { - if (c === ']') { - return newToken('punctuator', read()) - } +function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } - lexState = 'value'; - }, +function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } - afterArrayValue () { - switch (c) { - case ',': - case ']': - return newToken('punctuator', read()) - } +function packIEEE754(v, ebits, fbits) { - throw invalidChar(read()) - }, + var bias = (1 << (ebits - 1)) - 1, + s, e, f, i, bits, str, bytes; - end () { - // This code is unreachable since it's handled by the default lexState. - // if (c === undefined) { - // read() - // return newToken('eof') - // } + function roundToEven(n) { + var w = floor(n), f = n - w; + if (f < 0.5) + return w; + if (f > 0.5) + return w + 1; + return w % 2 ? w + 1 : w; + } - throw invalidChar(read()) - }, -}; + // Compute sign, exponent, fraction + if (v !== v) { + // NaN + // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping + e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; + } else if (v === Infinity || v === -Infinity) { + e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; + } else if (v === 0) { + e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; + } else { + s = v < 0; + v = abs(v); -function newToken (type, value) { - return { - type, - value, - line, - column, + if (v >= pow(2, 1 - bias)) { + e = min(floor(log(v) / LN2), 1023); + f = roundToEven(v / pow(2, e) * pow(2, fbits)); + if (f / pow(2, fbits) >= 2) { + e = e + 1; + f = 1; + } + if (e > bias) { + // Overflow + e = (1 << ebits) - 1; + f = 0; + } else { + // Normalized + e = e + bias; + f = f - pow(2, fbits); + } + } else { + // Denormalized + e = 0; + f = roundToEven(v / pow(2, 1 - bias - fbits)); } + } + + // Pack sign, exponent, fraction + bits = []; + for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } + for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } + bits.push(s ? 1 : 0); + bits.reverse(); + str = bits.join(''); + + // Bits to bytes + bytes = []; + while (str.length) { + bytes.push(parseInt(str.substring(0, 8), 2)); + str = str.substring(8); + } + return bytes; } -function literal (s) { - for (const c of s) { - const p = peek(); +function unpackIEEE754(bytes, ebits, fbits) { - if (p !== c) { - throw invalidChar(read()) - } + // Bytes to bits + var bits = [], i, j, b, str, + bias, s, e, f; - read(); + for (i = bytes.length; i; i -= 1) { + b = bytes[i - 1]; + for (j = 8; j; j -= 1) { + bits.push(b % 2 ? 1 : 0); b = b >> 1; } -} + } + bits.reverse(); + str = bits.join(''); -function escape () { - const c = peek(); - switch (c) { - case 'b': - read(); - return '\b' + // Unpack sign, exponent, fraction + bias = (1 << (ebits - 1)) - 1; + s = parseInt(str.substring(0, 1), 2) ? -1 : 1; + e = parseInt(str.substring(1, 1 + ebits), 2); + f = parseInt(str.substring(1 + ebits), 2); - case 'f': - read(); - return '\f' + // Produce number + if (e === (1 << ebits) - 1) { + return f !== 0 ? NaN : s * Infinity; + } else if (e > 0) { + // Normalized + return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); + } else if (f !== 0) { + // Denormalized + return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); + } else { + return s < 0 ? -0 : 0; + } +} - case 'n': - read(); - return '\n' +function unpackF64(b) { return unpackIEEE754(b, 11, 52); } +function packF64(v) { return packIEEE754(v, 11, 52); } +function unpackF32(b) { return unpackIEEE754(b, 8, 23); } +function packF32(v) { return packIEEE754(v, 8, 23); } - case 'r': - read(); - return '\r' - case 't': - read(); - return '\t' +// +// 3 The ArrayBuffer Type +// - case 'v': - read(); - return '\v' +(function() { - case '0': - read(); - if (util.isDigit(peek())) { - throw invalidChar(read()) - } + /** @constructor */ + var ArrayBuffer = function ArrayBuffer(length) { + length = ECMAScript.ToInt32(length); + if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer'); - return '\0' + this.byteLength = length; + this._bytes = []; + this._bytes.length = length; - case 'x': - read(); - return hexEscape() + var i; + for (i = 0; i < this.byteLength; i += 1) { + this._bytes[i] = 0; + } - case 'u': - read(); - return unicodeEscape() + configureProperties(this); + }; - case '\n': - case '\u2028': - case '\u2029': - read(); - return '' + exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer; - case '\r': - read(); - if (peek() === '\n') { - read(); - } + // + // 4 The ArrayBufferView Type + // - return '' + // NOTE: this constructor is not exported + /** @constructor */ + var ArrayBufferView = function ArrayBufferView() { + //this.buffer = null; + //this.byteOffset = 0; + //this.byteLength = 0; + }; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - throw invalidChar(read()) + // + // 5 The Typed Array View Types + // - case undefined: - throw invalidChar(read()) - } + function makeConstructor(bytesPerElement, pack, unpack) { + // Each TypedArray type requires a distinct constructor instance with + // identical logic, which this produces. - return read() -} + var ctor; + ctor = function(buffer, byteOffset, length) { + var array, sequence, i, s; -function hexEscape () { - let buffer = ''; - let c = peek(); + if (!arguments.length || typeof arguments[0] === 'number') { + // Constructor(unsigned long length) + this.length = ECMAScript.ToInt32(arguments[0]); + if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer'); - if (!util.isHexDigit(c)) { - throw invalidChar(read()) - } + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) { + // Constructor(TypedArray array) + array = arguments[0]; - buffer += read(); + this.length = array.length; + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; - c = peek(); - if (!util.isHexDigit(c)) { - throw invalidChar(read()) - } + for (i = 0; i < this.length; i += 1) { + this._setter(i, array._getter(i)); + } + } else if (typeof arguments[0] === 'object' && + !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(sequence array) + sequence = arguments[0]; - buffer += read(); + this.length = ECMAScript.ToUint32(sequence.length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; - return String.fromCodePoint(parseInt(buffer, 16)) -} + for (i = 0; i < this.length; i += 1) { + s = sequence[i]; + this._setter(i, Number(s)); + } + } else if (typeof arguments[0] === 'object' && + (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, optional unsigned long length) + this.buffer = buffer; -function unicodeEscape () { - let buffer = ''; - let count = 4; + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); + } - while (count-- > 0) { - const c = peek(); - if (!util.isHexDigit(c)) { - throw invalidChar(read()) + if (this.byteOffset % this.BYTES_PER_ELEMENT) { + // The given byteOffset must be a multiple of the element + // size of the specific type, otherwise an exception is raised. + throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size."); } - buffer += read(); - } + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; - return String.fromCodePoint(parseInt(buffer, 16)) -} + if (this.byteLength % this.BYTES_PER_ELEMENT) { + throw new RangeError("length of buffer minus byteOffset not a multiple of the element size"); + } + this.length = this.byteLength / this.BYTES_PER_ELEMENT; + } else { + this.length = ECMAScript.ToUint32(length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + } -const parseStates = { - start () { - if (token.type === 'eof') { - throw invalidEOF() + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); } + } else { + throw new TypeError("Unexpected argument type(s)"); + } - push(); - }, + this.constructor = ctor; - beforePropertyName () { - switch (token.type) { - case 'identifier': - case 'string': - key = token.value; - parseState = 'afterPropertyName'; - return + configureProperties(this); + makeArrayAccessors(this); + }; - case 'punctuator': - // This code is unreachable since it's handled by the lexState. - // if (token.value !== '}') { - // throw invalidToken() - // } + ctor.prototype = new ArrayBufferView(); + ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement; + ctor.prototype._pack = pack; + ctor.prototype._unpack = unpack; + ctor.BYTES_PER_ELEMENT = bytesPerElement; - pop(); - return + // getter type (unsigned long index); + ctor.prototype._getter = function(index) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); - case 'eof': - throw invalidEOF() - } + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined$1; + } - // This code is unreachable since it's handled by the lexState. - // throw invalidToken() - }, + var bytes = [], i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + bytes.push(this.buffer._bytes[o]); + } + return this._unpack(bytes); + }; - afterPropertyName () { - // This code is unreachable since it's handled by the lexState. - // if (token.type !== 'punctuator' || token.value !== ':') { - // throw invalidToken() - // } + // NONSTANDARD: convenience alias for getter: type get(unsigned long index); + ctor.prototype.get = ctor.prototype._getter; - if (token.type === 'eof') { - throw invalidEOF() - } + // setter void (unsigned long index, type value); + ctor.prototype._setter = function(index, value) { + if (arguments.length < 2) throw new SyntaxError("Not enough arguments"); - parseState = 'beforePropertyValue'; - }, + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined$1; + } - beforePropertyValue () { - if (token.type === 'eof') { - throw invalidEOF() - } + var bytes = this._pack(value), i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + this.buffer._bytes[o] = bytes[i]; + } + }; - push(); - }, + // void set(TypedArray array, optional unsigned long offset); + // void set(sequence array, optional unsigned long offset); + ctor.prototype.set = function(index, value) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + var array, sequence, offset, len, + i, s, d, + byteOffset, byteLength, tmp; - beforeArrayValue () { - if (token.type === 'eof') { - throw invalidEOF() - } + if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) { + // void set(TypedArray array, optional unsigned long offset); + array = arguments[0]; + offset = ECMAScript.ToUint32(arguments[1]); - if (token.type === 'punctuator' && token.value === ']') { - pop(); - return + if (offset + array.length > this.length) { + throw new RangeError("Offset plus length of array is out of range"); } - push(); - }, - - afterPropertyValue () { - // This code is unreachable since it's handled by the lexState. - // if (token.type !== 'punctuator') { - // throw invalidToken() - // } + byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT; + byteLength = array.length * this.BYTES_PER_ELEMENT; - if (token.type === 'eof') { - throw invalidEOF() + if (array.buffer === this.buffer) { + tmp = []; + for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) { + tmp[i] = array.buffer._bytes[s]; + } + for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) { + this.buffer._bytes[d] = tmp[i]; + } + } else { + for (i = 0, s = array.byteOffset, d = byteOffset; + i < byteLength; i += 1, s += 1, d += 1) { + this.buffer._bytes[d] = array.buffer._bytes[s]; + } } + } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') { + // void set(sequence array, optional unsigned long offset); + sequence = arguments[0]; + len = ECMAScript.ToUint32(sequence.length); + offset = ECMAScript.ToUint32(arguments[1]); - switch (token.value) { - case ',': - parseState = 'beforePropertyName'; - return + if (offset + len > this.length) { + throw new RangeError("Offset plus length of array is out of range"); + } - case '}': - pop(); + for (i = 0; i < len; i += 1) { + s = sequence[i]; + this._setter(offset + i, Number(s)); } + } else { + throw new TypeError("Unexpected argument type(s)"); + } + }; - // This code is unreachable since it's handled by the lexState. - // throw invalidToken() - }, + // TypedArray subarray(long begin, optional long end); + ctor.prototype.subarray = function(start, end) { + function clamp(v, min, max) { return v < min ? min : v > max ? max : v; } - afterArrayValue () { - // This code is unreachable since it's handled by the lexState. - // if (token.type !== 'punctuator') { - // throw invalidToken() - // } + start = ECMAScript.ToInt32(start); + end = ECMAScript.ToInt32(end); - if (token.type === 'eof') { - throw invalidEOF() - } + if (arguments.length < 1) { start = 0; } + if (arguments.length < 2) { end = this.length; } - switch (token.value) { - case ',': - parseState = 'beforeArrayValue'; - return + if (start < 0) { start = this.length + start; } + if (end < 0) { end = this.length + end; } - case ']': - pop(); - } + start = clamp(start, 0, this.length); + end = clamp(end, 0, this.length); - // This code is unreachable since it's handled by the lexState. - // throw invalidToken() - }, + var len = end - start; + if (len < 0) { + len = 0; + } - end () { - // This code is unreachable since it's handled by the lexState. - // if (token.type !== 'eof') { - // throw invalidToken() - // } - }, -}; + return new this.constructor( + this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len); + }; -function push () { - let value; + return ctor; + } - switch (token.type) { - case 'punctuator': - switch (token.value) { - case '{': - value = {}; - break + var Int8Array = makeConstructor(1, packI8, unpackI8); + var Uint8Array = makeConstructor(1, packU8, unpackU8); + var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8); + var Int16Array = makeConstructor(2, packI16, unpackI16); + var Uint16Array = makeConstructor(2, packU16, unpackU16); + var Int32Array = makeConstructor(4, packI32, unpackI32); + var Uint32Array = makeConstructor(4, packU32, unpackU32); + var Float32Array = makeConstructor(4, packF32, unpackF32); + var Float64Array = makeConstructor(8, packF64, unpackF64); - case '[': - value = []; - break - } + exports.Int8Array = exports.Int8Array || Int8Array; + exports.Uint8Array = exports.Uint8Array || Uint8Array; + exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray; + exports.Int16Array = exports.Int16Array || Int16Array; + exports.Uint16Array = exports.Uint16Array || Uint16Array; + exports.Int32Array = exports.Int32Array || Int32Array; + exports.Uint32Array = exports.Uint32Array || Uint32Array; + exports.Float32Array = exports.Float32Array || Float32Array; + exports.Float64Array = exports.Float64Array || Float64Array; +}()); - break +// +// 6 The DataView View Type +// - case 'null': - case 'boolean': - case 'numeric': - case 'string': - value = token.value; - break +(function() { + function r(array, index) { + return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index]; + } - // This code is unreachable. - // default: - // throw invalidToken() - } + var IS_BIG_ENDIAN = (function() { + var u16array = new(exports.Uint16Array)([0x1234]), + u8array = new(exports.Uint8Array)(u16array.buffer); + return r(u8array, 0) === 0x12; + }()); - if (root$1 === undefined) { - root$1 = value; - } else { - const parent = stack[stack.length - 1]; - if (Array.isArray(parent)) { - parent.push(value); - } else { - parent[key] = value; - } + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, + // optional unsigned long byteLength) + /** @constructor */ + var DataView = function DataView(buffer, byteOffset, byteLength) { + if (arguments.length === 0) { + buffer = new exports.ArrayBuffer(0); + } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) { + throw new TypeError("TypeError"); } - if (value !== null && typeof value === 'object') { - stack.push(value); + this.buffer = buffer || new exports.ArrayBuffer(0); - if (Array.isArray(value)) { - parseState = 'beforeArrayValue'; - } else { - parseState = 'beforePropertyName'; - } - } else { - const current = stack[stack.length - 1]; - if (current == null) { - parseState = 'end'; - } else if (Array.isArray(current)) { - parseState = 'afterArrayValue'; - } else { - parseState = 'afterPropertyValue'; - } + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); } -} - -function pop () { - stack.pop(); - const current = stack[stack.length - 1]; - if (current == null) { - parseState = 'end'; - } else if (Array.isArray(current)) { - parseState = 'afterArrayValue'; + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; } else { - parseState = 'afterPropertyValue'; + this.byteLength = ECMAScript.ToUint32(byteLength); } -} - -// This code is unreachable. -// function invalidParseState () { -// return new Error(`JSON5: invalid parse state '${parseState}'`) -// } -// This code is unreachable. -// function invalidLexState (state) { -// return new Error(`JSON5: invalid lex state '${state}'`) -// } - -function invalidChar (c) { - if (c === undefined) { - return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); } - return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) -} + configureProperties(this); + }; -function invalidEOF () { - return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) -} + function makeGetter(arrayType) { + return function(byteOffset, littleEndian) { -// This code is unreachable. -// function invalidToken () { -// if (token.type === 'eof') { -// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) -// } + byteOffset = ECMAScript.ToUint32(byteOffset); -// const c = String.fromCodePoint(token.value.codePointAt(0)) -// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) -// } + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } + byteOffset += this.byteOffset; -function invalidIdentifier () { - column -= 5; - return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) -} + var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), + bytes = [], i; + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(uint8Array, i)); + } -function separatorChar (c) { - console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`); -} + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } -function formatChar (c) { - const replacements = { - "'": "\\'", - '"': '\\"', - '\\': '\\\\', - '\b': '\\b', - '\f': '\\f', - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\v': '\\v', - '\0': '\\0', - '\u2028': '\\u2028', - '\u2029': '\\u2029', + return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0); }; + } - if (replacements[c]) { - return replacements[c] - } - - if (c < ' ') { - const hexString = c.charCodeAt(0).toString(16); - return '\\x' + ('00' + hexString).substring(hexString.length) - } + DataView.prototype.getUint8 = makeGetter(exports.Uint8Array); + DataView.prototype.getInt8 = makeGetter(exports.Int8Array); + DataView.prototype.getUint16 = makeGetter(exports.Uint16Array); + DataView.prototype.getInt16 = makeGetter(exports.Int16Array); + DataView.prototype.getUint32 = makeGetter(exports.Uint32Array); + DataView.prototype.getInt32 = makeGetter(exports.Int32Array); + DataView.prototype.getFloat32 = makeGetter(exports.Float32Array); + DataView.prototype.getFloat64 = makeGetter(exports.Float64Array); - return c -} + function makeSetter(arrayType) { + return function(byteOffset, value, littleEndian) { -function syntaxError (message) { - const err = new SyntaxError(message); - err.lineNumber = line; - err.columnNumber = column; - return err -} + byteOffset = ECMAScript.ToUint32(byteOffset); + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } -var stringify$3 = function stringify (value, replacer, space) { - const stack = []; - let indent = ''; - let propertyList; - let replacerFunc; - let gap = ''; - let quote; + // Get bytes + var typeArray = new arrayType([value]), + byteArray = new exports.Uint8Array(typeArray.buffer), + bytes = [], i, byteView; - if ( - replacer != null && - typeof replacer === 'object' && - !Array.isArray(replacer) - ) { - space = replacer.space; - quote = replacer.quote; - replacer = replacer.replacer; - } + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(byteArray, i)); + } - if (typeof replacer === 'function') { - replacerFunc = replacer; - } else if (Array.isArray(replacer)) { - propertyList = []; - for (const v of replacer) { - let item; + // Flip if necessary + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } - if (typeof v === 'string') { - item = v; - } else if ( - typeof v === 'number' || - v instanceof String || - v instanceof Number - ) { - item = String(v); - } + // Write them + byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT); + byteView.set(bytes); + }; + } - if (item !== undefined && propertyList.indexOf(item) < 0) { - propertyList.push(item); - } - } - } + DataView.prototype.setUint8 = makeSetter(exports.Uint8Array); + DataView.prototype.setInt8 = makeSetter(exports.Int8Array); + DataView.prototype.setUint16 = makeSetter(exports.Uint16Array); + DataView.prototype.setInt16 = makeSetter(exports.Int16Array); + DataView.prototype.setUint32 = makeSetter(exports.Uint32Array); + DataView.prototype.setInt32 = makeSetter(exports.Int32Array); + DataView.prototype.setFloat32 = makeSetter(exports.Float32Array); + DataView.prototype.setFloat64 = makeSetter(exports.Float64Array); - if (space instanceof Number) { - space = Number(space); - } else if (space instanceof String) { - space = String(space); - } + exports.DataView = exports.DataView || DataView; - if (typeof space === 'number') { - if (space > 0) { - space = Math.min(10, Math.floor(space)); - gap = ' '.substr(0, space); - } - } else if (typeof space === 'string') { - gap = space.substr(0, 10); - } +}()); +}(typedarray)); - return serializeProperty('', {'': value}) +var Writable = require$$1.Writable; +var inherits = inherits$2.exports; +var bufferFrom = bufferFrom_1; - function serializeProperty (key, holder) { - let value = holder[key]; - if (value != null) { - if (typeof value.toJSON5 === 'function') { - value = value.toJSON5(key); - } else if (typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - } +if (typeof Uint8Array === 'undefined') { + var U8 = typedarray.Uint8Array; +} else { + var U8 = Uint8Array; +} - if (replacerFunc) { - value = replacerFunc.call(holder, key, value); - } +function ConcatStream(opts, cb) { + if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb) - if (value instanceof Number) { - value = Number(value); - } else if (value instanceof String) { - value = String(value); - } else if (value instanceof Boolean) { - value = value.valueOf(); - } + if (typeof opts === 'function') { + cb = opts; + opts = {}; + } + if (!opts) opts = {}; - switch (value) { - case null: return 'null' - case true: return 'true' - case false: return 'false' - } + var encoding = opts.encoding; + var shouldInferEncoding = false; - if (typeof value === 'string') { - return quoteString(value) - } + if (!encoding) { + shouldInferEncoding = true; + } else { + encoding = String(encoding).toLowerCase(); + if (encoding === 'u8' || encoding === 'uint8') { + encoding = 'uint8array'; + } + } - if (typeof value === 'number') { - return String(value) - } + Writable.call(this, { objectMode: true }); - if (typeof value === 'object') { - return Array.isArray(value) ? serializeArray(value) : serializeObject(value) - } + this.encoding = encoding; + this.shouldInferEncoding = shouldInferEncoding; - return undefined - } + if (cb) this.on('finish', function () { cb(this.getBody()); }); + this.body = []; +} - function quoteString (value) { - const quotes = { - "'": 0.1, - '"': 0.2, - }; +var concatStream = ConcatStream; +inherits(ConcatStream, Writable); - const replacements = { - "'": "\\'", - '"': '\\"', - '\\': '\\\\', - '\b': '\\b', - '\f': '\\f', - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\v': '\\v', - '\0': '\\0', - '\u2028': '\\u2028', - '\u2029': '\\u2029', - }; - - let product = ''; +ConcatStream.prototype._write = function(chunk, enc, next) { + this.body.push(chunk); + next(); +}; - for (let i = 0; i < value.length; i++) { - const c = value[i]; - switch (c) { - case "'": - case '"': - quotes[c]++; - product += c; - continue +ConcatStream.prototype.inferEncoding = function (buff) { + var firstBuffer = buff === undefined ? this.body[0] : buff; + if (Buffer.isBuffer(firstBuffer)) return 'buffer' + if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array' + if (Array.isArray(firstBuffer)) return 'array' + if (typeof firstBuffer === 'string') return 'string' + if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object' + return 'buffer' +}; - case '\0': - if (util.isDigit(value[i + 1])) { - product += '\\x00'; - continue - } - } +ConcatStream.prototype.getBody = function () { + if (!this.encoding && this.body.length === 0) return [] + if (this.shouldInferEncoding) this.encoding = this.inferEncoding(); + if (this.encoding === 'array') return arrayConcat(this.body) + if (this.encoding === 'string') return stringConcat(this.body) + if (this.encoding === 'buffer') return bufferConcat(this.body) + if (this.encoding === 'uint8array') return u8Concat(this.body) + return this.body +}; - if (replacements[c]) { - product += replacements[c]; - continue - } +function isArrayish (arr) { + return /Array\]$/.test(Object.prototype.toString.call(arr)) +} - if (c < ' ') { - let hexString = c.charCodeAt(0).toString(16); - product += '\\x' + ('00' + hexString).substring(hexString.length); - continue - } +function isBufferish (p) { + return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function') +} - product += c; - } +function stringConcat (parts) { + var strings = []; + for (var i = 0; i < parts.length; i++) { + var p = parts[i]; + if (typeof p === 'string') { + strings.push(p); + } else if (Buffer.isBuffer(p)) { + strings.push(p); + } else if (isBufferish(p)) { + strings.push(bufferFrom(p)); + } else { + strings.push(bufferFrom(String(p))); + } + } + if (Buffer.isBuffer(parts[0])) { + strings = Buffer.concat(strings); + strings = strings.toString('utf8'); + } else { + strings = strings.join(''); + } + return strings +} - const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b); +function bufferConcat (parts) { + var bufs = []; + for (var i = 0; i < parts.length; i++) { + var p = parts[i]; + if (Buffer.isBuffer(p)) { + bufs.push(p); + } else if (isBufferish(p)) { + bufs.push(bufferFrom(p)); + } else { + bufs.push(bufferFrom(String(p))); + } + } + return Buffer.concat(bufs) +} - product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); +function arrayConcat (parts) { + var res = []; + for (var i = 0; i < parts.length; i++) { + res.push.apply(res, parts[i]); + } + return res +} - return quoteChar + product + quoteChar +function u8Concat (parts) { + var len = 0; + for (var i = 0; i < parts.length; i++) { + if (typeof parts[i] === 'string') { + parts[i] = bufferFrom(parts[i]); } + len += parts[i].length; + } + var u8 = new U8(len); + for (var i = 0, offset = 0; i < parts.length; i++) { + var part = parts[i]; + for (var j = 0; j < part.length; j++) { + u8[offset++] = part[j]; + } + } + return u8 +} - function serializeObject (value) { - if (stack.indexOf(value) >= 0) { - throw TypeError('Converting circular structure to JSON5') - } - - stack.push(value); +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Settings} Settings + */ - let stepback = indent; - indent = indent + gap; +const debug$9 = createDebug('unified-engine:file-set-pipeline:stdin'); - let keys = propertyList || Object.keys(value); - let partial = []; - for (const key of keys) { - const propertyString = serializeProperty(key, value); - if (propertyString !== undefined) { - let member = serializeKey(key) + ':'; - if (gap !== '') { - member += ' '; - } - member += propertyString; - partial.push(member); - } - } +/** + * @param {Context} context + * @param {Settings} settings + * @param {Callback} next + */ +function stdin(context, settings, next) { + if (settings.files && settings.files.length > 0) { + debug$9('Ignoring `streamIn`'); - let final; - if (partial.length === 0) { - final = '{}'; - } else { - let properties; - if (gap === '') { - properties = partial.join(','); - final = '{' + properties + '}'; - } else { - let separator = ',\n' + indent; - properties = partial.join(separator); - final = '{\n' + indent + properties + ',\n' + stepback + '}'; - } - } + /** @type {Error|undefined} */ + let error; - stack.pop(); - indent = stepback; - return final + if (settings.filePath) { + error = new Error( + 'Do not pass both `--file-path` and real files.\nDid you mean to pass stdin instead of files?' + ); } - function serializeKey (key) { - if (key.length === 0) { - return quoteString(key) - } - - const firstChar = String.fromCodePoint(key.codePointAt(0)); - if (!util.isIdStartChar(firstChar)) { - return quoteString(key) - } + next(error); - for (let i = firstChar.length; i < key.length; i++) { - if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { - return quoteString(key) - } - } + return + } - return key - } + // @ts-expect-error: does exist on `stdin`. + if (settings.streamIn.isTTY) { + debug$9('Cannot read from `tty` stream'); + next(new Error('No input')); - function serializeArray (value) { - if (stack.indexOf(value) >= 0) { - throw TypeError('Converting circular structure to JSON5') - } + return + } - stack.push(value); + debug$9('Reading from `streamIn`'); - let stepback = indent; - indent = indent + gap; + settings.streamIn.pipe( + concatStream({encoding: 'string'}, (value) => { + const file = toVFile(settings.filePath); - let partial = []; - for (let i = 0; i < value.length; i++) { - const propertyString = serializeProperty(String(i), value); - partial.push((propertyString !== undefined) ? propertyString : 'null'); - } + debug$9('Read from `streamIn`'); - let final; - if (partial.length === 0) { - final = '[]'; - } else { - if (gap === '') { - let properties = partial.join(','); - final = '[' + properties + ']'; - } else { - let separator = ',\n' + indent; - let properties = partial.join(separator); - final = '[\n' + indent + properties + ',\n' + stepback + ']'; - } - } + file.cwd = settings.cwd; + file.value = value; + file.data.unifiedEngineGiven = true; + file.data.unifiedEngineStreamIn = true; - stack.pop(); - indent = stepback; - return final - } -}; + context.files = [file]; -const JSON5 = { - parse: parse$4, - stringify: stringify$3, -}; + // If `out` was not set, set `out`. + settings.out = + settings.out === null || settings.out === undefined + ? true + : settings.out; -var lib$3 = JSON5; + next(); + }) + ); +} -var dist$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': lib$3 -}); +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Pipeline} Pipeline + */ -var require$$3$1 = /*@__PURE__*/getAugmentedNamespace(dist$1); - -var require$$5$1 = [ - { - long: "help", - description: "output usage information", - short: "h", - type: "boolean", - "default": false - }, - { - long: "version", - description: "output version number", - short: "v", - type: "boolean", - "default": false - }, - { - long: "output", - description: "specify output location", - short: "o", - value: "[path]" - }, - { - long: "rc-path", - description: "specify configuration file", - short: "r", - type: "string", - value: "" - }, - { - long: "ignore-path", - description: "specify ignore file", - short: "i", - type: "string", - value: "" - }, - { - long: "setting", - description: "specify settings", - short: "s", - type: "string", - value: "" - }, - { - long: "ext", - description: "specify extensions", - short: "e", - type: "string", - value: "" - }, - { - long: "use", - description: "use plugins", - short: "u", - type: "string", - value: "" - }, - { - long: "watch", - description: "watch for changes and reprocess", - short: "w", - type: "boolean", - "default": false - }, - { - long: "quiet", - description: "output only warnings and errors", - short: "q", - type: "boolean", - "default": false - }, - { - long: "silent", - description: "output only errors", - short: "S", - type: "boolean", - "default": false - }, - { - long: "frail", - description: "exit with 1 on warnings", - short: "f", - type: "boolean", - "default": false - }, - { - long: "tree", - description: "specify input and output as syntax tree", - short: "t", - type: "boolean", - "default": false - }, - { - long: "report", - description: "specify reporter", - type: "string", - value: "" - }, - { - long: "file-path", - description: "specify path to process as", - type: "string", - value: "" - }, - { - long: "ignore-path-resolve-from", - description: "resolve patterns in `ignore-path` from its directory or cwd", - type: "string", - value: "dir|cwd", - "default": "dir" - }, - { - long: "ignore-pattern", - description: "specify ignore patterns", - type: "string", - value: "" - }, - { - long: "silently-ignore", - description: "do not fail when given ignored files", - type: "boolean" - }, - { - long: "tree-in", - description: "specify input as syntax tree", - type: "boolean" - }, - { - long: "tree-out", - description: "output syntax tree", - type: "boolean" - }, - { - long: "inspect", - description: "output formatted syntax tree", - type: "boolean" - }, - { - long: "stdout", - description: "specify writing to stdout", - type: "boolean", - truelike: true - }, - { - long: "color", - description: "specify color in report", - type: "boolean", - "default": true - }, - { - long: "config", - description: "search for configuration files", - type: "boolean", - "default": true - }, - { - long: "ignore", - description: "search for ignore files", - type: "boolean", - "default": true - } -]; +class FileSet extends EventEmitter$1 { + /** + * FileSet constructor. + * A FileSet is created to process multiple files through unified processors. + * This set, containing all files, is exposed to plugins as an argument to the + * attacher. + */ + constructor() { + super(); -var table = textTable; -var camelcase = camelcase$1.exports; -var minimist = minimist$1; -var json5 = require$$3$1; -var fault = fault_1; -var schema$1 = require$$5$1; + /** @type {Array.} */ + this.files = []; + /** @type {string[]} */ + this.origins = []; + /** @type {Completer[]} */ + this.plugins = []; + /** @type {number} */ + this.expected = 0; + /** @type {number} */ + this.actual = 0; + /** @type {Pipeline} */ + this.pipeline = trough(); -var options_1 = options$1; + // Called when a single file has completed it’s pipeline, triggering `done` + // when all files are complete. + this.on('one', () => { + this.actual++; -// Schema for `minimist`. -var minischema = { - unknown: handleUnknownArgument, - default: {}, - alias: {}, - string: [], - boolean: [] -}; + if (this.actual >= this.expected) { + this.emit('done'); + } + }); + } -schema$1.forEach(addEach); + /** + * Access the files in a set. + */ + valueOf() { + return this.files + } -// Parse CLI options. -function options$1(flags, configuration) { - var extension = configuration.extensions[0]; - var name = configuration.name; - var config = toCamelCase(minimist(flags, minischema)); - var help; - var ext; - var report; + /** + * Attach middleware to the pipeline on `fileSet`. + * + * @param {Completer} plugin + */ + use(plugin) { + const pipeline = this.pipeline; + let duplicate = false; - schema$1.forEach(function (option) { - if (option.type === 'string' && config[option.long] === '') { - throw fault('Missing value:%s', inspect(option).join(' ')) + if (plugin && plugin.pluginId) { + duplicate = this.plugins.some((fn) => fn.pluginId === plugin.pluginId); } - }); - ext = commaSeparated(config.ext); - report = reporter(config.report); + if (!duplicate && this.plugins.includes(plugin)) { + duplicate = true; + } - help = [ - inspectAll(schema$1), - '', - 'Examples:', - '', - ' # Process `input.' + extension + '`', - ' $ ' + name + ' input.' + extension + ' -o output.' + extension, - '', - ' # Pipe', - ' $ ' + name + ' < input.' + extension + ' > output.' + extension, - '', - ' # Rewrite all applicable files', - ' $ ' + name + ' . -o' - ].join('\n'); + if (!duplicate) { + this.plugins.push(plugin); + pipeline.use(plugin); + } - return { - helpMessage: help, - // “hidden” feature, makes testing easier. - cwd: configuration.cwd, - processor: configuration.processor, - help: config.help, - version: config.version, - files: config._, - filePath: config.filePath, - watch: config.watch, - extensions: ext.length === 0 ? configuration.extensions : ext, - output: config.output, - out: config.stdout, - tree: config.tree, - treeIn: config.treeIn, - treeOut: config.treeOut, - inspect: config.inspect, - rcName: configuration.rcName, - packageField: configuration.packageField, - rcPath: config.rcPath, - detectConfig: config.config, - settings: settings(config.setting), - ignoreName: configuration.ignoreName, - ignorePath: config.ignorePath, - ignorePathResolveFrom: config.ignorePathResolveFrom, - ignorePatterns: commaSeparated(config.ignorePattern), - silentlyIgnore: config.silentlyIgnore, - detectIgnore: config.ignore, - pluginPrefix: configuration.pluginPrefix, - plugins: plugins(config.use), - reporter: report[0], - reporterOptions: report[1], - color: config.color, - silent: config.silent, - quiet: config.quiet, - frail: config.frail + return this } -} -function addEach(option) { - var value = option.default; + /** + * Add a file to be processed. + * The given file is processed like other files with a few differences: + * + * * Ignored when their file path is already added + * * Never written to the file system or streamOut + * * Not reported for + * + * @param {string|VFile} file + */ + add(file) { + if (typeof file === 'string') { + file = toVFile(file); + } - minischema.default[option.long] = value === undefined ? null : value; + // Prevent files from being added multiple times. + if (this.origins.includes(file.history[0])) { + return this + } - if (option.type in minischema) { - minischema[option.type].push(option.long); - } + this.origins.push(file.history[0]); - if (option.short) { - minischema.alias[option.short] = option.long; + // Add. + this.valueOf().push(file); + this.expected++; + + // Force an asynchronous operation. + // This ensures that files which fall through the file pipeline immediately + // (such as, when already fatally failed) still queue up correctly. + setImmediate(() => { + this.emit('add', file); + }); + + return this } } -// Parse `extensions`. -function commaSeparated(value) { - return flatten(normalize(value).map(splitList)) -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ -// Parse `plugins`. -function plugins(value) { - var result = {}; +const debug$8 = createDebug('unified-engine:file-pipeline:read'); - normalize(value) - .map(splitOptions) - .forEach(function (value) { - result[value[0]] = value[1] ? parseConfig(value[1], {}) : null; - }); +/** + * Fill a file with its value when not already filled. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function read$1(context, file, next) { + let filePath = file.path; - return result -} + if (file.value || file.data.unifiedEngineStreamIn) { + debug$8('Not reading file `%s` with `value`', filePath); + next(); + } else if (statistics(file).fatal) { + debug$8('Not reading failed file `%s`', filePath); + next(); + } else { + filePath = path$c.resolve(context.settings.cwd, filePath); -// Parse `reporter`: only one is accepted. -function reporter(value) { - var all = normalize(value) - .map(splitOptions) - .map(function (value) { - return [value[0], value[1] ? parseConfig(value[1], {}) : null] - }); + debug$8('Reading `%s` in `%s`', filePath, 'utf8'); + fs$a.readFile(filePath, 'utf8', (error, value) => { + debug$8('Read `%s` (error: %s)', filePath, error); - return all[all.length - 1] || [] + file.value = value || ''; + + next(error); + }); + } } -// Parse `settings`. -function settings(value) { - var cache = {}; +/** + * Has own property. + * + * @type {Function} + */ - normalize(value).forEach(function (value) { - parseConfig(value, cache); - }); +var has = Object.prototype.hasOwnProperty; - return cache -} +/** + * To string. + * + * @type {Function} + */ -// Parse configuration. -function parseConfig(flags, cache) { - var flag; - var message; +var toString$1 = Object.prototype.toString; - try { - flags = toCamelCase(parseJSON(flags)); - } catch (error) { - // Fix position - message = error.message.replace(/at(?= position)/, 'around'); +/** + * Test whether a value is "empty". + * + * @param {Mixed} val + * @return {Boolean} + */ - throw fault('Cannot parse `%s` as JSON: %s', flags, message) - } +function isEmpty(val) { + // Null and Undefined... + if (val == null) return true - for (flag in flags) { - cache[flag] = flags[flag]; - } + // Booleans... + if ('boolean' == typeof val) return false - return cache -} + // Numbers... + if ('number' == typeof val) return val === 0 -// Handle an unknown flag. -function handleUnknownArgument(flag) { - // Glob. - if (flag.charAt(0) !== '-') { - return - } + // Strings... + if ('string' == typeof val) return val.length === 0 - // Long options, always unknown. - if (flag.charAt(1) === '-') { - throw fault('Unknown option `%s`, expected:\n%s', flag, inspectAll(schema$1)) - } + // Functions... + if ('function' == typeof val) return val.length === 0 - // Short options, can be grouped. - flag.slice(1).split('').forEach(each); + // Arrays... + if (Array.isArray(val)) return val.length === 0 - function each(key) { - var length = schema$1.length; - var index = -1; - var option; + // Errors... + if (val instanceof Error) return val.message === '' - while (++index < length) { - option = schema$1[index]; + // Objects... + if (val.toString == toString$1) { + switch (val.toString()) { - if (option.short === key) { - return + // Maps, Sets, Files and Errors... + case '[object File]': + case '[object Map]': + case '[object Set]': { + return val.size === 0 } - } - throw fault( - 'Unknown short option `-%s`, expected:\n%s', - key, - inspectAll(schema$1.filter(short)) - ) - } + // Plain objects... + case '[object Object]': { + for (var key in val) { + if (has.call(val, key)) return false + } - function short(option) { - return option.short + return true + } + } } -} -// Inspect all `options`. -function inspectAll(options) { - return table(options.map(inspect)) + // Anything else... + return false } -// Inspect one `option`. -function inspect(option) { - var description = option.description; - var long = option.long; +/** + * Export `isEmpty`. + * + * @type {Function} + */ - if (option.default === true || option.truelike) { - description += ' (on by default)'; - long = '[no-]' + long; - } +var lib$1 = isEmpty; - return [ - '', - option.short ? '-' + option.short : '', - '--' + long + (option.value ? ' ' + option.value : ''), - description - ] -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ -// Normalize `value`. -function normalize(value) { - if (!value) { - return [] - } +const debug$7 = createDebug('unified-engine:file-pipeline:configure'); - if (typeof value === 'string') { - return [value] +/** + * Collect configuration for a file based on the context. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function configure$2(context, file, next) { + if (statistics(file).fatal) { + return next() } - return flatten(value.map(normalize)) -} - -// Flatten `values`. -function flatten(values) { - return [].concat.apply([], values) -} + context.configuration.load(file.path, (error, configuration) => { + let index = -1; -function splitOptions(value) { - return value.split('=') -} + if (!configuration) { + return next(error) + } -function splitList(value) { - return value.split(',') -} + // Could be missing if a `configTransform` returns weird things. + /* c8 ignore next 1 */ + const plugins = configuration.plugins || []; -// Transform the keys on an object to camel-case, recursivly. -function toCamelCase(object) { - var result = {}; - var value; - var key; + // Store configuration on the context object. + debug$7('Using settings `%j`', configuration.settings); + context.processor.data('settings', configuration.settings); - for (key in object) { - value = object[key]; + debug$7('Using `%d` plugins', plugins.length); - if (value && typeof value === 'object' && !('length' in value)) { - value = toCamelCase(value); - } + while (++index < plugins.length) { + const plugin = plugins[index][0]; + let options = plugins[index][1]; - result[camelcase(key)] = value; - } + if (options === false) { + continue + } - return result -} + // Allow for default arguments in es2020. + /* c8 ignore next 6 */ + if ( + options === null || + (typeof options === 'object' && lib$1(options)) + ) { + options = undefined; + } -// Parse a (lazy?) JSON config. -function parseJSON(value) { - return json5.parse('{' + value + '}') -} + debug$7( + 'Using plugin `%s`, with options `%j`', + // @ts-expect-error: `displayName` sure can exist on functions. + plugin.displayName || plugin.name || 'function', + options + ); -var stream = require$$0__default$5['default']; -var engine = lib$4; -var chalk = source$1; -var chokidar = chokidar$1; -var options = options_1; + try { + context.processor.use(plugin, options, context.fileSet); + /* Should not happen anymore! */ + /* c8 ignore next 3 */ + } catch (error_) { + return next(error_) + } + } -var lib$2 = start$3; + next(); + }); +} -var noop$2 = Function.prototype; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('./index.js').Context} Context + */ -// Fake TTY stream. -var ttyStream = new stream.Readable(); -ttyStream.isTTY = true; +const debug$6 = createDebug('unified-engine:file-pipeline:parse'); -// Exit, lazily, with the correct exit status code. -var exitStatus = 0; - -process.on('exit', onexit); +/** + * Fill a file with a tree. + * + * @param {Context} context + * @param {VFile} file + */ +function parse$2(context, file) { + if (statistics(file).fatal) { + return + } -// Handle uncaught errors, such as from unexpected async behaviour. -process.on('uncaughtException', fail$1); + if (context.settings.treeIn) { + debug$6('Not parsing already parsed document'); -// Start the CLI. -function start$3(cliConfig) { - var config; - var output; - var watcher; + try { + context.tree = parseJson_1(file.toString()); + } catch (error) { + const message = file.message( + new Error('Cannot read file as JSON\n' + error.message) + ); + message.fatal = true; + } - try { - config = options(process.argv.slice(2), cliConfig); - } catch (error) { - return fail$1(error, true) - } + // Add the preferred extension to ensure the file, when serialized, is + // correctly recognised. + // Only add it if there is a path — not if the file is for example stdin. + if (file.path) { + file.extname = context.settings.extensions[0]; + } - if (config.help) { - process.stdout.write( - [ - 'Usage: ' + cliConfig.name + ' [options] [path | glob ...]', - '', - ' ' + cliConfig.description, - '', - 'Options:', - '', - config.helpMessage, - '' - ].join('\n'), - noop$2 - ); + file.value = ''; return } - if (config.version) { - process.stdout.write(cliConfig.version + '\n', noop$2); + debug$6('Parsing `%s`', file.path); - return - } + context.tree = context.processor.parse(file); - // Modify `config` for watching. - if (config.watch) { - output = config.output; + debug$6('Parsed document'); +} - // Do not read from stdin(4). - config.streamIn = ttyStream; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ - // Do not write to stdout(4). - config.out = false; +const debug$5 = createDebug('unified-engine:file-pipeline:transform'); - process.stderr.write( - chalk.bold('Watching...') + ' (press CTRL+C to exit)\n', - noop$2 - ); +/** + * Transform the tree associated with a file with configured plugins. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function transform$2(context, file, next) { + if (statistics(file).fatal) { + next(); + } else { + debug$5('Transforming document `%s`', file.path); + // @ts-expect-error: `tree` is defined at this point. + context.processor.run(context.tree, file, (error, node) => { + debug$5('Transformed document (error: %s)', error); + context.tree = node; + next(error); + }); + } +} - // Prevent infinite loop if set to regeneration. - if (output === true) { - config.output = false; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ - process.stderr.write( - chalk.yellow('Note') + ': Ignoring `--output` until exit.\n', - noop$2 - ); - } - } +const debug$4 = createDebug('unified-engine:file-pipeline:queue'); - // Initial run. - engine(config, done); +const own$a = {}.hasOwnProperty; - // Handle complete run. - function done(err, code, context) { - if (err) { - clean(); - fail$1(err); - } else { - exitStatus = code; +/** + * Queue all files which came this far. + * When the last file gets here, run the file-set pipeline and flush the queue. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function queue(context, file, next) { + let origin = file.history[0]; + // @ts-expect-error: store a completion map on the `fileSet`. + let map = context.fileSet.complete; + let complete = true; - if (config.watch && !watcher) { - subscribe(context); - } - } + if (!map) { + map = {}; + // @ts-expect-error: store a completion map on the `fileSet`. + context.fileSet.complete = map; } - // Clean the watcher. - function clean() { - if (watcher) { - watcher.close(); - watcher = null; - } + debug$4('Queueing `%s`', origin); + + map[origin] = next; + + const files = context.fileSet.valueOf(); + let index = -1; + while (++index < files.length) { + each(files[index]); } - // Subscribe a chokidar watcher to all processed files. - function subscribe(context) { - watcher = chokidar - .watch(context.fileSet.origins, {cwd: config.cwd, ignoreInitial: true}) - .on('error', done) - .on('change', onchange); + if (!complete) { + debug$4('Not flushing: some files cannot be flushed'); + return + } - process.on('SIGINT', onsigint); + // @ts-expect-error: Reset map. + context.fileSet.complete = {}; + context.fileSet.pipeline.run(context.fileSet, done); - function onchange(filePath) { - config.files = [filePath]; + /** + * @param {VFile} file + */ + function each(file) { + const key = file.history[0]; - engine(config, done); + if (statistics(file).fatal) { + return } - function onsigint() { - // Hide the `^C` in terminal. - process.stderr.write('\n', noop$2); + if (typeof map[key] === 'function') { + debug$4('`%s` can be flushed', key); + } else { + debug$4('Interupting flush: `%s` is not finished', key); + complete = false; + } + } - clean(); + /** + * @param {Error|Null} error + */ + function done(error) { + debug$4('Flushing: all files can be flushed'); - // Do another process if `output` specified regeneration. - if (output === true) { - config.output = output; - config.watch = false; - engine(config, done); + // Flush. + for (origin in map) { + if (own$a.call(map, origin)) { + map[origin](error); } } } } -// Print an error, optionally with stack. -function fail$1(err, pretty) { - var message = - (pretty ? String(err).trim() : err.stack) || - /* istanbul ignore next - Old versions of Node */ err; +var own$9 = {}.hasOwnProperty; - exitStatus = 1; +var bold = ansiColor(1, 22); +var dim = ansiColor(2, 22); +var yellow = ansiColor(33, 39); +var green = ansiColor(32, 39); - process.stderr.write(message.trim() + '\n', noop$2); -} +// ANSI color regex. +/* eslint-disable-next-line no-control-regex */ +var colorExpression = /(?:(?:\u001B\[)|\u009B)(?:\d{1,3})?(?:(?:;\d{0,3})*)?[A-M|f-m]|\u001B[A-M]/g; -function onexit() { - /* eslint-disable unicorn/no-process-exit */ - process.exit(exitStatus); - /* eslint-enable unicorn/no-process-exit */ +/** + * Inspects a node, without using color. + * + * @param {unknown} node + * @param {InspectOptions} [options] + * @returns {string} + */ +function inspectNoColor(node, options) { + return inspectColor(node, options).replace(colorExpression, '') } -var unifiedArgs = lib$2; +/** + * Inspects a node, using color. + * + * @param {unknown} tree + * @param {InspectOptions} [options] + * @returns {string} + */ +function inspectColor(tree, options) { + var positions = + !options || + options.showPositions === null || + options.showPositions === undefined + ? true + : options.showPositions; -var require$$0$3 = [ - "md", - "markdown", - "mdown", - "mkdn", - "mkd", - "mdwn", - "mkdown", - "ron" -]; + return inspectValue(tree) -var markdownExtensions = require$$0$3; + /** + * @param {unknown} node + * @returns {string} + */ + function inspectValue(node) { + if (node && typeof node === 'object' && 'length' in node) { + // @ts-ignore looks like a list of nodes. + return inspectNodes(node) + } -var bail_1 = bail$1; + // @ts-ignore looks like a single node. + if (node && node.type) { + // @ts-ignore looks like a single node. + return inspectTree(node) + } -function bail$1(err) { - if (err) { - throw err + return inspectNonTree(node) } -} - -var hasOwn = Object.prototype.hasOwnProperty; -var toStr = Object.prototype.toString; -var defineProperty = Object.defineProperty; -var gOPD = Object.getOwnPropertyDescriptor; - -var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; -}; - -var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) { /**/ } - - return typeof key === 'undefined' || hasOwn.call(obj, key); -}; - -// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target -var setProperty = function setProperty(target, options) { - if (defineProperty && options.name === '__proto__') { - defineProperty(target, options.name, { - enumerable: true, - configurable: true, - value: options.newValue, - writable: true - }); - } else { - target[options.name] = options.newValue; - } -}; - -// Return undefined instead of __proto__ if '__proto__' is not an own property -var getProperty = function getProperty(obj, name) { - if (name === '__proto__') { - if (!hasOwn.call(obj, name)) { - return void 0; - } else if (gOPD) { - // In early versions of node, obj['__proto__'] is buggy when obj has - // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. - return gOPD(obj, name).value; - } - } - - return obj[name]; -}; - -var extend$2 = function extend() { - var options, name, src, copy, copyIsArray, clone; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { - target = {}; - } - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = getProperty(target, name); - copy = getProperty(options, name); + /** + * @param {unknown} value + * @returns {string} + */ + function inspectNonTree(value) { + return JSON.stringify(value) + } - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } + /** + * @param {Node[]} nodes + * @returns {string} + */ + function inspectNodes(nodes) { + /** @type {Array.} */ + var result = []; + var index = -1; - // Never move original objects, clone them - setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); + while (++index < nodes.length) { + result.push( + dim((index < nodes.length - 1 ? '├' : '└') + '─' + index) + + ' ' + + indent( + inspectValue(nodes[index]), + (index < nodes.length - 1 ? dim('│') : ' ') + ' ', + true + ) + ); + } - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - setProperty(target, { name: name, newValue: copy }); - } - } - } - } - } + return result.join('\n') + } - // Return the modified object - return target; -}; + /** + * @param {Object.} object + * @returns {string} + */ + function inspectFields(object) { + /** @type {Array.} */ + var result = []; + /** @type {string} */ + var key; + /** @type {unknown} */ + var value; + /** @type {string} */ + var formatted; -var stringify$2 = unistUtilStringifyPosition; + for (key in object) { + /* c8 ignore next 1 */ + if (!own$9.call(object, key)) continue -var vfileMessage = VMessage$1; + value = object[key]; -// Inherit from `Error#`. -function VMessagePrototype() {} -VMessagePrototype.prototype = Error.prototype; -VMessage$1.prototype = new VMessagePrototype(); + if ( + value === undefined || + // Standard keys defined by unist that we format differently. + // + key === 'type' || + key === 'value' || + key === 'children' || + key === 'position' || + // Ignore `name` (from xast) and `tagName` (from `hast`) when string. + (typeof value === 'string' && (key === 'name' || key === 'tagName')) + ) { + continue + } -// Message properties. -var proto = VMessage$1.prototype; + // A single node. + if ( + value && + typeof value === 'object' && + // @ts-ignore looks like a node. + value.type && + key !== 'data' && + key !== 'attributes' && + key !== 'properties' + ) { + // @ts-ignore looks like a node. + formatted = inspectTree(value); + } + // A list of nodes. + else if ( + value && + typeof value === 'object' && + 'length' in value && + value[0] && + value[0].type + ) { + // @ts-ignore looks like a list of nodes. + formatted = '\n' + inspectNodes(value); + } else { + formatted = inspectNonTree(value); + } -proto.file = ''; -proto.name = ''; -proto.reason = ''; -proto.message = ''; -proto.stack = ''; -proto.fatal = null; -proto.column = null; -proto.line = null; + result.push( + key + dim(':') + (/\s/.test(formatted.charAt(0)) ? '' : ' ') + formatted + ); + } -// Construct a new VMessage. -// -// Note: We cannot invoke `Error` on the created context, as that adds readonly -// `line` and `column` attributes on Safari 9, thus throwing and failing the -// data. -function VMessage$1(reason, position, origin) { - var parts; - var range; - var location; + return indent( + result.join('\n'), + // @ts-ignore looks like a parent node. + (object.children && object.children.length > 0 ? dim('│') : ' ') + ' ' + ) + } - if (typeof position === 'string') { - origin = position; - position = null; + /** + * @param {Node} node + * @returns {string} + */ + function inspectTree(node) { + var result = [formatNode(node)]; + var fields = inspectFields(node); + // @ts-ignore looks like a parent. + var content = inspectNodes(node.children || []); + if (fields) result.push(fields); + if (content) result.push(content); + return result.join('\n') } - parts = parseOrigin(origin); - range = stringify$2(position) || '1:1'; + /** + * Colored node formatter. + * + * @param {Node} node + * @returns {string} + */ + function formatNode(node) { + var result = [bold(node.type)]; + var kind = node.tagName || node.name; + var position = positions ? stringifyPosition(node.position) : ''; - location = { - start: {line: null, column: null}, - end: {line: null, column: null} - }; + if (typeof kind === 'string') { + result.push('<', kind, '>'); + } - // Node. - if (position && position.position) { - position = position.position; - } + if (node.children) { + // @ts-ignore looks like a parent. + result.push(dim('['), yellow(node.children.length), dim(']')); + } else if (typeof node.value === 'string') { + result.push(' ', green(inspectNonTree(node.value))); + } - if (position) { - // Position. - if (position.start) { - location = position; - position = position.start; - } else { - // Point. - location.start = position; + if (position) { + result.push(' ', dim('('), position, dim(')')); } - } - if (reason.stack) { - this.stack = reason.stack; - reason = reason.message; + return result.join('') } - - this.message = reason; - this.name = range; - this.reason = reason; - this.line = position ? position.line : null; - this.column = position ? position.column : null; - this.location = location; - this.source = parts[0]; - this.ruleId = parts[1]; } -function parseOrigin(origin) { - var result = [null, null]; - var index; +/** + * @param {string} value + * @param {string} indentation + * @param {boolean} [ignoreFirst=false] + * @returns {string} + */ +function indent(value, indentation, ignoreFirst) { + var lines = value.split('\n'); + var index = ignoreFirst ? 0 : -1; - if (typeof origin === 'string') { - index = origin.indexOf(':'); + if (!value) return value - if (index === -1) { - result[1] = origin; - } else { - result[0] = origin.slice(0, index); - result[1] = origin.slice(index + 1); - } + while (++index < lines.length) { + lines[index] = indentation + lines[index]; } - return result + return lines.join('\n') } -var minpath = require$$0__default$2['default']; - -var minproc = process; - -var p = minpath; -var proc$1 = minproc; -var buffer$1 = isBuffer; +/** + * @param {Position} value + * @returns {string} + */ +function stringifyPosition(value) { + /** @type {Position} */ + // @ts-ignore + var position = value || {}; + /** @type {Array.} */ + var result = []; + /** @type {Array.} */ + var positions = []; + /** @type {Array.} */ + var offsets = []; -var core$1 = VFile$1; + point(position.start); + point(position.end); -var own$c = {}.hasOwnProperty; + if (positions.length > 0) result.push(positions.join('-')); + if (offsets.length > 0) result.push(offsets.join('-')); -// Order of setting (least specific to most), we need this because otherwise -// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a -// stem can be set. -var order$3 = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']; + return result.join(', ') -VFile$1.prototype.toString = toString$6; + /** + * @param {Point} value + */ + function point(value) { + if (value) { + positions.push((value.line || 1) + ':' + (value.column || 1)); -// Access full path (`~/index.min.js`). -Object.defineProperty(VFile$1.prototype, 'path', {get: getPath, set: setPath}); + if ('offset' in value) { + offsets.push(String(value.offset || 0)); + } + } + } +} -// Access parent path (`~`). -Object.defineProperty(VFile$1.prototype, 'dirname', { - get: getDirname, - set: setDirname -}); +/** + * Factory to wrap values in ANSI colours. + * + * @param {number} open + * @param {number} close + * @returns {function(string): string} + */ +function ansiColor(open, close) { + return color -// Access basename (`index.min.js`). -Object.defineProperty(VFile$1.prototype, 'basename', { - get: getBasename, - set: setBasename -}); + /** + * @param {string} value + * @returns {string} + */ + function color(value) { + return '\u001B[' + open + 'm' + value + '\u001B[' + close + 'm' + } +} -// Access extname (`.js`). -Object.defineProperty(VFile$1.prototype, 'extname', { - get: getExtname, - set: setExtname -}); +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('./index.js').Context} Context + */ -// Access stem (`index.min`). -Object.defineProperty(VFile$1.prototype, 'stem', {get: getStem, set: setStem}); +const debug$3 = createDebug('unified-engine:file-pipeline:stringify'); -// Construct a new file. -function VFile$1(options) { - var prop; - var index; +/** + * Stringify a tree. + * + * @param {Context} context + * @param {VFile} file + */ +function stringify$1(context, file) { + /** @type {unknown} */ + let value; - if (!options) { - options = {}; - } else if (typeof options === 'string' || buffer$1(options)) { - options = {contents: options}; - } else if ('message' in options && 'messages' in options) { - return options + if (statistics(file).fatal) { + debug$3('Not compiling failed document'); + return } - if (!(this instanceof VFile$1)) { - return new VFile$1(options) + if ( + !context.settings.output && + !context.settings.out && + !context.settings.alwaysStringify + ) { + debug$3('Not compiling document without output settings'); + return } - this.data = {}; - this.messages = []; - this.history = []; - this.cwd = proc$1.cwd(); - - // Set path related properties in the correct order. - index = -1; + debug$3('Compiling `%s`', file.path); - while (++index < order$3.length) { - prop = order$3[index]; + if (context.settings.inspect) { + // Add a `txt` extension if there is a path. + if (file.path) { + file.extname = '.txt'; + } - if (own$c.call(options, prop)) { - this[prop] = options[prop]; + value = + (context.settings.color ? inspectColor : inspectNoColor)(context.tree) + + '\n'; + } else if (context.settings.treeOut) { + // Add a `json` extension to ensure the file is correctly seen as JSON. + // Only add it if there is a path — not if the file is for example stdin. + if (file.path) { + file.extname = '.json'; } + + // Add the line feed to create a valid UNIX file. + value = JSON.stringify(context.tree, null, 2) + '\n'; + } else { + // @ts-expect-error: `tree` is defined if we came this far. + value = context.processor.stringify(context.tree, file); } - // Set non-path related properties. - for (prop in options) { - if (order$3.indexOf(prop) < 0) { - this[prop] = options[prop]; - } + if (value === undefined || value === null) ; else if (typeof value === 'string' || isBuffer(value)) { + // @ts-expect-error: `isBuffer` checks buffer. + file.value = value; + } else { + file.result = value; } -} -function getPath() { - return this.history[this.history.length - 1] + debug$3('Serialized document'); } -function setPath(path) { - assertNonEmpty(path, 'path'); - - if (this.path !== path) { - this.history.push(path); - } -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ -function getDirname() { - return typeof this.path === 'string' ? p.dirname(this.path) : undefined -} +const debug$2 = createDebug('unified-engine:file-pipeline:copy'); -function setDirname(dirname) { - assertPath(this.path, 'dirname'); - this.path = p.join(dirname || '', this.basename); -} +/** + * Move a file. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function copy(context, file, next) { + const output = context.settings.output; + const currentPath = file.path; -function getBasename() { - return typeof this.path === 'string' ? p.basename(this.path) : undefined -} + if (typeof output !== 'string') { + debug$2('Not copying'); + next(); + return + } -function setBasename(basename) { - assertNonEmpty(basename, 'basename'); - assertPart(basename, 'basename'); - this.path = p.join(this.dirname || '', basename); -} + const outpath = path$c.resolve(context.settings.cwd, output); -function getExtname() { - return typeof this.path === 'string' ? p.extname(this.path) : undefined -} + debug$2('Copying `%s`', currentPath); -function setExtname(extname) { - assertPart(extname, 'extname'); - assertPath(this.path, 'extname'); + fs$a.stat(outpath, (error, stats) => { + if (error) { + if ( + error.code !== 'ENOENT' || + output.charAt(output.length - 1) === path$c.sep + ) { + return next( + new Error('Cannot read output directory. Error:\n' + error.message) + ) + } - if (extname) { - if (extname.charCodeAt(0) !== 46 /* `.` */) { - throw new Error('`extname` must start with `.`') + // This is either given an error, or the parent exists which is a directory, + // but we should keep the basename of the given file. + fs$a.stat(path$c.dirname(outpath), (error) => { + if (error) { + next( + new Error('Cannot read parent directory. Error:\n' + error.message) + ); + } else { + done(false); + } + }); + } else { + done(stats.isDirectory()); } + }); - if (extname.indexOf('.', 1) > -1) { - throw new Error('`extname` cannot contain multiple dots') + /** + * @param {boolean} directory + */ + function done(directory) { + if (!directory && context.fileSet.expected > 1) { + return next( + new Error('Cannot write multiple files to single output: ' + outpath) + ) } - } - this.path = p.join(this.dirname, this.stem + (extname || '')); -} + file[directory ? 'dirname' : 'path'] = path$c.relative(file.cwd, outpath); -function getStem() { - return typeof this.path === 'string' - ? p.basename(this.path, this.extname) - : undefined -} + debug$2('Copying document from %s to %s', currentPath, file.path); -function setStem(stem) { - assertNonEmpty(stem, 'stem'); - assertPart(stem, 'stem'); - this.path = p.join(this.dirname || '', stem + (this.extname || '')); + next(); + } } -// Get the value of the file. -function toString$6(encoding) { - return (this.contents || '').toString(encoding) -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ -// Assert that `part` is not a path (i.e., does not contain `p.sep`). -function assertPart(part, name) { - if (part && part.indexOf(p.sep) > -1) { - throw new Error( - '`' + name + '` cannot be a path: did not expect `' + p.sep + '`' - ) - } -} +const debug$1 = createDebug('unified-engine:file-pipeline:stdout'); -// Assert that `part` is not empty. -function assertNonEmpty(part, name) { - if (!part) { - throw new Error('`' + name + '` cannot be empty') +/** + * Write a virtual file to `streamOut`. + * Ignored when `output` is given, more than one file was processed, or `out` + * is false. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function stdout(context, file, next) { + if (!file.data.unifiedEngineGiven) { + debug$1('Ignoring programmatically added file'); + next(); + } else if ( + statistics(file).fatal || + context.settings.output || + !context.settings.out + ) { + debug$1('Ignoring writing to `streamOut`'); + next(); + } else { + debug$1('Writing document to `streamOut`'); + context.settings.streamOut.write(file.toString(), next); } } -// Assert `path` exists. -function assertPath(path, name) { - if (!path) { - throw new Error('Setting `' + name + '` requires `path` to be set too') - } -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Context} Context + */ -var VMessage = vfileMessage; -var VFile = core$1; +const debug = createDebug('unified-engine:file-pipeline:file-system'); -var lib$1 = VFile; +/** + * Write a virtual file to the file-system. + * Ignored when `output` is not given. + * + * @param {Context} context + * @param {VFile} file + * @param {Callback} next + */ +function fileSystem(context, file, next) { + if (!context.settings.output) { + debug('Ignoring writing to file-system'); + return next() + } -VFile.prototype.message = message; -VFile.prototype.info = info; -VFile.prototype.fail = fail; + if (!file.data.unifiedEngineGiven) { + debug('Ignoring programmatically added file'); + return next() + } -// Create a message with `reason` at `position`. -// When an error is passed in as `reason`, copies the stack. -function message(reason, position, origin) { - var message = new VMessage(reason, position, origin); + let destinationPath = file.path; - if (this.path) { - message.name = this.path + ':' + message.name; - message.file = this.path; + if (!destinationPath) { + debug('Cannot write file without a `destinationPath`'); + return next(new Error('Cannot write file without an output path')) } - message.fatal = false; + if (statistics(file).fatal) { + debug('Cannot write file with a fatal error'); + return next() + } - this.messages.push(message); + destinationPath = path$c.resolve(context.settings.cwd, destinationPath); + debug('Writing document to `%s`', destinationPath); - return message + file.stored = true; + fs$a.writeFile(destinationPath, file.toString(), next); } -// Fail: creates a vmessage, associates it with the file, and throws it. -function fail() { - var message = this.message.apply(this, arguments); +/** + * @typedef {import('trough').Pipeline} Pipeline + * @typedef {import('vfile').VFile} VFile + * @typedef {import('vfile-message').VFileMessage} VFileMessage + * @typedef {import('unist').Node} Node + * @typedef {import('unified').Processor} Processor + * @typedef {import('../file-set.js').FileSet} FileSet + * @typedef {import('../configuration.js').Configuration} Configuration + * @typedef {import('../index.js').Settings} Settings + */ - message.fatal = true; +// This pipeline ensures each of the pipes always runs: even if the read pipe +// fails, queue and write run. +const filePipeline = trough() + .use(chunk(trough().use(read$1).use(configure$2).use(parse$2).use(transform$2))) + .use(chunk(trough().use(queue))) + .use(chunk(trough().use(stringify$1).use(copy).use(stdout).use(fileSystem))); - throw message -} +/** + * Factory to run a pipe. + * Wraps a pipe to trigger an error on the `file` in `context`, but still call + * `next`. + * + * @param {Pipeline} pipe + */ +function chunk(pipe) { + return run -// Info: creates a vmessage, associates it with the file, and marks the fatality -// as null. -function info() { - var message = this.message.apply(this, arguments); + /** + * Run the bound pipe and handle any errors. + * + * @param {Context} context + * @param {VFile} file + * @param {() => void} next + */ + function run(context, file, next) { + pipe.run(context, file, (/** @type {VFileMessage|null} */ error) => { + const messages = file.messages; - message.fatal = null; + if (error) { + const index = messages.indexOf(error); - return message -} + if (index === -1) { + Object.assign(file.message(error), {fatal: true}); + } else { + messages[index].fatal = true; + } + } -var vfile$1 = lib$1; + next(); + }); + } +} -var bail = bail_1; -var buffer = isBuffer; -var extend$1 = extend$2; -var plain = isPlainObj; -var trough = trough_1; -var vfile = vfile$1; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('trough').Callback} Callback + * @typedef {import('./index.js').Settings} Settings + * @typedef {import('./index.js').Configuration} Configuration + */ -// Expose a frozen processor. -var unified_1 = unified$1().freeze(); +/** + * Transform all files. + * + * @param {Context} context + * @param {Settings} settings + * @param {Callback} next + */ +function transform$1(context, settings, next) { + const fileSet = new FileSet(); -var slice$1 = [].slice; -var own$b = {}.hasOwnProperty; + context.fileSet = fileSet; -// Process pipeline. -var pipeline = trough() - .use(pipelineParse) - .use(pipelineRun) - .use(pipelineStringify); + fileSet.on('add', (/** @type {VFile} */ file) => { + filePipeline.run( + { + configuration: context.configuration, + // Needed `any`s + // type-coverage:ignore-next-line + processor: settings.processor(), + fileSet, + settings + }, + file, + (/** @type {Error|null} */ error) => { + // Does not occur as all failures in `filePipeLine` are failed on each + // file. + // Still, just to ensure things work in the future, we add an extra check. + /* c8 ignore next 4 */ + if (error) { + Object.assign(file.message(error), {fatal: true}); + } -function pipelineParse(p, ctx) { - ctx.tree = p.parse(ctx.file); -} + fileSet.emit('one', file); + } + ); + }); -function pipelineRun(p, ctx, next) { - p.run(ctx.tree, ctx.file, done); + fileSet.on('done', next); - function done(error, tree, file) { - if (error) { - next(error); - } else { - ctx.tree = tree; - ctx.file = file; - next(); + if (context.files.length === 0) { + next(); + } else { + let index = -1; + while (++index < context.files.length) { + fileSet.add(context.files[index]); } } } -function pipelineStringify(p, ctx) { - var result = p.stringify(ctx.tree, ctx.file); +function hasFlag(flag, argv = process$1.argv) { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +} - if (result === undefined || result === null) ; else if (typeof result === 'string' || buffer(result)) { - if ('value' in ctx.file) { - ctx.file.value = result; - } +const {env} = process$1; - ctx.file.contents = result; - } else { - ctx.file.result = result; - } +let flagForceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + flagForceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + flagForceColor = 1; } -// Function to create the first processor. -function unified$1() { - var attachers = []; - var transformers = trough(); - var namespace = {}; - var freezeIndex = -1; - var frozen; - - // Data management. - processor.data = data; +function envForceColor() { + if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + return 1; + } - // Lock. - processor.freeze = freeze; + if (env.FORCE_COLOR === 'false') { + return 0; + } - // Plugins. - processor.attachers = attachers; - processor.use = use; + return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3); + } +} - // API. - processor.parse = parse; - processor.stringify = stringify; - processor.run = run; - processor.runSync = runSync; - processor.process = process; - processor.processSync = processSync; +function translateLevel(level) { + if (level === 0) { + return false; + } - // Expose. - return processor + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} - // Create a new processor based on the processor in the current scope. - function processor() { - var destination = unified$1(); - var index = -1; +function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) { + const noFlagForceColor = envForceColor(); + if (noFlagForceColor !== undefined) { + flagForceColor = noFlagForceColor; + } - while (++index < attachers.length) { - destination.use.apply(null, attachers[index]); - } + const forceColor = sniffFlags ? flagForceColor : noFlagForceColor; - destination.data(extend$1(true, {}, namespace)); + if (forceColor === 0) { + return 0; + } - return destination - } + if (sniffFlags) { + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } - // Freeze: used to signal a processor that has finished configuration. - // - // For example, take unified itself: it’s frozen. - // Plugins should not be added to it. - // Rather, it should be extended, by invoking it, before modifying it. - // - // In essence, always invoke this when exporting a processor. - function freeze() { - var values; - var transformer; + if (hasFlag('color=256')) { + return 2; + } + } - if (frozen) { - return processor - } + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } - while (++freezeIndex < attachers.length) { - values = attachers[freezeIndex]; + const min = forceColor || 0; - if (values[1] === false) { - continue - } + if (env.TERM === 'dumb') { + return min; + } - if (values[1] === true) { - values[1] = undefined; - } + if (process$1.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = require$$0$2.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } - transformer = values[0].apply(processor, values.slice(1)); + return 1; + } - if (typeof transformer === 'function') { - transformers.use(transformer); - } - } + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } - frozen = true; - freezeIndex = Infinity; + return min; + } - return processor - } + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } - // Data management. - // Getter / setter for processor-specific informtion. - function data(key, value) { - if (typeof key === 'string') { - // Set `key`. - if (arguments.length === 2) { - assertUnfrozen('data', frozen); - namespace[key] = value; - return processor - } + if (env.COLORTERM === 'truecolor') { + return 3; + } - // Get `key`. - return (own$b.call(namespace, key) && namespace[key]) || null - } + if ('TERM_PROGRAM' in env) { + const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - // Set space. - if (key) { - assertUnfrozen('data', frozen); - namespace = key; - return processor - } + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } - // Get space. - return namespace - } + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } - // Plugin management. - // - // Pass it: - // * an attacher and options, - // * a preset, - // * a list of presets, attachers, and arguments (list of attachers and - // options). - function use(value) { - var settings; + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } - assertUnfrozen('use', frozen); + if ('COLORTERM' in env) { + return 1; + } - if (value === null || value === undefined) ; else if (typeof value === 'function') { - addPlugin.apply(null, arguments); - } else if (typeof value === 'object') { - if ('length' in value) { - addList(value); - } else { - addPreset(value); - } - } else { - throw new Error('Expected usable value, not `' + value + '`') - } + return min; +} - if (settings) { - namespace.settings = extend$1(namespace.settings || {}, settings); - } +function createSupportsColor(stream, options = {}) { + const level = _supportsColor(stream, { + streamIsTTY: stream && stream.isTTY, + ...options + }); - return processor + return translateLevel(level); +} - function addPreset(result) { - addList(result.plugins); +const supportsColor = { + stdout: createSupportsColor({isTTY: tty$1.isatty(1)}), + stderr: createSupportsColor({isTTY: tty$1.isatty(2)}) +}; - if (result.settings) { - settings = extend$1(settings || {}, result.settings); - } - } +function ansiRegex({onlyFirst = false} = {}) { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); - function add(value) { - if (typeof value === 'function') { - addPlugin(value); - } else if (typeof value === 'object') { - if ('length' in value) { - addPlugin.apply(null, value); - } else { - addPreset(value); - } - } else { - throw new Error('Expected usable value, not `' + value + '`') - } - } + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +} - function addList(plugins) { - var index = -1; +function stripAnsi(string) { + if (typeof string !== 'string') { + throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); + } - if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && 'length' in plugins) { - while (++index < plugins.length) { - add(plugins[index]); - } - } else { - throw new Error('Expected a list of plugins, not `' + plugins + '`') - } - } + return string.replace(ansiRegex(), ''); +} - function addPlugin(plugin, value) { - var entry = find(plugin); +/* eslint-disable yoda */ - if (entry) { - if (plain(entry[1]) && plain(value)) { - value = extend$1(true, entry[1], value); - } +function isFullwidthCodePoint(codePoint) { + if (!Number.isInteger(codePoint)) { + return false; + } - entry[1] = value; - } else { - attachers.push(slice$1.call(arguments)); - } - } - } + // Code points are derived from: + // https://unicode.org/Public/UNIDATA/EastAsianWidth.txt + return codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ); +} - function find(plugin) { - var index = -1; +var emojiRegex = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; - while (++index < attachers.length) { - if (attachers[index][0] === plugin) { - return attachers[index] - } - } - } +function stringWidth(string) { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } - // Parse a file (in string or vfile representation) into a unist node using - // the `Parser` on the processor. - function parse(doc) { - var file = vfile(doc); - var Parser; + string = stripAnsi(string); - freeze(); - Parser = processor.Parser; - assertParser('parse', Parser); + if (string.length === 0) { + return 0; + } - if (newable(Parser, 'parse')) { - return new Parser(String(file), file).parse() - } + string = string.replace(emojiRegex(), ' '); - return Parser(String(file), file) // eslint-disable-line new-cap - } + let width = 0; - // Run transforms on a unist node representation of a file (in string or - // vfile representation), async. - function run(node, file, cb) { - assertNode(node); - freeze(); + for (let index = 0; index < string.length; index++) { + const codePoint = string.codePointAt(index); - if (!cb && typeof file === 'function') { - cb = file; - file = null; - } + // Ignore control characters + if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { + continue; + } - if (!cb) { - return new Promise(executor) - } + // Ignore combining characters + if (codePoint >= 0x300 && codePoint <= 0x36F) { + continue; + } - executor(null, cb); + // Surrogates + if (codePoint > 0xFFFF) { + index++; + } - function executor(resolve, reject) { - transformers.run(node, vfile(file), done); + width += isFullwidthCodePoint(codePoint) ? 2 : 1; + } - function done(error, tree, file) { - tree = tree || node; - if (error) { - reject(error); - } else if (resolve) { - resolve(tree); - } else { - cb(null, tree, file); - } - } - } - } + return width; +} - // Run transforms on a unist node representation of a file (in string or - // vfile representation), sync. - function runSync(node, file) { - var result; - var complete; +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ - run(node, file, done); +/** + * Results cache + */ - assertDone('runSync', 'run', complete); +var res = ''; +var cache; - return result +/** + * Expose `repeat` + */ - function done(error, tree) { - complete = true; - result = tree; - bail(error); - } - } +var repeatString = repeat; - // Stringify a unist node representation of a file (in string or vfile - // representation) into a string using the `Compiler` on the processor. - function stringify(node, doc) { - var file = vfile(doc); - var Compiler; +/** + * Repeat the given `string` the specified `number` + * of times. + * + * **Example:** + * + * ```js + * var repeat = require('repeat-string'); + * repeat('A', 5); + * //=> AAAAA + * ``` + * + * @param {String} `string` The string to repeat + * @param {Number} `number` The number of times to repeat the string + * @return {String} Repeated string + * @api public + */ - freeze(); - Compiler = processor.Compiler; - assertCompiler('stringify', Compiler); - assertNode(node); +function repeat(str, num) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } - if (newable(Compiler, 'compile')) { - return new Compiler(node, file).compile() - } + // cover common, quick use cases + if (num === 1) return str; + if (num === 2) return str + str; - return Compiler(node, file) // eslint-disable-line new-cap + var max = str.length * num; + if (cache !== str || typeof cache === 'undefined') { + cache = str; + res = ''; + } else if (res.length >= max) { + return res.substr(0, max); } - // Parse a file (in string or vfile representation) into a unist node using - // the `Parser` on the processor, then run transforms on that node, and - // compile the resulting node using the `Compiler` on the processor, and - // store that result on the vfile. - function process(doc, cb) { - freeze(); - assertParser('process', processor.Parser); - assertCompiler('process', processor.Compiler); - - if (!cb) { - return new Promise(executor) + while (max > res.length && num > 1) { + if (num & 1) { + res += str; } - executor(null, cb); - - function executor(resolve, reject) { - var file = vfile(doc); - - pipeline.run(processor, {file: file}, done); - - function done(error) { - if (error) { - reject(error); - } else if (resolve) { - resolve(file); - } else { - cb(null, file); - } - } - } + num >>= 1; + str += str; } - // Process the given document (in string or vfile representation), sync. - function processSync(doc) { - var file; - var complete; - - freeze(); - assertParser('processSync', processor.Parser); - assertCompiler('processSync', processor.Compiler); - file = vfile(doc); - - process(file, done); + res += str; + res = res.substr(0, max); + return res; +} - assertDone('processSync', 'process', complete); +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('vfile-message').VFileMessage} VFileMessage + */ - return file +var severities = {true: 2, false: 1, null: 0, undefined: 0}; - function done(error) { - complete = true; - bail(error); - } - } +/** + * @template {VFile} F + * @param {F} file + * @returns {F} + */ +function sort(file) { + file.messages.sort(comparator); + return file } -// Check if `value` is a constructor. -function newable(value, name) { +/** + * @param {VFileMessage} a + * @param {VFileMessage} b + * @returns {number} + */ +function comparator(a, b) { return ( - typeof value === 'function' && - value.prototype && - // A function with keys in its prototype is probably a constructor. - // Classes’ prototype methods are not enumerable, so we check if some value - // exists in the prototype. - (keys(value.prototype) || name in value.prototype) + check$1(a, b, 'line') || + check$1(a, b, 'column') || + severities[b.fatal] - severities[a.fatal] || + compare(a, b, 'source') || + compare(a, b, 'ruleId') || + compare(a, b, 'reason') || + 0 ) } -// Check if `value` is an object with keys. -function keys(value) { - var key; - for (key in value) { - return true - } - - return false -} - -// Assert a parser is available. -function assertParser(name, Parser) { - if (typeof Parser !== 'function') { - throw new Error('Cannot `' + name + '` without `Parser`') - } +/** + * @param {VFileMessage} a + * @param {VFileMessage} b + * @param {string} property + * @returns {number} + */ +function check$1(a, b, property) { + return (a[property] || 0) - (b[property] || 0) } -// Assert a compiler is available. -function assertCompiler(name, Compiler) { - if (typeof Compiler !== 'function') { - throw new Error('Cannot `' + name + '` without `Compiler`') - } +/** + * @param {VFileMessage} a + * @param {VFileMessage} b + * @param {string} property + * @returns {number} + */ +function compare(a, b, property) { + return String(a[property] || '').localeCompare(b[property] || '') } -// Assert the processor is not frozen. -function assertUnfrozen(name, frozen) { - if (frozen) { - throw new Error( - 'Cannot invoke `' + - name + - '` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.' - ) - } -} +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('vfile-message').VFileMessage} VFileMessage + * @typedef {import('vfile-statistics').Statistics} Statistics + * + * @typedef Options + * @property {boolean} [color] + * @property {boolean} [silent=false] + * @property {boolean} [quiet=false] + * @property {boolean} [verbose=false] + * @property {string} [defaultName=''] + * + * @typedef _Row + * @property {string} place + * @property {string} label + * @property {string} reason + * @property {string} ruleId + * @property {string} source + * + * @typedef _FileRow + * @property {'file'} type + * @property {VFile} file + * @property {Statistics} stats + * + * @typedef {{[x: string]: number}} _Sizes + * + * @typedef _Info + * @property {Array.<_FileRow|_Row>} rows + * @property {Statistics} stats + * @property {_Sizes} sizes + */ -// Assert `node` is a unist node. -function assertNode(node) { - if (!node || typeof node.type !== 'string') { - throw new Error('Expected node, got `' + node + '`') - } -} +var own$8 = {}.hasOwnProperty; -// Assert that `complete` is `true`. -function assertDone(name, asyncName, complete) { - if (!complete) { - throw new Error( - '`' + name + '` finished async. Use `' + asyncName + '` instead' - ) - } -} +// @ts-ignore Types are incorrect. +var supported = supportsColor.stderr.hasBasic; -var mdastUtilToString$1 = toString$5; +// `log-symbols` without chalk, ignored for Windows: +/* c8 ignore next 4 */ +var chars = + process.platform === 'win32' + ? {error: '×', warning: '‼'} + : {error: '✖', warning: '⚠'}; -// Get the text content of a node. -// Prefer the node’s plain-text fields, otherwise serialize its children, -// and if the given value is an array, serialize the nodes in it. -function toString$5(node) { - return ( - (node && - (node.value || - node.alt || - node.title || - ('children' in node && all$2(node.children)) || - ('length' in node && all$2(node)))) || - '' - ) -} +var labels = {true: 'error', false: 'warning', null: 'info', undefined: 'info'}; -function all$2(values) { - var result = []; - var index = -1; +/** + * Report a file’s messages. + * + * @param {Error|VFile|Array.} [files] + * @param {Options} [options] + * @returns {string} + */ +function reporter$1(files, options = {}) { + /** @type {boolean} */ + var one; - while (++index < values.length) { - result[index] = toString$5(values[index]); + if (!files) { + return '' } - return result.join('') -} - -var assign$5 = Object.assign; - -var assign_1 = assign$5; + // Error. + if ('name' in files && 'message' in files) { + return String(files.stack || files) + } -var own$a = {}.hasOwnProperty; + // One file. + if (!Array.isArray(files)) { + one = true; + files = [files]; + } -var hasOwnProperty$2 = own$a; + return format(transform(files, options), one, options) +} -function normalizeIdentifier$4(value) { - return ( - value // Collapse Markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') // Trim. - .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no object method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} +/** + * @param {Array.} files + * @param {Options} options + * @returns {_Info} + */ +function transform(files, options) { + var index = -1; + /** @type {Array.<_FileRow|_Row>} */ + var rows = []; + /** @type {Array.} */ + var all = []; + /** @type {number} */ + var offset; + /** @type {_Sizes} */ + var sizes = {}; + /** @type {Array.} */ + var messages; + /** @type {VFileMessage} */ + var message; + /** @type {_Row} */ + var row; + /** @type {Array.<_Row>} */ + var messageRows; + /** @type {string} */ + var key; + + while (++index < files.length) { + // @ts-ignore it works fine. + messages = sort({messages: [...files[index].messages]}).messages; + messageRows = []; + offset = -1; -var normalizeIdentifier_1 = normalizeIdentifier$4; + while (++offset < messages.length) { + message = messages[offset]; -var fromCharCode$4 = String.fromCharCode; + if (!options.silent || message.fatal) { + all.push(message); -var fromCharCode_1 = fromCharCode$4; + row = { + place: stringifyPosition$1( + message.position.end.line && message.position.end.column + ? message.position + : message.position.start + ), + label: labels[message.fatal], + reason: + (message.stack || message.message) + + (options.verbose && message.note ? '\n' + message.note : ''), + ruleId: message.ruleId || '', + source: message.source || '' + }; -var fromCharCode$3 = fromCharCode_1; + for (key in row) { + if (own$8.call(row, key)) { + sizes[key] = Math.max(size$1(row[key]), sizes[key] || 0); + } + } -function safeFromInt$1(value, base) { - var code = parseInt(value, base); + messageRows.push(row); + } + } - if ( - // C0 except for HT, LF, FF, CR, space - code < 9 || - code === 11 || - (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls. - (code > 126 && code < 160) || // Lone high surrogates and low surrogates. - (code > 55295 && code < 57344) || // Noncharacters. - (code > 64975 && code < 65008) || - (code & 65535) === 65535 || - (code & 65535) === 65534 || // Out of range - code > 1114111 - ) { - return '\uFFFD' + if ((!options.quiet && !options.silent) || messageRows.length > 0) { + rows.push( + {type: 'file', file: files[index], stats: statistics(messages)}, + ...messageRows + ); + } } - return fromCharCode$3(code) + return {rows, stats: statistics(all), sizes} } -var safeFromInt_1 = safeFromInt$1; +/** + * @param {_Info} map + * @param {boolean} one + * @param {Options} options + */ +function format(map, one, options) { + /** @type {boolean} */ + var enabled = + options.color === undefined || options.color === null + ? supported + : options.color; + /** @type {Array.} */ + var lines = []; + var index = -1; + /** @type {Statistics} */ + var stats; + /** @type {_FileRow|_Row} */ + var row; + /** @type {string} */ + var line; + /** @type {string} */ + var reason; + /** @type {string} */ + var rest; + /** @type {RegExpMatchArray} */ + var match; -var content$3 = {}; + while (++index < map.rows.length) { + row = map.rows[index]; -function markdownLineEnding$k(code) { - return code < -2 -} + if ('type' in row) { + stats = row.stats; + line = row.file.history[0] || options.defaultName || ''; -var markdownLineEnding_1 = markdownLineEnding$k; + line = + one && !options.defaultName && !row.file.history[0] + ? '' + : (enabled + ? '\u001B[4m' /* Underline. */ + + (stats.fatal + ? '\u001B[31m' /* Red. */ + : stats.total + ? '\u001B[33m' /* Yellow. */ + : '\u001B[32m') /* Green. */ + + line + + '\u001B[39m\u001B[24m' + : line) + + (row.file.stored && row.file.path !== row.file.history[0] + ? ' > ' + row.file.path + : ''); -function markdownSpace$a(code) { - return code === -2 || code === -1 || code === 32 -} + if (!stats.total) { + line = + (line ? line + ': ' : '') + + (row.file.stored + ? enabled + ? '\u001B[33mwritten\u001B[39m' /* Yellow. */ + : 'written' + : 'no issues found'); + } -var markdownSpace_1 = markdownSpace$a; + if (line) { + if (index && !('type' in map.rows[index - 1])) { + lines.push(''); + } -var markdownSpace$9 = markdownSpace_1; + lines.push(line); + } + } else { + reason = row.reason; + match = /\r?\n|\r/.exec(reason); -function spaceFactory(effects, ok, type, max) { - var limit = max ? max - 1 : Infinity; - var size = 0; - return start + if (match) { + rest = reason.slice(match.index); + reason = reason.slice(0, match.index); + } else { + rest = ''; + } - function start(code) { - if (markdownSpace$9(code)) { - effects.enter(type); - return prefix(code) + lines.push( + ( + ' ' + + repeatString(' ', map.sizes.place - size$1(row.place)) + + row.place + + ' ' + + (enabled + ? (row.label === 'error' + ? '\u001B[31m' /* Red. */ + : '\u001B[33m') /* Yellow. */ + + row.label + + '\u001B[39m' + : row.label) + + repeatString(' ', map.sizes.label - size$1(row.label)) + + ' ' + + reason + + repeatString(' ', map.sizes.reason - size$1(reason)) + + ' ' + + row.ruleId + + repeatString(' ', map.sizes.ruleId - size$1(row.ruleId)) + + ' ' + + (row.source || '') + ).replace(/ +$/, '') + rest + ); } - - return ok(code) } - function prefix(code) { - if (markdownSpace$9(code) && size++ < limit) { - effects.consume(code); - return prefix - } + stats = map.stats; - effects.exit(type); - return ok(code) - } -} + if (stats.fatal || stats.warn) { + line = ''; -var factorySpace$i = spaceFactory; + if (stats.fatal) { + line = + (enabled + ? '\u001B[31m' /* Red. */ + chars.error + '\u001B[39m' + : chars.error) + + ' ' + + stats.fatal + + ' ' + + (labels.true + (stats.fatal === 1 ? '' : 's')); + } -Object.defineProperty(content$3, '__esModule', {value: true}); + if (stats.warn) { + line = + (line ? line + ', ' : '') + + (enabled + ? '\u001B[33m' /* Yellow. */ + chars.warning + '\u001B[39m' + : chars.warning) + + ' ' + + stats.warn + + ' ' + + (labels.false + (stats.warn === 1 ? '' : 's')); + } -var markdownLineEnding$j = markdownLineEnding_1; -var factorySpace$h = factorySpace$i; + if (stats.total !== stats.fatal && stats.total !== stats.warn) { + line = stats.total + ' messages (' + line + ')'; + } -var tokenize$2 = initializeContent; + lines.push('', line); + } -function initializeContent(effects) { - var contentStart = effects.attempt( - this.parser.constructs.contentInitial, - afterContentStartConstruct, - paragraphInitial - ); - var previous; - return contentStart + return lines.join('\n') +} - function afterContentStartConstruct(code) { - if (code === null) { - effects.consume(code); - return - } +/** + * Get the length of `value`, ignoring ANSI sequences. + * + * @param {string} value + * @returns {number} + */ +function size$1(value) { + var match = /\r?\n|\r/.exec(value); + return stringWidth(match ? value.slice(0, match.index) : value) +} - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$h(effects, contentStart, 'linePrefix') - } +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('../index.js').VFileReporter} VFileReporter + * @typedef {import('./index.js').Settings} Settings + * @typedef {import('./index.js').Configuration} Configuration + */ - function paragraphInitial(code) { - effects.enter('paragraph'); - return lineStart(code) - } +/** + * @typedef Context + * @property {Array.} files + * @property {Configuration} [configuration] + */ - function lineStart(code) { - var token = effects.enter('chunkText', { - contentType: 'text', - previous: previous - }); +/** + * @param {Context} context + * @param {Settings} settings + */ +async function log(context, settings) { + /** @type {VFileReporter} */ + let func = reporter$1; - if (previous) { - previous.next = token; + if (typeof settings.reporter === 'string') { + try { + // @ts-expect-error: Assume loaded value is a vfile reporter. + func = await loadPlugin(settings.reporter, { + cwd: settings.cwd, + prefix: 'vfile-reporter' + }); + } catch { + throw new Error('Could not find reporter `' + settings.reporter + '`') } - - previous = token; - return data(code) + } else if (settings.reporter) { + func = settings.reporter; } - function data(code) { - if (code === null) { - effects.exit('chunkText'); - effects.exit('paragraph'); - effects.consume(code); - return - } + let diagnostics = func( + context.files.filter((file) => file.data.unifiedEngineGiven), + Object.assign({}, settings.reporterOptions, { + quiet: settings.quiet, + silent: settings.silent, + color: settings.color + }) + ); - if (markdownLineEnding$j(code)) { - effects.consume(code); - effects.exit('chunkText'); - return lineStart - } // Data. + if (diagnostics) { + if (diagnostics.charAt(diagnostics.length - 1) !== '\n') { + diagnostics += '\n'; + } - effects.consume(code); - return data + return new Promise((resolve) => { + settings.streamError.write(diagnostics, resolve); + }) } } -content$3.tokenize = tokenize$2; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('../configuration.js').Configuration} Configuration + * @typedef {import('../index.js').Settings} Settings + */ -var document$3 = {}; +const fileSetPipeline = trough() + .use(configure$3) + .use(fileSystem$1) + .use(stdin) + .use(transform$1) + .use(log); -var markdownLineEnding$i = markdownLineEnding_1; -var factorySpace$g = factorySpace$i; +/** + * @typedef {import('vfile').VFile} VFile + * @typedef {import('unified').Processor} Processor + * @typedef {import('./file-set.js').FileSet} FileSet + * @typedef {import('./file-set.js').Completer} Completer + * @typedef {import('./ignore.js').ResolveFrom} ResolveFrom + * @typedef {import('./configuration.js').ConfigTransform} ConfigTransform + * @typedef {import('./configuration.js').Preset} Preset + * + * @typedef VFileReporterFields + * @property {boolean} [color] + * @property {boolean} [quiet] + * @property {boolean} [silent] + * + * @typedef {{[key: string]: unknown} & VFileReporterFields} VFileReporterOptions + * + * @callback VFileReporter + * @param {VFile[]} files + * @param {VFileReporterOptions} options + * @returns {string} + * + * @typedef Settings + * @property {Options['processor']} processor + * @property {Exclude} cwd + * @property {Exclude} files + * @property {Exclude} extensions + * @property {Exclude} streamIn + * @property {Options['filePath']} filePath + * @property {Exclude} streamOut + * @property {Exclude} streamError + * @property {Options['out']} out + * @property {Options['output']} output + * @property {Options['alwaysStringify']} alwaysStringify + * @property {Options['tree']} tree + * @property {Options['treeIn']} treeIn + * @property {Options['treeOut']} treeOut + * @property {Options['inspect']} inspect + * @property {Options['rcName']} rcName + * @property {Options['packageField']} packageField + * @property {Options['detectConfig']} detectConfig + * @property {Options['rcPath']} rcPath + * @property {Exclude} settings + * @property {Options['ignoreName']} ignoreName + * @property {Options['detectIgnore']} detectIgnore + * @property {Options['ignorePath']} ignorePath + * @property {Options['ignorePathResolveFrom']} ignorePathResolveFrom + * @property {Exclude} ignorePatterns + * @property {Options['silentlyIgnore']} silentlyIgnore + * @property {Options['plugins']} plugins + * @property {Options['pluginPrefix']} pluginPrefix + * @property {Options['configTransform']} configTransform + * @property {Options['defaultConfig']} defaultConfig + * @property {Options['reporter']} reporter + * @property {Options['reporterOptions']} reporterOptions + * @property {Options['color']} color + * @property {Options['silent']} silent + * @property {Options['quiet']} quiet + * @property {Options['frail']} frail + * + * @typedef Options + * Options for unified engine + * @property {() => Processor} processor + * Unified processor to transform files + * @property {string} [cwd] + * Directory to search files in, load plugins from, and more. + * Defaults to `process.cwd()`. + * @property {Array} [files] + * Paths or globs to files and directories, or virtual files, to process. + * @property {string[]} [extensions] + * If `files` matches directories, include `files` with `extensions` + * @property {NodeJS.ReadableStream} [streamIn] + * Stream to read from if no files are found or given. + * Defaults to `process.stdin`. + * @property {string} [filePath] + * File path to process the given file on `streamIn` as. + * @property {NodeJS.WritableStream} [streamOut] + * Stream to write processed files to. + * Defaults to `process.stdout`. + * @property {NodeJS.WritableStream} [streamError] + * Stream to write the report (if any) to. + * Defaults to `process.stderr`. + * @property {boolean} [out=false] + * Whether to write the processed file to `streamOut` + * @property {boolean|string} [output=false] + * Whether to write successfully processed files, and where to. + * + * * When `true`, overwrites the given files + * * When `false`, does not write to the file system + * * When pointing to an existing directory, files are written to that + * directory and keep their original basenames + * * When the parent directory of the given path exists and one file is + * processed, the file is written to the given path + * @property {boolean} [alwaysStringify=false] + * Whether to always serialize successfully processed files. + * @property {boolean} [tree=false] + * Whether to treat both input and output as a syntax tree. + * @property {boolean} [treeIn] + * Whether to treat input as a syntax tree. + * Defaults to `options.tree`. + * @property {boolean} [treeOut] + * Whether to treat output as a syntax tree. + * Defaults to `options.tree`. + * @property {boolean} [inspect=false] + * Whether to output a formatted syntax tree. + * @property {string} [rcName] + * Name of configuration files to load. + * @property {string} [packageField] + * Property at which configuration can be found in `package.json` files + * @property {boolean} [detectConfig] + * Whether to search for configuration files. + * Defaults to `true` if `rcName` or `packageField` are given + * @property {string} [rcPath] + * Filepath to a configuration file to load. + * @property {Preset['settings']} [settings] + * Configuration for the parser and compiler of the processor. + * @property {string} [ignoreName] + * Name of ignore files to load. + * @property {boolean} [detectIgnore] + * Whether to search for ignore files. + * Defaults to `true` if `ignoreName` is given. + * @property {string} [ignorePath] + * Filepath to an ignore file to load. + * @property {ResolveFrom} [ignorePathResolveFrom] + * Resolve patterns in `ignorePath` from the current working + * directory (`'cwd'`) or the ignore file’s directory (`'dir'`, default). + * @property {string[]} [ignorePatterns] + * Patterns to ignore in addition to ignore files + * @property {boolean} [silentlyIgnore=false] + * Skip given files if they are ignored. + * @property {Preset['plugins']} [plugins] + * Plugins to use. + * @property {string} [pluginPrefix] + * Prefix to use when searching for plugins + * @property {ConfigTransform} [configTransform] + * Transform config files from a different schema. + * @property {Preset} [defaultConfig] + * Default configuration to use if no config file is given or found. + * @property {VFileReporter|string} [reporter] + * Reporter to use + * Defaults to `vfile-reporter` + * @property {VFileReporterOptions} [reporterOptions] + * Config to pass to the used reporter. + * @property {VFileReporterOptions['color']} [color=false] + * Whether to report with ANSI color sequences. + * @property {VFileReporterOptions['silent']} [silent=false] + * Report only fatal errors + * @property {VFileReporterOptions['quiet']} [quiet=false] + * Do not report successful files + * @property {boolean} [frail=false] + * Call back with an unsuccessful (`1`) code on warnings as well as errors + * + * @typedef Context + * Processing context. + * @property {VFile[]} [files] + * Processed files. + * @property {FileSet} [fileSet] + * Internally used information + * + * @callback Callback + * Callback called when processing according to options is complete. + * Invoked with either a fatal error if processing went horribly wrong + * (probably due to incorrect configuration), or a status code and the + * processing context. + * @param {Error|null} error + * @param {0|1} [status] + * @param {Context} [context] + * @returns {void} + */ -var partialBlankLine$4 = { - tokenize: tokenizePartialBlankLine, - partial: true -}; +/** + * Run the file set pipeline once. + * `callback` is called with a fatal error, or with a status code (`0` on + * success, `1` on failure). + * + * @param {Options} options + * @param {Callback} callback + */ +function engine(options, callback) { + /** @type {Settings} */ + const settings = {}; + /** @type {NodeJS.ReadStream} */ + // @ts-expect-error: `PassThrough` sure is readable. + let stdin = new PassThrough(); -function tokenizePartialBlankLine(effects, ok, nok) { - return factorySpace$g(effects, afterWhitespace, 'linePrefix') + try { + stdin = process$2.stdin; + // Obscure bug in Node (seen on Windows). + // See: , + // . + /* c8 ignore next 1 */ + } catch {} - function afterWhitespace(code) { - return code === null || markdownLineEnding$i(code) ? ok(code) : nok(code) + if (!callback) { + throw new Error('Missing `callback`') } -} - -var partialBlankLine_1 = partialBlankLine$4; -Object.defineProperty(document$3, '__esModule', {value: true}); + // Needed `any`s + // type-coverage:ignore-next-line + if (!options || !options.processor) { + return next(new Error('Missing `processor`')) + } -var markdownLineEnding$h = markdownLineEnding_1; -var factorySpace$f = factorySpace$i; -var partialBlankLine$3 = partialBlankLine_1; + // Processor. + // Needed `any`s + // type-coverage:ignore-next-line + settings.processor = options.processor; -var tokenize$1 = initializeDocument; -var containerConstruct = { - tokenize: tokenizeContainer -}; -var lazyFlowConstruct = { - tokenize: tokenizeLazyFlow -}; + // Path to run as. + settings.cwd = options.cwd || process$2.cwd(); -function initializeDocument(effects) { - var self = this; - var stack = []; - var continued = 0; - var inspectConstruct = { - tokenize: tokenizeInspect, - partial: true - }; - var inspectResult; - var childFlow; - var childToken; - return start + // Input. + settings.files = options.files || []; + settings.extensions = (options.extensions || []).map((ext) => + ext.charAt(0) === '.' ? ext : '.' + ext + ); - function start(code) { - if (continued < stack.length) { - self.containerState = stack[continued][1]; - return effects.attempt( - stack[continued][0].continuation, - documentContinue, - documentContinued - )(code) - } + settings.filePath = options.filePath; + settings.streamIn = options.streamIn || stdin; - return documentContinued(code) - } + // Output. + settings.streamOut = options.streamOut || process$2.stdout; + settings.streamError = options.streamError || process$2.stderr; + settings.alwaysStringify = options.alwaysStringify; + settings.output = options.output; + settings.out = options.out; - function documentContinue(code) { - continued++; - return start(code) + // Null overwrites config settings, `undefined` does not. + if (settings.output === null || settings.output === undefined) { + settings.output = undefined; } - function documentContinued(code) { - // If we’re in a concrete construct (such as when expecting another line of - // HTML, or we resulted in lazy content), we can immediately start flow. - if (inspectResult && inspectResult.flowContinue) { - return flowStart(code) - } - - self.interrupt = - childFlow && - childFlow.currentConstruct && - childFlow.currentConstruct.interruptible; - self.containerState = {}; - return effects.attempt( - containerConstruct, - containerContinue, - flowStart - )(code) + if (settings.output && settings.out) { + return next(new Error('Cannot accept both `output` and `out`')) } - function containerContinue(code) { - stack.push([self.currentConstruct, self.containerState]); - self.containerState = undefined; - return documentContinued(code) - } + // Process phase management. + const tree = options.tree || false; - function flowStart(code) { - if (code === null) { - exitContainers(0, true); - effects.consume(code); - return - } + settings.treeIn = options.treeIn; + settings.treeOut = options.treeOut; + settings.inspect = options.inspect; - childFlow = childFlow || self.parser.flow(self.now()); - effects.enter('chunkFlow', { - contentType: 'flow', - previous: childToken, - _tokenizer: childFlow - }); - return flowContinue(code) + if (settings.treeIn === null || settings.treeIn === undefined) { + settings.treeIn = tree; } - function flowContinue(code) { - if (code === null) { - continueFlow(effects.exit('chunkFlow')); - return flowStart(code) - } - - if (markdownLineEnding$h(code)) { - effects.consume(code); - continueFlow(effects.exit('chunkFlow')); - return effects.check(inspectConstruct, documentAfterPeek) - } - - effects.consume(code); - return flowContinue + if (settings.treeOut === null || settings.treeOut === undefined) { + settings.treeOut = tree; } - function documentAfterPeek(code) { - exitContainers( - inspectResult.continued, - inspectResult && inspectResult.flowEnd - ); - continued = 0; - return start(code) - } + // Configuration. + const detectConfig = options.detectConfig; + const hasConfig = Boolean(options.rcName || options.packageField); - function continueFlow(token) { - if (childToken) childToken.next = token; - childToken = token; - childFlow.lazy = inspectResult && inspectResult.lazy; - childFlow.defineSkip(token.start); - childFlow.write(self.sliceStream(token)); + if (detectConfig && !hasConfig) { + return next( + new Error('Missing `rcName` or `packageField` with `detectConfig`') + ) } - function exitContainers(size, end) { - var index = stack.length; // Close the flow. + settings.detectConfig = + detectConfig === null || detectConfig === undefined + ? hasConfig + : detectConfig; + settings.rcName = options.rcName; + settings.rcPath = options.rcPath; + settings.packageField = options.packageField; + settings.settings = options.settings || {}; + settings.configTransform = options.configTransform; + settings.defaultConfig = options.defaultConfig; - if (childFlow && end) { - childFlow.write([null]); - childToken = childFlow = undefined; - } // Exit open containers. + // Ignore. + const detectIgnore = options.detectIgnore; + const hasIgnore = Boolean(options.ignoreName); - while (index-- > size) { - self.containerState = stack[index][1]; - stack[index][0].exit.call(self, effects); - } + settings.detectIgnore = + detectIgnore === null || detectIgnore === undefined + ? hasIgnore + : detectIgnore; + settings.ignoreName = options.ignoreName; + settings.ignorePath = options.ignorePath; + settings.ignorePathResolveFrom = options.ignorePathResolveFrom || 'dir'; + settings.ignorePatterns = options.ignorePatterns || []; + settings.silentlyIgnore = Boolean(options.silentlyIgnore); - stack.length = size; + if (detectIgnore && !hasIgnore) { + return next(new Error('Missing `ignoreName` with `detectIgnore`')) } - function tokenizeInspect(effects, ok) { - var subcontinued = 0; - inspectResult = {}; - return inspectStart - - function inspectStart(code) { - if (subcontinued < stack.length) { - self.containerState = stack[subcontinued][1]; - return effects.attempt( - stack[subcontinued][0].continuation, - inspectContinue, - inspectLess - )(code) - } // If we’re continued but in a concrete flow, we can’t have more - // containers. - - if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { - inspectResult.flowContinue = true; - return inspectDone(code) - } - - self.interrupt = - childFlow.currentConstruct && childFlow.currentConstruct.interruptible; - self.containerState = {}; - return effects.attempt( - containerConstruct, - inspectFlowEnd, - inspectDone - )(code) - } - - function inspectContinue(code) { - subcontinued++; - return self.containerState._closeFlow - ? inspectFlowEnd(code) - : inspectStart(code) - } - - function inspectLess(code) { - if (childFlow.currentConstruct && childFlow.currentConstruct.lazy) { - // Maybe another container? - self.containerState = {}; - return effects.attempt( - containerConstruct, - inspectFlowEnd, // Maybe flow, or a blank line? - effects.attempt( - lazyFlowConstruct, - inspectFlowEnd, - effects.check(partialBlankLine$3, inspectFlowEnd, inspectLazy) - ) - )(code) - } // Otherwise we’re interrupting. + // Plugins. + settings.pluginPrefix = options.pluginPrefix; + settings.plugins = options.plugins || []; - return inspectFlowEnd(code) - } + // Reporting. + settings.reporter = options.reporter; + settings.reporterOptions = options.reporterOptions; + settings.color = options.color || false; + settings.silent = options.silent; + settings.quiet = options.quiet; + settings.frail = options.frail; - function inspectLazy(code) { - // Act as if all containers are continued. - subcontinued = stack.length; - inspectResult.lazy = true; - inspectResult.flowContinue = true; - return inspectDone(code) - } // We’re done with flow if we have more containers, or an interruption. + // Process. + fileSetPipeline.run({files: options.files || []}, settings, next); - function inspectFlowEnd(code) { - inspectResult.flowEnd = true; - return inspectDone(code) - } + /** + * @param {Error|null} error + * @param {Context} [context] + */ + function next(error, context) { + const stats = statistics((context || {}).files); + const failed = Boolean( + settings.frail ? stats.fatal || stats.warn : stats.fatal + ); - function inspectDone(code) { - inspectResult.continued = subcontinued; - self.interrupt = self.containerState = undefined; - return ok(code) + if (error) { + callback(error); + } else { + callback(null, failed ? 1 : 0, context); } } } -function tokenizeContainer(effects, ok, nok) { - return factorySpace$f( - effects, - effects.attempt(this.parser.constructs.document, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 - ) -} +var textTable = function (rows_, opts) { + if (!opts) opts = {}; + var hsep = opts.hsep === undefined ? ' ' : opts.hsep; + var align = opts.align || []; + var stringLength = opts.stringLength + || function (s) { return String(s).length; } + ; + + var dotsizes = reduce(rows_, function (acc, row) { + forEach(row, function (c, ix) { + var n = dotindex(c); + if (!acc[ix] || n > acc[ix]) acc[ix] = n; + }); + return acc; + }, []); + + var rows = map$2(rows_, function (row) { + return map$2(row, function (c_, ix) { + var c = String(c_); + if (align[ix] === '.') { + var index = dotindex(c); + var size = dotsizes[ix] + (/\./.test(c) ? 1 : 2) + - (stringLength(c) - index) + ; + return c + Array(size).join(' '); + } + else return c; + }); + }); + + var sizes = reduce(rows, function (acc, row) { + forEach(row, function (c, ix) { + var n = stringLength(c); + if (!acc[ix] || n > acc[ix]) acc[ix] = n; + }); + return acc; + }, []); + + return map$2(rows, function (row) { + return map$2(row, function (c, ix) { + var n = (sizes[ix] - stringLength(c)) || 0; + var s = Array(Math.max(n + 1, 1)).join(' '); + if (align[ix] === 'r' || align[ix] === '.') { + return s + c; + } + if (align[ix] === 'c') { + return Array(Math.ceil(n / 2 + 1)).join(' ') + + c + Array(Math.floor(n / 2 + 1)).join(' ') + ; + } + + return c + s; + }).join(hsep).replace(/\s+$/, ''); + }).join('\n'); +}; -function tokenizeLazyFlow(effects, ok, nok) { - return factorySpace$f( - effects, - effects.lazy(this.parser.constructs.flow, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 - ) +function dotindex (c) { + var m = /\.[^.]*$/.exec(c); + return m ? m.index + 1 : c.length; } -document$3.tokenize = tokenize$1; - -var flow$7 = {}; - -// Counts tabs based on their expanded size, and CR+LF as one character. - -function sizeChunks$2(chunks) { - var index = -1; - var size = 0; - - while (++index < chunks.length) { - size += typeof chunks[index] === 'string' ? chunks[index].length : 1; - } - - return size +function reduce (xs, f, init) { + if (xs.reduce) return xs.reduce(f, init); + var i = 0; + var acc = arguments.length >= 3 ? init : xs[i++]; + for (; i < xs.length; i++) { + f(acc, xs[i], i); + } + return acc; } -var sizeChunks_1 = sizeChunks$2; - -var sizeChunks$1 = sizeChunks_1; +function forEach (xs, f) { + if (xs.forEach) return xs.forEach(f); + for (var i = 0; i < xs.length; i++) { + f.call(xs, xs[i], i); + } +} -function prefixSize$4(events, type) { - var tail = events[events.length - 1]; - if (!tail || tail[1].type !== type) return 0 - return sizeChunks$1(tail[2].sliceStream(tail[1])) +function map$2 (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f.call(xs, xs[i], i)); + } + return res; } -var prefixSize_1 = prefixSize$4; +var camelcase$1 = {exports: {}}; -var splice$2 = [].splice; +const preserveCamelCase = (string, locale) => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; -var splice_1 = splice$2; + for (let i = 0; i < string.length; i++) { + const character = string[i]; -var splice$1 = splice_1; + if (isLastCharLower && /[\p{Lu}]/u.test(character)) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && /[\p{Ll}]/u.test(character)) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = character.toLocaleLowerCase(locale) === character && character.toLocaleUpperCase(locale) !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = character.toLocaleUpperCase(locale) === character && character.toLocaleLowerCase(locale) !== character; + } + } -// causes a stack overflow in V8 when trying to insert 100k items for instance. + return string; +}; -function chunkedSplice$8(list, start, remove, items) { - var end = list.length; - var chunkStart = 0; - var parameters; // Make start between zero and `end` (included). +const preserveConsecutiveUppercase = input => { + return input.replace(/^[\p{Lu}](?![\p{Lu}])/gu, m1 => m1.toLowerCase()); +}; - if (start < 0) { - start = -start > end ? 0 : end + start; - } else { - start = start > end ? end : start; - } +const postProcess = (input, options) => { + return input.replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => p1.toLocaleUpperCase(options.locale)) + .replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, m => m.toLocaleUpperCase(options.locale)); +}; - remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items. +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } - if (items.length < 10000) { - parameters = Array.from(items); - parameters.unshift(start, remove); - splice$1.apply(list, parameters); - } else { - // Delete `remove` items starting from `start` - if (remove) splice$1.apply(list, [start, remove]); // Insert the items in chunks to not cause stack overflows. + options = { + pascalCase: false, + preserveConsecutiveUppercase: false, + ...options + }; - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000); - parameters.unshift(start, 0); - splice$1.apply(list, parameters); - chunkStart += 10000; - start += 10000; - } - } -} + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } -var chunkedSplice_1 = chunkedSplice$8; + if (input.length === 0) { + return ''; + } -var assign$4 = assign_1; + if (input.length === 1) { + return options.pascalCase ? input.toLocaleUpperCase(options.locale) : input.toLocaleLowerCase(options.locale); + } -function shallow$6(object) { - return assign$4({}, object) -} + const hasUpperCase = input !== input.toLocaleLowerCase(options.locale); -var shallow_1 = shallow$6; + if (hasUpperCase) { + input = preserveCamelCase(input, options.locale); + } -var assign$3 = assign_1; -var chunkedSplice$7 = chunkedSplice_1; -var shallow$5 = shallow_1; + input = input.replace(/^[_.\- ]+/, ''); -function subtokenize$2(events) { - var jumps = {}; - var index = -1; - var event; - var lineIndex; - var otherIndex; - var otherEvent; - var parameters; - var subevents; - var more; + if (options.preserveConsecutiveUppercase) { + input = preserveConsecutiveUppercase(input); + } else { + input = input.toLocaleLowerCase(); + } - while (++index < events.length) { - while (index in jumps) { - index = jumps[index]; - } + if (options.pascalCase) { + input = input.charAt(0).toLocaleUpperCase(options.locale) + input.slice(1); + } - event = events[index]; // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. + return postProcess(input, options); +}; - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { - subevents = event[1]._tokenizer.events; - otherIndex = 0; +camelcase$1.exports = camelCase; +// TODO: Remove this for the next major release +camelcase$1.exports.default = camelCase; - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { - otherIndex += 2; - } +var camelcase = camelcase$1.exports; - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break - } +var minimist = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; - if (subevents[otherIndex][1].type === 'chunkText') { - subevents[otherIndex][1].isInFirstContentOfListItem = true; - otherIndex++; - } + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; } - } - } // Enter. + }); - if (event[0] === 'enter') { - if (event[1].contentType) { - assign$3(jumps, subcontent(events, index)); - index = jumps[index]; - more = true; - } - } // Exit. - else if (event[1]._container || event[1]._movePreviousLineEndings) { - otherIndex = index; - lineIndex = undefined; + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; - while (otherIndex--) { - otherEvent = events[otherIndex]; + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank'; - } + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } - otherEvent[1].type = 'lineEnding'; - lineIndex = otherIndex; - } - } else { - break + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; } - } - - if (lineIndex) { - // Fix position. - event[1].end = shallow$5(events[lineIndex][1].start); // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index); - parameters.unshift(event); - chunkedSplice$7(events, lineIndex, index - lineIndex + 1, parameters); - } + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); } - } - return !more -} + function setKey (obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length-1; i++) { + var key = keys[i]; + if (key === '__proto__') return; + if (o[key] === undefined) o[key] = {}; + if (o[key] === Object.prototype || o[key] === Number.prototype + || o[key] === String.prototype) o[key] = {}; + if (o[key] === Array.prototype) o[key] = []; + o = o[key]; + } -function subcontent(events, eventIndex) { - var token = events[eventIndex][1]; - var context = events[eventIndex][2]; - var startPosition = eventIndex - 1; - var startPositions = []; - var tokenizer = - token._tokenizer || context.parser[token.contentType](token.start); - var childEvents = tokenizer.events; - var jumps = []; - var gaps = {}; - var stream; - var previous; - var index; - var entered; - var end; - var adjust; // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. + var key = keys[keys.length - 1]; + if (key === '__proto__') return; + if (o === Object.prototype || o === Number.prototype + || o === String.prototype) o = {}; + if (o === Array.prototype) o = []; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } - while (token) { - // Find the position of the event for this token. - while (events[++startPosition][1] !== token) { - // Empty. + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg); + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); } - startPositions.push(startPosition); + return argv; +}; - if (!token._tokenizer) { - stream = context.sliceStream(token); +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); - if (!token.next) { - stream.push(null); - } + var key = keys[keys.length - 1]; + return key in o; +} - if (previous) { - tokenizer.defineSkip(token.start); - } +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} - if (token.isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true; - } +// This is a generated file. Do not edit. +var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; +var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; +var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; - tokenizer.write(stream); +var unicode = { + Space_Separator: Space_Separator, + ID_Start: ID_Start, + ID_Continue: ID_Continue +}; - if (token.isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined; - } - } // Unravel the next token. +var util = { + isSpaceSeparator (c) { + return typeof c === 'string' && unicode.Space_Separator.test(c) + }, - previous = token; - token = token.next; - } // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. + isIdStartChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, - token = previous; - index = childEvents.length; + isIdContinueChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, - while (index--) { - // Make sure we’ve at least seen something (final eol is part of the last - // token). - if (childEvents[index][0] === 'enter') { - entered = true; - } else if ( - // Find a void token that includes a break. - entered && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - add(childEvents.slice(index + 1, end)); - // Help GC. - token._tokenizer = token.next = undefined; - token = token.previous; - end = index + 1; - } - } + isDigit (c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, - // Help GC. - tokenizer.events = token._tokenizer = token.next = undefined; // Do head: + isHexDigit (c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, +}; - add(childEvents.slice(0, end)); - index = -1; - adjust = 0; +let source; +let parseState; +let stack; +let pos; +let line; +let column; +let token; +let key; +let root$1; - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; - adjust += jumps[index][1] - jumps[index][0] - 1; - } +var parse$1 = function parse (text, reviver) { + source = String(text); + parseState = 'start'; + stack = []; + pos = 0; + line = 1; + column = 0; + token = undefined; + key = undefined; + root$1 = undefined; - return gaps + do { + token = lex(); - function add(slice) { - var start = startPositions.pop(); - jumps.unshift([start, start + slice.length - 1]); - chunkedSplice$7(events, start, 2, slice); - } -} + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } -var subtokenize_1 = subtokenize$2; + parseStates[parseState](); + } while (token.type !== 'eof') -var markdownLineEnding$g = markdownLineEnding_1; -var prefixSize$3 = prefixSize_1; -var subtokenize$1 = subtokenize_1; -var factorySpace$e = factorySpace$i; + if (typeof reviver === 'function') { + return internalize({'': root$1}, '', reviver) + } -// No name because it must not be turned off. -var content$2 = { - tokenize: tokenizeContent, - resolve: resolveContent, - interruptible: true, - lazy: true + return root$1 }; -var continuationConstruct = { - tokenize: tokenizeContinuation, - partial: true -}; // Content is transparent: it’s parsed right now. That way, definitions are also -// parsed right now: before text in paragraphs (specifically, media) are parsed. -function resolveContent(events) { - subtokenize$1(events); - return events -} +function internalize (holder, name, reviver) { + const value = holder[name]; + if (value != null && typeof value === 'object') { + for (const key in value) { + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + value[key] = replacement; + } + } + } -function tokenizeContent(effects, ok) { - var previous; - return start + return reviver.call(holder, name, value) +} - function start(code) { - effects.enter('content'); - previous = effects.enter('chunkContent', { - contentType: 'content' - }); - return data(code) - } +let lexState; +let buffer; +let doubleQuote; +let sign; +let c; - function data(code) { - if (code === null) { - return contentEnd(code) - } +function lex () { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign = 1; - if (markdownLineEnding$g(code)) { - return effects.check( - continuationConstruct, - contentContinue, - contentEnd - )(code) - } // Data. + for (;;) { + c = peek(); - effects.consume(code); - return data - } - - function contentEnd(code) { - effects.exit('chunkContent'); - effects.exit('content'); - return ok(code) - } - - function contentContinue(code) { - effects.consume(code); - effects.exit('chunkContent'); - previous = previous.next = effects.enter('chunkContent', { - contentType: 'content', - previous: previous - }); - return data - } -} - -function tokenizeContinuation(effects, ok, nok) { - var self = this; - return startLookahead - - function startLookahead(code) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$e(effects, prefixed, 'linePrefix') - } + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } - function prefixed(code) { - if (code === null || markdownLineEnding$g(code)) { - return nok(code) + const token = lexStates[lexState](); + if (token) { + return token + } } +} - if ( - self.parser.constructs.disable.null.indexOf('codeIndented') > -1 || - prefixSize$3(self.events, 'linePrefix') < 4 - ) { - return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) +function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) } - - return ok(code) - } } -var content_1 = content$2; - -Object.defineProperty(flow$7, '__esModule', {value: true}); - -var content$1 = content_1; -var factorySpace$d = factorySpace$i; -var partialBlankLine$2 = partialBlankLine_1; - -var tokenize = initializeFlow; - -function initializeFlow(effects) { - var self = this; - var initial = effects.attempt( - // Try to parse a blank line. - partialBlankLine$2, - atBlankEnding, // Try to parse initial flow (essentially, only code). - effects.attempt( - this.parser.constructs.flowInitial, - afterConstruct, - factorySpace$d( - effects, - effects.attempt( - this.parser.constructs.flow, - afterConstruct, - effects.attempt(content$1, afterConstruct) - ), - 'linePrefix' - ) - ) - ); - return initial +function read () { + const c = peek(); - function atBlankEnding(code) { - if (code === null) { - effects.consume(code); - return + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; } - effects.enter('lineEndingBlank'); - effects.consume(code); - effects.exit('lineEndingBlank'); - self.currentConstruct = undefined; - return initial - } - - function afterConstruct(code) { - if (code === null) { - effects.consume(code); - return + if (c) { + pos += c.length; } - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - self.currentConstruct = undefined; - return initial - } + return c } -flow$7.tokenize = tokenize; +const lexStates = { + default () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return -var text$5 = {}; + case '/': + read(); + lexState = 'comment'; + return -Object.defineProperty(text$5, '__esModule', {value: true}); + case undefined: + read(); + return newToken('eof') + } -var assign$2 = assign_1; -var shallow$4 = shallow_1; + if (util.isSpaceSeparator(c)) { + read(); + return + } -var text$4 = initializeFactory('text'); -var string$1 = initializeFactory('string'); -var resolver = { - resolveAll: createResolver() -}; + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } -function initializeFactory(field) { - return { - tokenize: initializeText, - resolveAll: createResolver( - field === 'text' ? resolveAllLineSuffixes : undefined - ) - } + return lexStates[parseState]() + }, - function initializeText(effects) { - var self = this; - var constructs = this.parser.constructs[field]; - var text = effects.attempt(constructs, start, notText); - return start + comment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return - function start(code) { - return atBreak(code) ? text(code) : notText(code) - } + case '/': + read(); + lexState = 'singleLineComment'; + return + } - function notText(code) { - if (code === null) { - effects.consume(code); - return - } + throw invalidChar(read()) + }, - effects.enter('data'); - effects.consume(code); - return data - } + multiLineComment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return - function data(code) { - if (atBreak(code)) { - effects.exit('data'); - return text(code) - } // Data. + case undefined: + throw invalidChar(read()) + } - effects.consume(code); - return data - } + read(); + }, - function atBreak(code) { - var list = constructs[code]; - var index = -1; + multiLineCommentAsterisk () { + switch (c) { + case '*': + read(); + return - if (code === null) { - return true - } + case '/': + read(); + lexState = 'default'; + return - if (list) { - while (++index < list.length) { - if ( - !list[index].previous || - list[index].previous.call(self, self.previous) - ) { - return true - } + case undefined: + throw invalidChar(read()) } - } - } - } -} -function createResolver(extraResolver) { - return resolveAllText + read(); + lexState = 'multiLineComment'; + }, - function resolveAllText(events, context) { - var index = -1; - var enter; // A rather boring computation (to merge adjacent `data` events) which - // improves mm performance by 29%. + singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return - while (++index <= events.length) { - if (enter === undefined) { - if (events[index] && events[index][1].type === 'data') { - enter = index; - index++; - } - } else if (!events[index] || events[index][1].type !== 'data') { - // Don’t do anything if there is one data token. - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end; - events.splice(enter + 2, index - enter - 2); - index = enter + 2; + case undefined: + read(); + return newToken('eof') } - enter = undefined; - } - } + read(); + }, - return extraResolver ? extraResolver(events, context) : events - } -} // A rather ugly set of instructions which again looks at chunks in the input -// stream. -// The reason to do this here is that it is *much* faster to parse in reverse. -// And that we can’t hook into `null` to split the line suffix before an EOF. -// To do: figure out if we can make this into a clean utility, or even in core. -// As it will be useful for GFMs literal autolink extension (and maybe even -// tables?) + value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) -function resolveAllLineSuffixes(events, context) { - var eventIndex = -1; - var chunks; - var data; - var chunk; - var index; - var bufferIndex; - var size; - var tabs; - var token; + case 'n': + read(); + literal('ull'); + return newToken('null', null) - while (++eventIndex <= events.length) { - if ( - (eventIndex === events.length || - events[eventIndex][1].type === 'lineEnding') && - events[eventIndex - 1][1].type === 'data' - ) { - data = events[eventIndex - 1][1]; - chunks = context.sliceStream(data); - index = chunks.length; - bufferIndex = -1; - size = 0; - tabs = undefined; + case 't': + read(); + literal('rue'); + return newToken('boolean', true) - while (index--) { - chunk = chunks[index]; + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) - if (typeof chunk === 'string') { - bufferIndex = chunk.length; + case '-': + case '+': + if (read() === '-') { + sign = -1; + } - while (chunk.charCodeAt(bufferIndex - 1) === 32) { - size++; - bufferIndex--; - } + lexState = 'sign'; + return - if (bufferIndex) break - bufferIndex = -1; - } // Number - else if (chunk === -2) { - tabs = true; - size++; - } else if (chunk === -1); - else { - // Replacement character, exit. - index++; - break - } - } + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return - if (size) { - token = { - type: - eventIndex === events.length || tabs || size < 2 - ? 'lineSuffix' - : 'hardBreakTrailing', - start: { - line: data.end.line, - column: data.end.column - size, - offset: data.end.offset - size, - _index: data.start._index + index, - _bufferIndex: index - ? bufferIndex - : data.start._bufferIndex + bufferIndex - }, - end: shallow$4(data.end) - }; - data.end = shallow$4(token.start); + case '0': + buffer = read(); + lexState = 'zero'; + return - if (data.start.offset === data.end.offset) { - assign$2(data, token); - } else { - events.splice( - eventIndex, - 0, - ['enter', token, context], - ['exit', token, context] - ); - eventIndex += 2; - } - } + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return - eventIndex++; - } - } + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) - return events -} + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) -text$5.resolver = resolver; -text$5.string = string$1; -text$5.text = text$4; + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } -function miniflat$3(value) { - return value === null || value === undefined - ? [] - : 'length' in value - ? value - : [value] -} + throw invalidChar(read()) + }, -var miniflat_1 = miniflat$3; + identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } -var hasOwnProperty$1 = hasOwnProperty$2; -var chunkedSplice$6 = chunkedSplice_1; -var miniflat$2 = miniflat_1; + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break -function combineExtensions$2(extensions) { - var all = {}; - var index = -1; + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } - while (++index < extensions.length) { - extension$1(all, extensions[index]); - } + break + } - return all -} + buffer += u; + lexState = 'identifierName'; + }, -function extension$1(all, extension) { - var hook; - var left; - var right; - var code; + identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return - for (hook in extension) { - left = hasOwnProperty$1.call(all, hook) ? all[hook] : (all[hook] = {}); - right = extension[hook]; + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } - for (code in right) { - left[code] = constructs$3( - miniflat$2(right[code]), - hasOwnProperty$1.call(left, code) ? left[code] : [] - ); - } - } -} + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } -function constructs$3(list, existing) { - var index = -1; - var before = []; + return newToken('identifier', buffer) + }, - while (++index < list.length) { -(list[index].add === 'after' ? existing : before).push(list[index]); - } + identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } - chunkedSplice$6(existing, 0, 0, before); - return existing -} + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break -var combineExtensions_1 = combineExtensions$2; + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } -var chunkedSplice$5 = chunkedSplice_1; + break + } -function chunkedPush$3(list, items) { - if (list.length) { - chunkedSplice$5(list, list.length, 0, items); - return list - } + buffer += u; + lexState = 'identifierName'; + }, - return items -} + sign () { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return -var chunkedPush_1 = chunkedPush$3; + case '0': + buffer = read(); + lexState = 'zero'; + return -function resolveAll$4(constructs, events, context) { - var called = []; - var index = -1; - var resolve; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return - while (++index < constructs.length) { - resolve = constructs[index].resolveAll; + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign * Infinity) - if (resolve && called.indexOf(resolve) < 0) { - events = resolve(events, context); - called.push(resolve); - } - } + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } - return events -} + throw invalidChar(read()) + }, -var resolveAll_1 = resolveAll$4; + zero () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return -var fromCharCode$2 = fromCharCode_1; + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return -function serializeChunks$1(chunks) { - var index = -1; - var result = []; - var chunk; - var value; - var atTab; + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } - while (++index < chunks.length) { - chunk = chunks[index]; + return newToken('numeric', sign * 0) + }, - if (typeof chunk === 'string') { - value = chunk; - } else if (chunk === -5) { - value = '\r'; - } else if (chunk === -4) { - value = '\n'; - } else if (chunk === -3) { - value = '\r' + '\n'; - } else if (chunk === -2) { - value = '\t'; - } else if (chunk === -1) { - if (atTab) continue - value = ' '; - } else { - // Currently only replacement character. - value = fromCharCode$2(chunk); - } + decimalInteger () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return - atTab = chunk === -2; - result.push(value); - } + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } - return result.join('') -} + if (util.isDigit(c)) { + buffer += read(); + return + } -var serializeChunks_1 = serializeChunks$1; + return newToken('numeric', sign * Number(buffer)) + }, -function sliceChunks$1(chunks, token) { - var startIndex = token.start._index; - var startBufferIndex = token.start._bufferIndex; - var endIndex = token.end._index; - var endBufferIndex = token.end._bufferIndex; - var view; + decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } - if (startIndex === endIndex) { - view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]; - } else { - view = chunks.slice(startIndex, endIndex); + throw invalidChar(read()) + }, - if (startBufferIndex > -1) { - view[0] = view[0].slice(startBufferIndex); - } + decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } - if (endBufferIndex > 0) { - view.push(chunks[endIndex].slice(0, endBufferIndex)); - } - } + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } - return view -} + return newToken('numeric', sign * Number(buffer)) + }, -var sliceChunks_1 = sliceChunks$1; - -var assign$1 = assign_1; -var markdownLineEnding$f = markdownLineEnding_1; -var chunkedPush$2 = chunkedPush_1; -var chunkedSplice$4 = chunkedSplice_1; -var miniflat$1 = miniflat_1; -var resolveAll$3 = resolveAll_1; -var serializeChunks = serializeChunks_1; -var shallow$3 = shallow_1; -var sliceChunks = sliceChunks_1; - -// Create a tokenizer. -// Tokenizers deal with one type of data (e.g., containers, flow, text). -// The parser is the object dealing with it all. -// `initialize` works like other constructs, except that only its `tokenize` -// function is used, in which case it doesn’t receive an `ok` or `nok`. -// `from` can be given to set the point before the first character, although -// when further lines are indented, they must be set with `defineSkip`. -function createTokenizer$1(parser, initialize, from) { - var point = from - ? shallow$3(from) - : { - line: 1, - column: 1, - offset: 0 - }; - var columnStart = {}; - var resolveAllConstructs = []; - var chunks = []; - var stack = []; - - var effects = { - consume: consume, - enter: enter, - exit: exit, - attempt: constructFactory(onsuccessfulconstruct), - check: constructFactory(onsuccessfulcheck), - interrupt: constructFactory(onsuccessfulcheck, { - interrupt: true - }), - lazy: constructFactory(onsuccessfulcheck, { - lazy: true - }) - }; // State and tools for resolving and serializing. + decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } - var context = { - previous: null, - events: [], - parser: parser, - sliceStream: sliceStream, - sliceSerialize: sliceSerialize, - now: now, - defineSkip: skip, - write: write - }; // The state function. + if (util.isDigit(c)) { + buffer += read(); + return + } - var state = initialize.tokenize.call(context, effects); // Track which character we expect to be consumed, to catch bugs. + return newToken('numeric', sign * Number(buffer)) + }, - if (initialize.resolveAll) { - resolveAllConstructs.push(initialize); - } // Store where we are in the input stream. + decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } - point._index = 0; - point._bufferIndex = -1; - return context + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } - function write(slice) { - chunks = chunkedPush$2(chunks, slice); - main(); // Exit if we’re not done, resolve might change stuff. + throw invalidChar(read()) + }, - if (chunks[chunks.length - 1] !== null) { - return [] - } + decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } - addResult(initialize, 0); // Otherwise, resolve, and exit. + throw invalidChar(read()) + }, - context.events = resolveAll$3(resolveAllConstructs, context.events, context); - return context.events - } // - // Tools. - // + decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read(); + return + } - function sliceSerialize(token) { - return serializeChunks(sliceStream(token)) - } + return newToken('numeric', sign * Number(buffer)) + }, - function sliceStream(token) { - return sliceChunks(chunks, token) - } + hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } - function now() { - return shallow$3(point) - } + throw invalidChar(read()) + }, - function skip(value) { - columnStart[value.line] = value.column; - accountForPotentialSkip(); - } // - // State management. - // - // Main loop (note that `_index` and `_bufferIndex` in `point` are modified by - // `consume`). - // Here is where we walk through the chunks, which either include strings of - // several characters, or numerical character codes. - // The reason to do this in a loop instead of a call is so the stack can - // drain. + hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read(); + return + } - function main() { - var chunkIndex; - var chunk; + return newToken('numeric', sign * Number(buffer)) + }, - while (point._index < chunks.length) { - chunk = chunks[point._index]; // If we’re in a buffer chunk, loop through it. + string () { + switch (c) { + case '\\': + read(); + buffer += escape(); + return - if (typeof chunk === 'string') { - chunkIndex = point._index; + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } - if (point._bufferIndex < 0) { - point._bufferIndex = 0; - } + buffer += read(); + return - while ( - point._index === chunkIndex && - point._bufferIndex < chunk.length - ) { - go(chunk.charCodeAt(point._bufferIndex)); - } - } else { - go(chunk); - } - } - } // Deal with one code. + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } - function go(code) { - state = state(code); - } // Move a character forward. + buffer += read(); + return - function consume(code) { - if (markdownLineEnding$f(code)) { - point.line++; - point.column = 1; - point.offset += code === -3 ? 2 : 1; - accountForPotentialSkip(); - } else if (code !== -1) { - point.column++; - point.offset++; - } // Not in a string chunk. + case '\n': + case '\r': + throw invalidChar(read()) - if (point._bufferIndex < 0) { - point._index++; - } else { - point._bufferIndex++; // At end of string chunk. + case '\u2028': + case '\u2029': + separatorChar(c); + break - if (point._bufferIndex === chunks[point._index].length) { - point._bufferIndex = -1; - point._index++; - } - } // Expose the previous character. + case undefined: + throw invalidChar(read()) + } - context.previous = code; // Mark as consumed. - } // Start a token. + buffer += read(); + }, - function enter(type, fields) { - var token = fields || {}; - token.type = type; - token.start = now(); - context.events.push(['enter', token, context]); - stack.push(token); - return token - } // Stop a token. + start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) - function exit(type) { - var token = stack.pop(); - token.end = now(); - context.events.push(['exit', token, context]); - return token - } // Use results. + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } - function onsuccessfulconstruct(construct, info) { - addResult(construct, info.from); - } // Discard results. + lexState = 'value'; + }, - function onsuccessfulcheck(construct, info) { - info.restore(); - } // Factory to attempt/check/interrupt. + beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return - function constructFactory(onreturn, fields) { - return hook // Handle either an object mapping codes to constructs, a list of - // constructs, or a single construct. + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return - function hook(constructs, returnState, bogusState) { - var listOfConstructs; - var constructIndex; - var currentConstruct; - var info; - return constructs.tokenize || 'length' in constructs - ? handleListOfConstructs(miniflat$1(constructs)) - : handleMapOfConstructs - - function handleMapOfConstructs(code) { - if (code in constructs || null in constructs) { - return handleListOfConstructs( - constructs.null - ? /* c8 ignore next */ - miniflat$1(constructs[code]).concat(miniflat$1(constructs.null)) - : constructs[code] - )(code) - } + case '}': + return newToken('punctuator', read()) - return bogusState(code) - } + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } - function handleListOfConstructs(list) { - listOfConstructs = list; - constructIndex = 0; - return handleConstruct(list[constructIndex]) - } + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } - function handleConstruct(construct) { - return start + throw invalidChar(read()) + }, - function start(code) { - // To do: not nede to store if there is no bogus state, probably? - // Currently doesn’t work because `inspect` in document does a check - // w/o a bogus, which doesn’t make sense. But it does seem to help perf - // by not storing. - info = store(); - currentConstruct = construct; + afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } - if (!construct.partial) { - context.currentConstruct = construct; - } + throw invalidChar(read()) + }, - if ( - construct.name && - context.parser.constructs.disable.null.indexOf(construct.name) > -1 - ) { - return nok() - } + beforePropertyValue () { + lexState = 'value'; + }, - return construct.tokenize.call( - fields ? assign$1({}, context, fields) : context, - effects, - ok, - nok - )(code) + afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) } - } - - function ok(code) { - onreturn(currentConstruct, info); - return returnState - } - function nok(code) { - info.restore(); + throw invalidChar(read()) + }, - if (++constructIndex < listOfConstructs.length) { - return handleConstruct(listOfConstructs[constructIndex]) + beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) } - return bogusState - } - } - } + lexState = 'value'; + }, - function addResult(construct, from) { - if (construct.resolveAll && resolveAllConstructs.indexOf(construct) < 0) { - resolveAllConstructs.push(construct); - } + afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } - if (construct.resolve) { - chunkedSplice$4( - context.events, - from, - context.events.length - from, - construct.resolve(context.events.slice(from), context) - ); - } + throw invalidChar(read()) + }, - if (construct.resolveTo) { - context.events = construct.resolveTo(context.events, context); - } - } + end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } - function store() { - var startPoint = now(); - var startPrevious = context.previous; - var startCurrentConstruct = context.currentConstruct; - var startEventsIndex = context.events.length; - var startStack = Array.from(stack); + throw invalidChar(read()) + }, +}; + +function newToken (type, value) { return { - restore: restore, - from: startEventsIndex + type, + value, + line, + column, } +} - function restore() { - point = startPoint; - context.previous = startPrevious; - context.currentConstruct = startCurrentConstruct; - context.events.length = startEventsIndex; - stack = startStack; - accountForPotentialSkip(); - } - } +function literal (s) { + for (const c of s) { + const p = peek(); - function accountForPotentialSkip() { - if (point.line in columnStart && point.column < 2) { - point.column = columnStart[point.line]; - point.offset += columnStart[point.line] - 1; + if (p !== c) { + throw invalidChar(read()) + } + + read(); } - } } -var createTokenizer_1 = createTokenizer$1; +function escape () { + const c = peek(); + switch (c) { + case 'b': + read(); + return '\b' -var constructs$2 = {}; + case 'f': + read(); + return '\f' -function markdownLineEndingOrSpace$9(code) { - return code < 0 || code === 32 -} + case 'n': + read(); + return '\n' -var markdownLineEndingOrSpace_1 = markdownLineEndingOrSpace$9; + case 'r': + read(); + return '\r' -// This module is generated by `script/`. -// -// CommonMark handles attention (emphasis, strong) markers based on what comes -// before or after them. -// One such difference is if those characters are Unicode punctuation. -// This script is generated from the Unicode data. -var unicodePunctuation$3 = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; + case 't': + read(); + return '\t' -var unicodePunctuationRegex$2 = unicodePunctuation$3; + case 'v': + read(); + return '\v' -var fromCharCode$1 = fromCharCode_1; + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } -function regexCheck$9(regex) { - return check + return '\0' - function check(code) { - return regex.test(fromCharCode$1(code)) - } -} + case 'x': + read(); + return hexEscape() -var regexCheck_1 = regexCheck$9; + case 'u': + read(); + return unicodeEscape() -var unicodePunctuationRegex$1 = unicodePunctuationRegex$2; -var regexCheck$8 = regexCheck_1; + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' -// In fact adds to the bundle size. + case '\r': + read(); + if (peek() === '\n') { + read(); + } -var unicodePunctuation$2 = regexCheck$8(unicodePunctuationRegex$1); + return '' -var unicodePunctuation_1 = unicodePunctuation$2; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) -var regexCheck$7 = regexCheck_1; + case undefined: + throw invalidChar(read()) + } -var unicodeWhitespace$2 = regexCheck$7(/\s/); + return read() +} -var unicodeWhitespace_1 = unicodeWhitespace$2; +function hexEscape () { + let buffer = ''; + let c = peek(); -var markdownLineEndingOrSpace$8 = markdownLineEndingOrSpace_1; -var unicodePunctuation$1 = unicodePunctuation_1; -var unicodeWhitespace$1 = unicodeWhitespace_1; + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } -// Classify whether a character is unicode whitespace, unicode punctuation, or -// anything else. -// Used for attention (emphasis, strong), whose sequences can open or close -// based on the class of surrounding characters. -function classifyCharacter$2(code) { - if ( - code === null || - markdownLineEndingOrSpace$8(code) || - unicodeWhitespace$1(code) - ) { - return 1 - } + buffer += read(); - if (unicodePunctuation$1(code)) { - return 2 - } + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) } -var classifyCharacter_1 = classifyCharacter$2; +function unicodeEscape () { + let buffer = ''; + let count = 4; + + while (count-- > 0) { + const c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } -// chunks (replacement characters, tabs, or line endings). + buffer += read(); + } -function movePoint$1(point, offset) { - point.column += offset; - point.offset += offset; - point._bufferIndex += offset; - return point + return String.fromCodePoint(parseInt(buffer, 16)) } -var movePoint_1 = movePoint$1; +const parseStates = { + start () { + if (token.type === 'eof') { + throw invalidEOF() + } -var chunkedPush$1 = chunkedPush_1; -var chunkedSplice$3 = chunkedSplice_1; -var classifyCharacter$1 = classifyCharacter_1; -var movePoint = movePoint_1; -var resolveAll$2 = resolveAll_1; -var shallow$2 = shallow_1; + push$1(); + }, -var attention$1 = { - name: 'attention', - tokenize: tokenizeAttention, - resolveAll: resolveAllAttention -}; + beforePropertyName () { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value; + parseState = 'afterPropertyName'; + return -function resolveAllAttention(events, context) { - var index = -1; - var open; - var group; - var text; - var openingSequence; - var closingSequence; - var use; - var nextEvents; - var offset; // Walk through all events. - // - // Note: performance of this is fine on an mb of normal markdown, but it’s - // a bottleneck for malicious stuff. + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index; // Now walk back to find an opener. + pop(); + return - while (open--) { - // Find a token that can open the closer. - if ( - events[open][0] === 'exit' && - events[open][1].type === 'attentionSequence' && - events[open][1]._open && // If the markers are the same: - context.sliceSerialize(events[open][1]).charCodeAt(0) === - context.sliceSerialize(events[index][1]).charCodeAt(0) - ) { - // If the opening can close or the closing can open, - // and the close size *is not* a multiple of three, - // but the sum of the opening and closing size *is* multiple of three, - // then don’t match. - if ( - (events[open][1]._close || events[index][1]._open) && - (events[index][1].end.offset - events[index][1].start.offset) % 3 && - !( - (events[open][1].end.offset - - events[open][1].start.offset + - events[index][1].end.offset - - events[index][1].start.offset) % - 3 - ) - ) { - continue - } // Number of markers to use from the sequence. - - use = - events[open][1].end.offset - events[open][1].start.offset > 1 && - events[index][1].end.offset - events[index][1].start.offset > 1 - ? 2 - : 1; - openingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: movePoint(shallow$2(events[open][1].end), -use), - end: shallow$2(events[open][1].end) - }; - closingSequence = { - type: use > 1 ? 'strongSequence' : 'emphasisSequence', - start: shallow$2(events[index][1].start), - end: movePoint(shallow$2(events[index][1].start), use) - }; - text = { - type: use > 1 ? 'strongText' : 'emphasisText', - start: shallow$2(events[open][1].end), - end: shallow$2(events[index][1].start) - }; - group = { - type: use > 1 ? 'strong' : 'emphasis', - start: shallow$2(openingSequence.start), - end: shallow$2(closingSequence.end) - }; - events[open][1].end = shallow$2(openingSequence.start); - events[index][1].start = shallow$2(closingSequence.end); - nextEvents = []; // If there are more markers in the opening, add them before. - - if (events[open][1].end.offset - events[open][1].start.offset) { - nextEvents = chunkedPush$1(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] - ]); - } // Opening. + case 'eof': + throw invalidEOF() + } - nextEvents = chunkedPush$1(nextEvents, [ - ['enter', group, context], - ['enter', openingSequence, context], - ['exit', openingSequence, context], - ['enter', text, context] - ]); // Between. + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, - nextEvents = chunkedPush$1( - nextEvents, - resolveAll$2( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ); // Closing. + afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } - nextEvents = chunkedPush$1(nextEvents, [ - ['exit', text, context], - ['enter', closingSequence, context], - ['exit', closingSequence, context], - ['exit', group, context] - ]); // If there are more markers in the closing, add them after. + if (token.type === 'eof') { + throw invalidEOF() + } - if (events[index][1].end.offset - events[index][1].start.offset) { - offset = 2; - nextEvents = chunkedPush$1(nextEvents, [ - ['enter', events[index][1], context], - ['exit', events[index][1], context] - ]); - } else { - offset = 0; - } + parseState = 'beforePropertyValue'; + }, - chunkedSplice$3(events, open - 1, index - open + 3, nextEvents); - index = open + nextEvents.length - offset - 2; - break + beforePropertyValue () { + if (token.type === 'eof') { + throw invalidEOF() } - } - } - } // Remove remaining sequences. - - index = -1; - while (++index < events.length) { - if (events[index][1].type === 'attentionSequence') { - events[index][1].type = 'data'; - } - } + push$1(); + }, - return events -} + beforeArrayValue () { + if (token.type === 'eof') { + throw invalidEOF() + } -function tokenizeAttention(effects, ok) { - var before = classifyCharacter$1(this.previous); - var marker; - return start + if (token.type === 'punctuator' && token.value === ']') { + pop(); + return + } - function start(code) { - effects.enter('attentionSequence'); - marker = code; - return sequence(code) - } + push$1(); + }, - function sequence(code) { - var token; - var after; - var open; - var close; + afterPropertyValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } - if (code === marker) { - effects.consume(code); - return sequence - } + if (token.type === 'eof') { + throw invalidEOF() + } - token = effects.exit('attentionSequence'); - after = classifyCharacter$1(code); - open = !after || (after === 2 && before); - close = !before || (before === 2 && after); - token._open = marker === 42 ? open : open && (before || !close); - token._close = marker === 42 ? close : close && (after || !open); - return ok(code) - } -} + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return -var attention_1 = attention$1; + case '}': + pop(); + } -var regexCheck$6 = regexCheck_1; + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, -var asciiAlpha$4 = regexCheck$6(/[A-Za-z]/); + afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } -var asciiAlpha_1 = asciiAlpha$4; + if (token.type === 'eof') { + throw invalidEOF() + } -var regexCheck$5 = regexCheck_1; + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return -var asciiAlphanumeric$5 = regexCheck$5(/[\dA-Za-z]/); + case ']': + pop(); + } -var asciiAlphanumeric_1 = asciiAlphanumeric$5; + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, -var regexCheck$4 = regexCheck_1; + end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, +}; -var asciiAtext$1 = regexCheck$4(/[#-'*+\--9=?A-Z^-~]/); +function push$1 () { + let value; -var asciiAtext_1 = asciiAtext$1; + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {}; + break -// Note: EOF is seen as ASCII control here, because `null < 32 == true`. -function asciiControl$3(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code < 32 || code === 127 - ) -} + case '[': + value = []; + break + } -var asciiControl_1 = asciiControl$3; + break -var asciiAlpha$3 = asciiAlpha_1; -var asciiAlphanumeric$4 = asciiAlphanumeric_1; -var asciiAtext = asciiAtext_1; -var asciiControl$2 = asciiControl_1; + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value; + break -var autolink$1 = { - name: 'autolink', - tokenize: tokenizeAutolink -}; + // This code is unreachable. + // default: + // throw invalidToken() + } -function tokenizeAutolink(effects, ok, nok) { - var size = 1; - return start + if (root$1 === undefined) { + root$1 = value; + } else { + const parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + parent[key] = value; + } + } - function start(code) { - effects.enter('autolink'); - effects.enter('autolinkMarker'); - effects.consume(code); - effects.exit('autolinkMarker'); - effects.enter('autolinkProtocol'); - return open - } + if (value !== null && typeof value === 'object') { + stack.push(value); - function open(code) { - if (asciiAlpha$3(code)) { - effects.consume(code); - return schemeOrEmailAtext + if (Array.isArray(value)) { + parseState = 'beforeArrayValue'; + } else { + parseState = 'beforePropertyName'; + } + } else { + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } } +} - return asciiAtext(code) ? emailAtext(code) : nok(code) - } - - function schemeOrEmailAtext(code) { - return code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code) - ? schemeInsideOrEmailAtext(code) - : emailAtext(code) - } +function pop () { + stack.pop(); - function schemeInsideOrEmailAtext(code) { - if (code === 58) { - effects.consume(code); - return urlInside + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; } +} - if ( - (code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code)) && - size++ < 32 - ) { - effects.consume(code); - return schemeInsideOrEmailAtext - } +// This code is unreachable. +// function invalidParseState () { +// return new Error(`JSON5: invalid parse state '${parseState}'`) +// } - return emailAtext(code) - } +// This code is unreachable. +// function invalidLexState (state) { +// return new Error(`JSON5: invalid lex state '${state}'`) +// } - function urlInside(code) { - if (code === 62) { - effects.exit('autolinkProtocol'); - return end(code) +function invalidChar (c) { + if (c === undefined) { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) } - if (code === 32 || code === 60 || asciiControl$2(code)) { - return nok(code) - } + return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +} - effects.consume(code); - return urlInside - } +function invalidEOF () { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +} - function emailAtext(code) { - if (code === 64) { - effects.consume(code); - size = 0; - return emailAtSignOrDot - } +// This code is unreachable. +// function invalidToken () { +// if (token.type === 'eof') { +// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +// } - if (asciiAtext(code)) { - effects.consume(code); - return emailAtext - } +// const c = String.fromCodePoint(token.value.codePointAt(0)) +// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +// } - return nok(code) - } +function invalidIdentifier () { + column -= 5; + return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) +} - function emailAtSignOrDot(code) { - return asciiAlphanumeric$4(code) ? emailLabel(code) : nok(code) - } +function separatorChar (c) { + console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`); +} - function emailLabel(code) { - if (code === 46) { - effects.consume(code); - size = 0; - return emailAtSignOrDot - } +function formatChar (c) { + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; - if (code === 62) { - // Exit, then change the type. - effects.exit('autolinkProtocol').type = 'autolinkEmail'; - return end(code) + if (replacements[c]) { + return replacements[c] } - return emailValue(code) - } - - function emailValue(code) { - if ((code === 45 || asciiAlphanumeric$4(code)) && size++ < 63) { - effects.consume(code); - return code === 45 ? emailValue : emailLabel + if (c < ' ') { + const hexString = c.charCodeAt(0).toString(16); + return '\\x' + ('00' + hexString).substring(hexString.length) } - return nok(code) - } - - function end(code) { - effects.enter('autolinkMarker'); - effects.consume(code); - effects.exit('autolinkMarker'); - effects.exit('autolink'); - return ok - } + return c } -var autolink_1 = autolink$1; +function syntaxError (message) { + const err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err +} -var markdownSpace$8 = markdownSpace_1; -var factorySpace$c = factorySpace$i; +var stringify = function stringify (value, replacer, space) { + const stack = []; + let indent = ''; + let propertyList; + let replacerFunc; + let gap = ''; + let quote; -var blockQuote$1 = { - name: 'blockQuote', - tokenize: tokenizeBlockQuoteStart, - continuation: { - tokenize: tokenizeBlockQuoteContinuation - }, - exit: exit$1 -}; + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } -function tokenizeBlockQuoteStart(effects, ok, nok) { - var self = this; - return start + if (typeof replacer === 'function') { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (const v of replacer) { + let item; - function start(code) { - if (code === 62) { - if (!self.containerState.open) { - effects.enter('blockQuote', { - _container: true - }); - self.containerState.open = true; - } + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } - effects.enter('blockQuotePrefix'); - effects.enter('blockQuoteMarker'); - effects.consume(code); - effects.exit('blockQuoteMarker'); - return after + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } } - return nok(code) - } - - function after(code) { - if (markdownSpace$8(code)) { - effects.enter('blockQuotePrefixWhitespace'); - effects.consume(code); - effects.exit('blockQuotePrefixWhitespace'); - effects.exit('blockQuotePrefix'); - return ok + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); } - effects.exit('blockQuotePrefix'); - return ok(code) - } -} + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = ' '.substr(0, space); + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10); + } -function tokenizeBlockQuoteContinuation(effects, ok, nok) { - return factorySpace$c( - effects, - effects.attempt(blockQuote$1, ok, nok), - 'linePrefix', - this.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 - ) -} + return serializeProperty('', {'': value}) -function exit$1(effects) { - effects.exit('blockQuote'); -} + function serializeProperty (key, holder) { + let value = holder[key]; + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key); + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + } -var blockQuote_1 = blockQuote$1; + if (replacerFunc) { + value = replacerFunc.call(holder, key, value); + } -var regexCheck$3 = regexCheck_1; + if (value instanceof Number) { + value = Number(value); + } else if (value instanceof String) { + value = String(value); + } else if (value instanceof Boolean) { + value = value.valueOf(); + } -var asciiPunctuation$1 = regexCheck$3(/[!-/:-@[-`{-~]/); + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } -var asciiPunctuation_1 = asciiPunctuation$1; + if (typeof value === 'string') { + return quoteString(value) + } -var asciiPunctuation = asciiPunctuation_1; + if (typeof value === 'number') { + return String(value) + } -var characterEscape$2 = { - name: 'characterEscape', - tokenize: tokenizeCharacterEscape -}; + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } -function tokenizeCharacterEscape(effects, ok, nok) { - return start + return undefined + } - function start(code) { - effects.enter('characterEscape'); - effects.enter('escapeMarker'); - effects.consume(code); - effects.exit('escapeMarker'); - return open - } + function quoteString (value) { + const quotes = { + "'": 0.1, + '"': 0.2, + }; - function open(code) { - if (asciiPunctuation(code)) { - effects.enter('characterEscapeValue'); - effects.consume(code); - effects.exit('characterEscapeValue'); - effects.exit('characterEscape'); - return ok - } + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; - return nok(code) - } -} + let product = ''; -var characterEscape_1 = characterEscape$2; - -const AEli$2 = "Æ"; -const AElig$2 = "Æ"; -const AM$2 = "&"; -const AMP$2 = "&"; -const Aacut$2 = "Á"; -const Aacute$2 = "Á"; -const Abreve$2 = "Ă"; -const Acir$2 = "Â"; -const Acirc$2 = "Â"; -const Acy$2 = "А"; -const Afr$2 = "𝔄"; -const Agrav$2 = "À"; -const Agrave$2 = "À"; -const Alpha$2 = "Α"; -const Amacr$2 = "Ā"; -const And$2 = "⩓"; -const Aogon$2 = "Ą"; -const Aopf$2 = "𝔸"; -const ApplyFunction$2 = "⁡"; -const Arin$2 = "Å"; -const Aring$2 = "Å"; -const Ascr$2 = "𝒜"; -const Assign$2 = "≔"; -const Atild$2 = "Ã"; -const Atilde$2 = "Ã"; -const Aum$2 = "Ä"; -const Auml$2 = "Ä"; -const Backslash$2 = "∖"; -const Barv$2 = "⫧"; -const Barwed$2 = "⌆"; -const Bcy$2 = "Б"; -const Because$2 = "∵"; -const Bernoullis$2 = "ℬ"; -const Beta$2 = "Β"; -const Bfr$2 = "𝔅"; -const Bopf$2 = "𝔹"; -const Breve$2 = "˘"; -const Bscr$2 = "ℬ"; -const Bumpeq$2 = "≎"; -const CHcy$2 = "Ч"; -const COP$2 = "©"; -const COPY$2 = "©"; -const Cacute$2 = "Ć"; -const Cap$2 = "⋒"; -const CapitalDifferentialD$2 = "ⅅ"; -const Cayleys$2 = "ℭ"; -const Ccaron$2 = "Č"; -const Ccedi$2 = "Ç"; -const Ccedil$2 = "Ç"; -const Ccirc$2 = "Ĉ"; -const Cconint$2 = "∰"; -const Cdot$2 = "Ċ"; -const Cedilla$2 = "¸"; -const CenterDot$2 = "·"; -const Cfr$2 = "ℭ"; -const Chi$2 = "Χ"; -const CircleDot$2 = "⊙"; -const CircleMinus$2 = "⊖"; -const CirclePlus$2 = "⊕"; -const CircleTimes$2 = "⊗"; -const ClockwiseContourIntegral$2 = "∲"; -const CloseCurlyDoubleQuote$2 = "”"; -const CloseCurlyQuote$2 = "’"; -const Colon$2 = "∷"; -const Colone$2 = "⩴"; -const Congruent$2 = "≡"; -const Conint$2 = "∯"; -const ContourIntegral$2 = "∮"; -const Copf$2 = "ℂ"; -const Coproduct$2 = "∐"; -const CounterClockwiseContourIntegral$2 = "∳"; -const Cross$2 = "⨯"; -const Cscr$2 = "𝒞"; -const Cup$2 = "⋓"; -const CupCap$2 = "≍"; -const DD$2 = "ⅅ"; -const DDotrahd$2 = "⤑"; -const DJcy$2 = "Ђ"; -const DScy$2 = "Ѕ"; -const DZcy$2 = "Џ"; -const Dagger$2 = "‡"; -const Darr$2 = "↡"; -const Dashv$2 = "⫤"; -const Dcaron$2 = "Ď"; -const Dcy$2 = "Д"; -const Del$2 = "∇"; -const Delta$2 = "Δ"; -const Dfr$2 = "𝔇"; -const DiacriticalAcute$2 = "´"; -const DiacriticalDot$2 = "˙"; -const DiacriticalDoubleAcute$2 = "˝"; -const DiacriticalGrave$2 = "`"; -const DiacriticalTilde$2 = "˜"; -const Diamond$2 = "⋄"; -const DifferentialD$2 = "ⅆ"; -const Dopf$2 = "𝔻"; -const Dot$2 = "¨"; -const DotDot$2 = "⃜"; -const DotEqual$2 = "≐"; -const DoubleContourIntegral$2 = "∯"; -const DoubleDot$2 = "¨"; -const DoubleDownArrow$2 = "⇓"; -const DoubleLeftArrow$2 = "⇐"; -const DoubleLeftRightArrow$2 = "⇔"; -const DoubleLeftTee$2 = "⫤"; -const DoubleLongLeftArrow$2 = "⟸"; -const DoubleLongLeftRightArrow$2 = "⟺"; -const DoubleLongRightArrow$2 = "⟹"; -const DoubleRightArrow$2 = "⇒"; -const DoubleRightTee$2 = "⊨"; -const DoubleUpArrow$2 = "⇑"; -const DoubleUpDownArrow$2 = "⇕"; -const DoubleVerticalBar$2 = "∥"; -const DownArrow$2 = "↓"; -const DownArrowBar$2 = "⤓"; -const DownArrowUpArrow$2 = "⇵"; -const DownBreve$2 = "̑"; -const DownLeftRightVector$2 = "⥐"; -const DownLeftTeeVector$2 = "⥞"; -const DownLeftVector$2 = "↽"; -const DownLeftVectorBar$2 = "⥖"; -const DownRightTeeVector$2 = "⥟"; -const DownRightVector$2 = "⇁"; -const DownRightVectorBar$2 = "⥗"; -const DownTee$2 = "⊤"; -const DownTeeArrow$2 = "↧"; -const Downarrow$2 = "⇓"; -const Dscr$2 = "𝒟"; -const Dstrok$2 = "Đ"; -const ENG$2 = "Ŋ"; -const ET$2 = "Ð"; -const ETH$2 = "Ð"; -const Eacut$2 = "É"; -const Eacute$2 = "É"; -const Ecaron$2 = "Ě"; -const Ecir$2 = "Ê"; -const Ecirc$2 = "Ê"; -const Ecy$2 = "Э"; -const Edot$2 = "Ė"; -const Efr$2 = "𝔈"; -const Egrav$2 = "È"; -const Egrave$2 = "È"; -const Element$2 = "∈"; -const Emacr$2 = "Ē"; -const EmptySmallSquare$2 = "◻"; -const EmptyVerySmallSquare$2 = "▫"; -const Eogon$2 = "Ę"; -const Eopf$2 = "𝔼"; -const Epsilon$2 = "Ε"; -const Equal$2 = "⩵"; -const EqualTilde$2 = "≂"; -const Equilibrium$2 = "⇌"; -const Escr$2 = "ℰ"; -const Esim$2 = "⩳"; -const Eta$2 = "Η"; -const Eum$2 = "Ë"; -const Euml$2 = "Ë"; -const Exists$2 = "∃"; -const ExponentialE$2 = "ⅇ"; -const Fcy$2 = "Ф"; -const Ffr$2 = "𝔉"; -const FilledSmallSquare$2 = "◼"; -const FilledVerySmallSquare$2 = "▪"; -const Fopf$2 = "𝔽"; -const ForAll$2 = "∀"; -const Fouriertrf$2 = "ℱ"; -const Fscr$2 = "ℱ"; -const GJcy$2 = "Ѓ"; -const G$2 = ">"; -const GT$2 = ">"; -const Gamma$2 = "Γ"; -const Gammad$2 = "Ϝ"; -const Gbreve$2 = "Ğ"; -const Gcedil$2 = "Ģ"; -const Gcirc$2 = "Ĝ"; -const Gcy$2 = "Г"; -const Gdot$2 = "Ġ"; -const Gfr$2 = "𝔊"; -const Gg$2 = "⋙"; -const Gopf$2 = "𝔾"; -const GreaterEqual$2 = "≥"; -const GreaterEqualLess$2 = "⋛"; -const GreaterFullEqual$2 = "≧"; -const GreaterGreater$2 = "⪢"; -const GreaterLess$2 = "≷"; -const GreaterSlantEqual$2 = "⩾"; -const GreaterTilde$2 = "≳"; -const Gscr$2 = "𝒢"; -const Gt$2 = "≫"; -const HARDcy$2 = "Ъ"; -const Hacek$2 = "ˇ"; -const Hat$2 = "^"; -const Hcirc$2 = "Ĥ"; -const Hfr$2 = "ℌ"; -const HilbertSpace$2 = "ℋ"; -const Hopf$2 = "ℍ"; -const HorizontalLine$2 = "─"; -const Hscr$2 = "ℋ"; -const Hstrok$2 = "Ħ"; -const HumpDownHump$2 = "≎"; -const HumpEqual$2 = "≏"; -const IEcy$2 = "Е"; -const IJlig$2 = "IJ"; -const IOcy$2 = "Ё"; -const Iacut$2 = "Í"; -const Iacute$2 = "Í"; -const Icir$2 = "Î"; -const Icirc$2 = "Î"; -const Icy$2 = "И"; -const Idot$2 = "İ"; -const Ifr$2 = "ℑ"; -const Igrav$2 = "Ì"; -const Igrave$2 = "Ì"; -const Im$2 = "ℑ"; -const Imacr$2 = "Ī"; -const ImaginaryI$2 = "ⅈ"; -const Implies$2 = "⇒"; -const Int$2 = "∬"; -const Integral$2 = "∫"; -const Intersection$2 = "⋂"; -const InvisibleComma$2 = "⁣"; -const InvisibleTimes$2 = "⁢"; -const Iogon$2 = "Į"; -const Iopf$2 = "𝕀"; -const Iota$2 = "Ι"; -const Iscr$2 = "ℐ"; -const Itilde$2 = "Ĩ"; -const Iukcy$2 = "І"; -const Ium$2 = "Ï"; -const Iuml$2 = "Ï"; -const Jcirc$2 = "Ĵ"; -const Jcy$2 = "Й"; -const Jfr$2 = "𝔍"; -const Jopf$2 = "𝕁"; -const Jscr$2 = "𝒥"; -const Jsercy$2 = "Ј"; -const Jukcy$2 = "Є"; -const KHcy$2 = "Х"; -const KJcy$2 = "Ќ"; -const Kappa$2 = "Κ"; -const Kcedil$2 = "Ķ"; -const Kcy$2 = "К"; -const Kfr$2 = "𝔎"; -const Kopf$2 = "𝕂"; -const Kscr$2 = "𝒦"; -const LJcy$2 = "Љ"; -const L$2 = "<"; -const LT$2 = "<"; -const Lacute$2 = "Ĺ"; -const Lambda$2 = "Λ"; -const Lang$2 = "⟪"; -const Laplacetrf$2 = "ℒ"; -const Larr$2 = "↞"; -const Lcaron$2 = "Ľ"; -const Lcedil$2 = "Ļ"; -const Lcy$2 = "Л"; -const LeftAngleBracket$2 = "⟨"; -const LeftArrow$2 = "←"; -const LeftArrowBar$2 = "⇤"; -const LeftArrowRightArrow$2 = "⇆"; -const LeftCeiling$2 = "⌈"; -const LeftDoubleBracket$2 = "⟦"; -const LeftDownTeeVector$2 = "⥡"; -const LeftDownVector$2 = "⇃"; -const LeftDownVectorBar$2 = "⥙"; -const LeftFloor$2 = "⌊"; -const LeftRightArrow$2 = "↔"; -const LeftRightVector$2 = "⥎"; -const LeftTee$2 = "⊣"; -const LeftTeeArrow$2 = "↤"; -const LeftTeeVector$2 = "⥚"; -const LeftTriangle$2 = "⊲"; -const LeftTriangleBar$2 = "⧏"; -const LeftTriangleEqual$2 = "⊴"; -const LeftUpDownVector$2 = "⥑"; -const LeftUpTeeVector$2 = "⥠"; -const LeftUpVector$2 = "↿"; -const LeftUpVectorBar$2 = "⥘"; -const LeftVector$2 = "↼"; -const LeftVectorBar$2 = "⥒"; -const Leftarrow$2 = "⇐"; -const Leftrightarrow$2 = "⇔"; -const LessEqualGreater$2 = "⋚"; -const LessFullEqual$2 = "≦"; -const LessGreater$2 = "≶"; -const LessLess$2 = "⪡"; -const LessSlantEqual$2 = "⩽"; -const LessTilde$2 = "≲"; -const Lfr$2 = "𝔏"; -const Ll$2 = "⋘"; -const Lleftarrow$2 = "⇚"; -const Lmidot$2 = "Ŀ"; -const LongLeftArrow$2 = "⟵"; -const LongLeftRightArrow$2 = "⟷"; -const LongRightArrow$2 = "⟶"; -const Longleftarrow$2 = "⟸"; -const Longleftrightarrow$2 = "⟺"; -const Longrightarrow$2 = "⟹"; -const Lopf$2 = "𝕃"; -const LowerLeftArrow$2 = "↙"; -const LowerRightArrow$2 = "↘"; -const Lscr$2 = "ℒ"; -const Lsh$2 = "↰"; -const Lstrok$2 = "Ł"; -const Lt$2 = "≪"; -const Mcy$2 = "М"; -const MediumSpace$2 = " "; -const Mellintrf$2 = "ℳ"; -const Mfr$2 = "𝔐"; -const MinusPlus$2 = "∓"; -const Mopf$2 = "𝕄"; -const Mscr$2 = "ℳ"; -const Mu$2 = "Μ"; -const NJcy$2 = "Њ"; -const Nacute$2 = "Ń"; -const Ncaron$2 = "Ň"; -const Ncedil$2 = "Ņ"; -const Ncy$2 = "Н"; -const NegativeMediumSpace$2 = "​"; -const NegativeThickSpace$2 = "​"; -const NegativeThinSpace$2 = "​"; -const NegativeVeryThinSpace$2 = "​"; -const NestedGreaterGreater$2 = "≫"; -const NestedLessLess$2 = "≪"; -const NewLine$2 = "\n"; -const Nfr$2 = "𝔑"; -const NoBreak$2 = "⁠"; -const NonBreakingSpace$2 = " "; -const Nopf$2 = "ℕ"; -const Not$2 = "⫬"; -const NotCongruent$2 = "≢"; -const NotCupCap$2 = "≭"; -const NotDoubleVerticalBar$2 = "∦"; -const NotElement$2 = "∉"; -const NotEqual$2 = "≠"; -const NotEqualTilde$2 = "≂̸"; -const NotExists$2 = "∄"; -const NotGreater$2 = "≯"; -const NotGreaterEqual$2 = "≱"; -const NotGreaterFullEqual$2 = "≧̸"; -const NotGreaterGreater$2 = "≫̸"; -const NotGreaterLess$2 = "≹"; -const NotGreaterSlantEqual$2 = "⩾̸"; -const NotGreaterTilde$2 = "≵"; -const NotHumpDownHump$2 = "≎̸"; -const NotHumpEqual$2 = "≏̸"; -const NotLeftTriangle$2 = "⋪"; -const NotLeftTriangleBar$2 = "⧏̸"; -const NotLeftTriangleEqual$2 = "⋬"; -const NotLess$2 = "≮"; -const NotLessEqual$2 = "≰"; -const NotLessGreater$2 = "≸"; -const NotLessLess$2 = "≪̸"; -const NotLessSlantEqual$2 = "⩽̸"; -const NotLessTilde$2 = "≴"; -const NotNestedGreaterGreater$2 = "⪢̸"; -const NotNestedLessLess$2 = "⪡̸"; -const NotPrecedes$2 = "⊀"; -const NotPrecedesEqual$2 = "⪯̸"; -const NotPrecedesSlantEqual$2 = "⋠"; -const NotReverseElement$2 = "∌"; -const NotRightTriangle$2 = "⋫"; -const NotRightTriangleBar$2 = "⧐̸"; -const NotRightTriangleEqual$2 = "⋭"; -const NotSquareSubset$2 = "⊏̸"; -const NotSquareSubsetEqual$2 = "⋢"; -const NotSquareSuperset$2 = "⊐̸"; -const NotSquareSupersetEqual$2 = "⋣"; -const NotSubset$2 = "⊂⃒"; -const NotSubsetEqual$2 = "⊈"; -const NotSucceeds$2 = "⊁"; -const NotSucceedsEqual$2 = "⪰̸"; -const NotSucceedsSlantEqual$2 = "⋡"; -const NotSucceedsTilde$2 = "≿̸"; -const NotSuperset$2 = "⊃⃒"; -const NotSupersetEqual$2 = "⊉"; -const NotTilde$2 = "≁"; -const NotTildeEqual$2 = "≄"; -const NotTildeFullEqual$2 = "≇"; -const NotTildeTilde$2 = "≉"; -const NotVerticalBar$2 = "∤"; -const Nscr$2 = "𝒩"; -const Ntild$2 = "Ñ"; -const Ntilde$2 = "Ñ"; -const Nu$2 = "Ν"; -const OElig$2 = "Œ"; -const Oacut$2 = "Ó"; -const Oacute$2 = "Ó"; -const Ocir$2 = "Ô"; -const Ocirc$2 = "Ô"; -const Ocy$2 = "О"; -const Odblac$2 = "Ő"; -const Ofr$2 = "𝔒"; -const Ograv$2 = "Ò"; -const Ograve$2 = "Ò"; -const Omacr$2 = "Ō"; -const Omega$2 = "Ω"; -const Omicron$2 = "Ο"; -const Oopf$2 = "𝕆"; -const OpenCurlyDoubleQuote$2 = "“"; -const OpenCurlyQuote$2 = "‘"; -const Or$2 = "⩔"; -const Oscr$2 = "𝒪"; -const Oslas$2 = "Ø"; -const Oslash$2 = "Ø"; -const Otild$2 = "Õ"; -const Otilde$2 = "Õ"; -const Otimes$2 = "⨷"; -const Oum$2 = "Ö"; -const Ouml$2 = "Ö"; -const OverBar$2 = "‾"; -const OverBrace$2 = "⏞"; -const OverBracket$2 = "⎴"; -const OverParenthesis$2 = "⏜"; -const PartialD$2 = "∂"; -const Pcy$2 = "П"; -const Pfr$2 = "𝔓"; -const Phi$2 = "Φ"; -const Pi$2 = "Π"; -const PlusMinus$2 = "±"; -const Poincareplane$2 = "ℌ"; -const Popf$2 = "ℙ"; -const Pr$2 = "⪻"; -const Precedes$2 = "≺"; -const PrecedesEqual$2 = "⪯"; -const PrecedesSlantEqual$2 = "≼"; -const PrecedesTilde$2 = "≾"; -const Prime$2 = "″"; -const Product$2 = "∏"; -const Proportion$2 = "∷"; -const Proportional$2 = "∝"; -const Pscr$2 = "𝒫"; -const Psi$2 = "Ψ"; -const QUO$2 = "\""; -const QUOT$2 = "\""; -const Qfr$2 = "𝔔"; -const Qopf$2 = "ℚ"; -const Qscr$2 = "𝒬"; -const RBarr$2 = "⤐"; -const RE$2 = "®"; -const REG$2 = "®"; -const Racute$2 = "Ŕ"; -const Rang$2 = "⟫"; -const Rarr$2 = "↠"; -const Rarrtl$2 = "⤖"; -const Rcaron$2 = "Ř"; -const Rcedil$2 = "Ŗ"; -const Rcy$2 = "Р"; -const Re$2 = "ℜ"; -const ReverseElement$2 = "∋"; -const ReverseEquilibrium$2 = "⇋"; -const ReverseUpEquilibrium$2 = "⥯"; -const Rfr$2 = "ℜ"; -const Rho$2 = "Ρ"; -const RightAngleBracket$2 = "⟩"; -const RightArrow$2 = "→"; -const RightArrowBar$2 = "⇥"; -const RightArrowLeftArrow$2 = "⇄"; -const RightCeiling$2 = "⌉"; -const RightDoubleBracket$2 = "⟧"; -const RightDownTeeVector$2 = "⥝"; -const RightDownVector$2 = "⇂"; -const RightDownVectorBar$2 = "⥕"; -const RightFloor$2 = "⌋"; -const RightTee$2 = "⊢"; -const RightTeeArrow$2 = "↦"; -const RightTeeVector$2 = "⥛"; -const RightTriangle$2 = "⊳"; -const RightTriangleBar$2 = "⧐"; -const RightTriangleEqual$2 = "⊵"; -const RightUpDownVector$2 = "⥏"; -const RightUpTeeVector$2 = "⥜"; -const RightUpVector$2 = "↾"; -const RightUpVectorBar$2 = "⥔"; -const RightVector$2 = "⇀"; -const RightVectorBar$2 = "⥓"; -const Rightarrow$2 = "⇒"; -const Ropf$2 = "ℝ"; -const RoundImplies$2 = "⥰"; -const Rrightarrow$2 = "⇛"; -const Rscr$2 = "ℛ"; -const Rsh$2 = "↱"; -const RuleDelayed$2 = "⧴"; -const SHCHcy$2 = "Щ"; -const SHcy$2 = "Ш"; -const SOFTcy$2 = "Ь"; -const Sacute$2 = "Ś"; -const Sc$2 = "⪼"; -const Scaron$2 = "Š"; -const Scedil$2 = "Ş"; -const Scirc$2 = "Ŝ"; -const Scy$2 = "С"; -const Sfr$2 = "𝔖"; -const ShortDownArrow$2 = "↓"; -const ShortLeftArrow$2 = "←"; -const ShortRightArrow$2 = "→"; -const ShortUpArrow$2 = "↑"; -const Sigma$2 = "Σ"; -const SmallCircle$2 = "∘"; -const Sopf$2 = "𝕊"; -const Sqrt$2 = "√"; -const Square$2 = "□"; -const SquareIntersection$2 = "⊓"; -const SquareSubset$2 = "⊏"; -const SquareSubsetEqual$2 = "⊑"; -const SquareSuperset$2 = "⊐"; -const SquareSupersetEqual$2 = "⊒"; -const SquareUnion$2 = "⊔"; -const Sscr$2 = "𝒮"; -const Star$2 = "⋆"; -const Sub$2 = "⋐"; -const Subset$2 = "⋐"; -const SubsetEqual$2 = "⊆"; -const Succeeds$2 = "≻"; -const SucceedsEqual$2 = "⪰"; -const SucceedsSlantEqual$2 = "≽"; -const SucceedsTilde$2 = "≿"; -const SuchThat$2 = "∋"; -const Sum$2 = "∑"; -const Sup$2 = "⋑"; -const Superset$2 = "⊃"; -const SupersetEqual$2 = "⊇"; -const Supset$2 = "⋑"; -const THOR$2 = "Þ"; -const THORN$2 = "Þ"; -const TRADE$2 = "™"; -const TSHcy$2 = "Ћ"; -const TScy$2 = "Ц"; -const Tab$2 = "\t"; -const Tau$2 = "Τ"; -const Tcaron$2 = "Ť"; -const Tcedil$2 = "Ţ"; -const Tcy$2 = "Т"; -const Tfr$2 = "𝔗"; -const Therefore$2 = "∴"; -const Theta$2 = "Θ"; -const ThickSpace$2 = "  "; -const ThinSpace$2 = " "; -const Tilde$2 = "∼"; -const TildeEqual$2 = "≃"; -const TildeFullEqual$2 = "≅"; -const TildeTilde$2 = "≈"; -const Topf$2 = "𝕋"; -const TripleDot$2 = "⃛"; -const Tscr$2 = "𝒯"; -const Tstrok$2 = "Ŧ"; -const Uacut$2 = "Ú"; -const Uacute$2 = "Ú"; -const Uarr$2 = "↟"; -const Uarrocir$2 = "⥉"; -const Ubrcy$2 = "Ў"; -const Ubreve$2 = "Ŭ"; -const Ucir$2 = "Û"; -const Ucirc$2 = "Û"; -const Ucy$2 = "У"; -const Udblac$2 = "Ű"; -const Ufr$2 = "𝔘"; -const Ugrav$2 = "Ù"; -const Ugrave$2 = "Ù"; -const Umacr$2 = "Ū"; -const UnderBar$2 = "_"; -const UnderBrace$2 = "⏟"; -const UnderBracket$2 = "⎵"; -const UnderParenthesis$2 = "⏝"; -const Union$2 = "⋃"; -const UnionPlus$2 = "⊎"; -const Uogon$2 = "Ų"; -const Uopf$2 = "𝕌"; -const UpArrow$2 = "↑"; -const UpArrowBar$2 = "⤒"; -const UpArrowDownArrow$2 = "⇅"; -const UpDownArrow$2 = "↕"; -const UpEquilibrium$2 = "⥮"; -const UpTee$2 = "⊥"; -const UpTeeArrow$2 = "↥"; -const Uparrow$2 = "⇑"; -const Updownarrow$2 = "⇕"; -const UpperLeftArrow$2 = "↖"; -const UpperRightArrow$2 = "↗"; -const Upsi$2 = "ϒ"; -const Upsilon$2 = "Υ"; -const Uring$2 = "Ů"; -const Uscr$2 = "𝒰"; -const Utilde$2 = "Ũ"; -const Uum$2 = "Ü"; -const Uuml$2 = "Ü"; -const VDash$2 = "⊫"; -const Vbar$2 = "⫫"; -const Vcy$2 = "В"; -const Vdash$2 = "⊩"; -const Vdashl$2 = "⫦"; -const Vee$2 = "⋁"; -const Verbar$2 = "‖"; -const Vert$2 = "‖"; -const VerticalBar$2 = "∣"; -const VerticalLine$2 = "|"; -const VerticalSeparator$2 = "❘"; -const VerticalTilde$2 = "≀"; -const VeryThinSpace$2 = " "; -const Vfr$2 = "𝔙"; -const Vopf$2 = "𝕍"; -const Vscr$2 = "𝒱"; -const Vvdash$2 = "⊪"; -const Wcirc$2 = "Ŵ"; -const Wedge$2 = "⋀"; -const Wfr$2 = "𝔚"; -const Wopf$2 = "𝕎"; -const Wscr$2 = "𝒲"; -const Xfr$2 = "𝔛"; -const Xi$2 = "Ξ"; -const Xopf$2 = "𝕏"; -const Xscr$2 = "𝒳"; -const YAcy$2 = "Я"; -const YIcy$2 = "Ї"; -const YUcy$2 = "Ю"; -const Yacut$2 = "Ý"; -const Yacute$2 = "Ý"; -const Ycirc$2 = "Ŷ"; -const Ycy$2 = "Ы"; -const Yfr$2 = "𝔜"; -const Yopf$2 = "𝕐"; -const Yscr$2 = "𝒴"; -const Yuml$2 = "Ÿ"; -const ZHcy$2 = "Ж"; -const Zacute$2 = "Ź"; -const Zcaron$2 = "Ž"; -const Zcy$2 = "З"; -const Zdot$2 = "Ż"; -const ZeroWidthSpace$2 = "​"; -const Zeta$2 = "Ζ"; -const Zfr$2 = "ℨ"; -const Zopf$2 = "ℤ"; -const Zscr$2 = "𝒵"; -const aacut$2 = "á"; -const aacute$2 = "á"; -const abreve$2 = "ă"; -const ac$2 = "∾"; -const acE$2 = "∾̳"; -const acd$2 = "∿"; -const acir$2 = "â"; -const acirc$2 = "â"; -const acut$2 = "´"; -const acute$2 = "´"; -const acy$2 = "а"; -const aeli$2 = "æ"; -const aelig$2 = "æ"; -const af$2 = "⁡"; -const afr$2 = "𝔞"; -const agrav$2 = "à"; -const agrave$2 = "à"; -const alefsym$2 = "ℵ"; -const aleph$2 = "ℵ"; -const alpha$2 = "α"; -const amacr$2 = "ā"; -const amalg$2 = "⨿"; -const am$2 = "&"; -const amp$2 = "&"; -const and$2 = "∧"; -const andand$2 = "⩕"; -const andd$2 = "⩜"; -const andslope$2 = "⩘"; -const andv$2 = "⩚"; -const ang$2 = "∠"; -const ange$2 = "⦤"; -const angle$2 = "∠"; -const angmsd$2 = "∡"; -const angmsdaa$2 = "⦨"; -const angmsdab$2 = "⦩"; -const angmsdac$2 = "⦪"; -const angmsdad$2 = "⦫"; -const angmsdae$2 = "⦬"; -const angmsdaf$2 = "⦭"; -const angmsdag$2 = "⦮"; -const angmsdah$2 = "⦯"; -const angrt$2 = "∟"; -const angrtvb$2 = "⊾"; -const angrtvbd$2 = "⦝"; -const angsph$2 = "∢"; -const angst$2 = "Å"; -const angzarr$2 = "⍼"; -const aogon$2 = "ą"; -const aopf$2 = "𝕒"; -const ap$2 = "≈"; -const apE$2 = "⩰"; -const apacir$2 = "⩯"; -const ape$2 = "≊"; -const apid$2 = "≋"; -const apos$2 = "'"; -const approx$2 = "≈"; -const approxeq$2 = "≊"; -const arin$2 = "å"; -const aring$2 = "å"; -const ascr$2 = "𝒶"; -const ast$2 = "*"; -const asymp$2 = "≈"; -const asympeq$2 = "≍"; -const atild$2 = "ã"; -const atilde$2 = "ã"; -const aum$2 = "ä"; -const auml$2 = "ä"; -const awconint$2 = "∳"; -const awint$2 = "⨑"; -const bNot$2 = "⫭"; -const backcong$2 = "≌"; -const backepsilon$2 = "϶"; -const backprime$2 = "‵"; -const backsim$2 = "∽"; -const backsimeq$2 = "⋍"; -const barvee$2 = "⊽"; -const barwed$2 = "⌅"; -const barwedge$2 = "⌅"; -const bbrk$2 = "⎵"; -const bbrktbrk$2 = "⎶"; -const bcong$2 = "≌"; -const bcy$2 = "б"; -const bdquo$2 = "„"; -const becaus$2 = "∵"; -const because$2 = "∵"; -const bemptyv$2 = "⦰"; -const bepsi$2 = "϶"; -const bernou$2 = "ℬ"; -const beta$2 = "β"; -const beth$2 = "ℶ"; -const between$2 = "≬"; -const bfr$2 = "𝔟"; -const bigcap$2 = "⋂"; -const bigcirc$2 = "◯"; -const bigcup$2 = "⋃"; -const bigodot$2 = "⨀"; -const bigoplus$2 = "⨁"; -const bigotimes$2 = "⨂"; -const bigsqcup$2 = "⨆"; -const bigstar$2 = "★"; -const bigtriangledown$2 = "▽"; -const bigtriangleup$2 = "△"; -const biguplus$2 = "⨄"; -const bigvee$2 = "⋁"; -const bigwedge$2 = "⋀"; -const bkarow$2 = "⤍"; -const blacklozenge$2 = "⧫"; -const blacksquare$2 = "▪"; -const blacktriangle$2 = "▴"; -const blacktriangledown$2 = "▾"; -const blacktriangleleft$2 = "◂"; -const blacktriangleright$2 = "▸"; -const blank$2 = "␣"; -const blk12$2 = "▒"; -const blk14$2 = "░"; -const blk34$2 = "▓"; -const block$2 = "█"; -const bne$2 = "=⃥"; -const bnequiv$2 = "≡⃥"; -const bnot$2 = "⌐"; -const bopf$2 = "𝕓"; -const bot$2 = "⊥"; -const bottom$2 = "⊥"; -const bowtie$2 = "⋈"; -const boxDL$2 = "╗"; -const boxDR$2 = "╔"; -const boxDl$2 = "╖"; -const boxDr$2 = "╓"; -const boxH$2 = "═"; -const boxHD$2 = "╦"; -const boxHU$2 = "╩"; -const boxHd$2 = "╤"; -const boxHu$2 = "╧"; -const boxUL$2 = "╝"; -const boxUR$2 = "╚"; -const boxUl$2 = "╜"; -const boxUr$2 = "╙"; -const boxV$2 = "║"; -const boxVH$2 = "╬"; -const boxVL$2 = "╣"; -const boxVR$2 = "╠"; -const boxVh$2 = "╫"; -const boxVl$2 = "╢"; -const boxVr$2 = "╟"; -const boxbox$2 = "⧉"; -const boxdL$2 = "╕"; -const boxdR$2 = "╒"; -const boxdl$2 = "┐"; -const boxdr$2 = "┌"; -const boxh$2 = "─"; -const boxhD$2 = "╥"; -const boxhU$2 = "╨"; -const boxhd$2 = "┬"; -const boxhu$2 = "┴"; -const boxminus$2 = "⊟"; -const boxplus$2 = "⊞"; -const boxtimes$2 = "⊠"; -const boxuL$2 = "╛"; -const boxuR$2 = "╘"; -const boxul$2 = "┘"; -const boxur$2 = "└"; -const boxv$2 = "│"; -const boxvH$2 = "╪"; -const boxvL$2 = "╡"; -const boxvR$2 = "╞"; -const boxvh$2 = "┼"; -const boxvl$2 = "┤"; -const boxvr$2 = "├"; -const bprime$2 = "‵"; -const breve$2 = "˘"; -const brvba$2 = "¦"; -const brvbar$2 = "¦"; -const bscr$2 = "𝒷"; -const bsemi$2 = "⁏"; -const bsim$2 = "∽"; -const bsime$2 = "⋍"; -const bsol$2 = "\\"; -const bsolb$2 = "⧅"; -const bsolhsub$2 = "⟈"; -const bull$2 = "•"; -const bullet$2 = "•"; -const bump$2 = "≎"; -const bumpE$2 = "⪮"; -const bumpe$2 = "≏"; -const bumpeq$2 = "≏"; -const cacute$2 = "ć"; -const cap$2 = "∩"; -const capand$2 = "⩄"; -const capbrcup$2 = "⩉"; -const capcap$2 = "⩋"; -const capcup$2 = "⩇"; -const capdot$2 = "⩀"; -const caps$2 = "∩︀"; -const caret$2 = "⁁"; -const caron$2 = "ˇ"; -const ccaps$2 = "⩍"; -const ccaron$2 = "č"; -const ccedi$2 = "ç"; -const ccedil$2 = "ç"; -const ccirc$2 = "ĉ"; -const ccups$2 = "⩌"; -const ccupssm$2 = "⩐"; -const cdot$2 = "ċ"; -const cedi$2 = "¸"; -const cedil$2 = "¸"; -const cemptyv$2 = "⦲"; -const cen$2 = "¢"; -const cent$2 = "¢"; -const centerdot$2 = "·"; -const cfr$2 = "𝔠"; -const chcy$2 = "ч"; -const check$3 = "✓"; -const checkmark$2 = "✓"; -const chi$2 = "χ"; -const cir$2 = "○"; -const cirE$2 = "⧃"; -const circ$2 = "ˆ"; -const circeq$2 = "≗"; -const circlearrowleft$2 = "↺"; -const circlearrowright$2 = "↻"; -const circledR$2 = "®"; -const circledS$2 = "Ⓢ"; -const circledast$2 = "⊛"; -const circledcirc$2 = "⊚"; -const circleddash$2 = "⊝"; -const cire$2 = "≗"; -const cirfnint$2 = "⨐"; -const cirmid$2 = "⫯"; -const cirscir$2 = "⧂"; -const clubs$2 = "♣"; -const clubsuit$2 = "♣"; -const colon$2 = ":"; -const colone$2 = "≔"; -const coloneq$2 = "≔"; -const comma$2 = ","; -const commat$2 = "@"; -const comp$2 = "∁"; -const compfn$2 = "∘"; -const complement$2 = "∁"; -const complexes$2 = "ℂ"; -const cong$2 = "≅"; -const congdot$2 = "⩭"; -const conint$2 = "∮"; -const copf$2 = "𝕔"; -const coprod$2 = "∐"; -const cop$2 = "©"; -const copy$2 = "©"; -const copysr$2 = "℗"; -const crarr$2 = "↵"; -const cross$2 = "✗"; -const cscr$2 = "𝒸"; -const csub$2 = "⫏"; -const csube$2 = "⫑"; -const csup$2 = "⫐"; -const csupe$2 = "⫒"; -const ctdot$2 = "⋯"; -const cudarrl$2 = "⤸"; -const cudarrr$2 = "⤵"; -const cuepr$2 = "⋞"; -const cuesc$2 = "⋟"; -const cularr$2 = "↶"; -const cularrp$2 = "⤽"; -const cup$2 = "∪"; -const cupbrcap$2 = "⩈"; -const cupcap$2 = "⩆"; -const cupcup$2 = "⩊"; -const cupdot$2 = "⊍"; -const cupor$2 = "⩅"; -const cups$2 = "∪︀"; -const curarr$2 = "↷"; -const curarrm$2 = "⤼"; -const curlyeqprec$2 = "⋞"; -const curlyeqsucc$2 = "⋟"; -const curlyvee$2 = "⋎"; -const curlywedge$2 = "⋏"; -const curre$2 = "¤"; -const curren$2 = "¤"; -const curvearrowleft$2 = "↶"; -const curvearrowright$2 = "↷"; -const cuvee$2 = "⋎"; -const cuwed$2 = "⋏"; -const cwconint$2 = "∲"; -const cwint$2 = "∱"; -const cylcty$2 = "⌭"; -const dArr$2 = "⇓"; -const dHar$2 = "⥥"; -const dagger$2 = "†"; -const daleth$2 = "ℸ"; -const darr$2 = "↓"; -const dash$2 = "‐"; -const dashv$2 = "⊣"; -const dbkarow$2 = "⤏"; -const dblac$2 = "˝"; -const dcaron$2 = "ď"; -const dcy$2 = "д"; -const dd$2 = "ⅆ"; -const ddagger$2 = "‡"; -const ddarr$2 = "⇊"; -const ddotseq$2 = "⩷"; -const de$2 = "°"; -const deg$2 = "°"; -const delta$2 = "δ"; -const demptyv$2 = "⦱"; -const dfisht$2 = "⥿"; -const dfr$2 = "𝔡"; -const dharl$2 = "⇃"; -const dharr$2 = "⇂"; -const diam$2 = "⋄"; -const diamond$2 = "⋄"; -const diamondsuit$2 = "♦"; -const diams$2 = "♦"; -const die$2 = "¨"; -const digamma$2 = "ϝ"; -const disin$2 = "⋲"; -const div$2 = "÷"; -const divid$2 = "÷"; -const divide$2 = "÷"; -const divideontimes$2 = "⋇"; -const divonx$2 = "⋇"; -const djcy$2 = "ђ"; -const dlcorn$2 = "⌞"; -const dlcrop$2 = "⌍"; -const dollar$2 = "$"; -const dopf$2 = "𝕕"; -const dot$2 = "˙"; -const doteq$2 = "≐"; -const doteqdot$2 = "≑"; -const dotminus$2 = "∸"; -const dotplus$2 = "∔"; -const dotsquare$2 = "⊡"; -const doublebarwedge$2 = "⌆"; -const downarrow$2 = "↓"; -const downdownarrows$2 = "⇊"; -const downharpoonleft$2 = "⇃"; -const downharpoonright$2 = "⇂"; -const drbkarow$2 = "⤐"; -const drcorn$2 = "⌟"; -const drcrop$2 = "⌌"; -const dscr$2 = "𝒹"; -const dscy$2 = "ѕ"; -const dsol$2 = "⧶"; -const dstrok$2 = "đ"; -const dtdot$2 = "⋱"; -const dtri$2 = "▿"; -const dtrif$2 = "▾"; -const duarr$2 = "⇵"; -const duhar$2 = "⥯"; -const dwangle$2 = "⦦"; -const dzcy$2 = "џ"; -const dzigrarr$2 = "⟿"; -const eDDot$2 = "⩷"; -const eDot$2 = "≑"; -const eacut$2 = "é"; -const eacute$2 = "é"; -const easter$2 = "⩮"; -const ecaron$2 = "ě"; -const ecir$2 = "ê"; -const ecirc$2 = "ê"; -const ecolon$2 = "≕"; -const ecy$2 = "э"; -const edot$2 = "ė"; -const ee$2 = "ⅇ"; -const efDot$2 = "≒"; -const efr$2 = "𝔢"; -const eg$2 = "⪚"; -const egrav$2 = "è"; -const egrave$2 = "è"; -const egs$2 = "⪖"; -const egsdot$2 = "⪘"; -const el$2 = "⪙"; -const elinters$2 = "⏧"; -const ell$2 = "ℓ"; -const els$2 = "⪕"; -const elsdot$2 = "⪗"; -const emacr$2 = "ē"; -const empty$2 = "∅"; -const emptyset$2 = "∅"; -const emptyv$2 = "∅"; -const emsp13$2 = " "; -const emsp14$2 = " "; -const emsp$2 = " "; -const eng$2 = "ŋ"; -const ensp$2 = " "; -const eogon$2 = "ę"; -const eopf$2 = "𝕖"; -const epar$2 = "⋕"; -const eparsl$2 = "⧣"; -const eplus$2 = "⩱"; -const epsi$2 = "ε"; -const epsilon$2 = "ε"; -const epsiv$2 = "ϵ"; -const eqcirc$2 = "≖"; -const eqcolon$2 = "≕"; -const eqsim$2 = "≂"; -const eqslantgtr$2 = "⪖"; -const eqslantless$2 = "⪕"; -const equals$2 = "="; -const equest$2 = "≟"; -const equiv$2 = "≡"; -const equivDD$2 = "⩸"; -const eqvparsl$2 = "⧥"; -const erDot$2 = "≓"; -const erarr$2 = "⥱"; -const escr$2 = "ℯ"; -const esdot$2 = "≐"; -const esim$2 = "≂"; -const eta$2 = "η"; -const et$2 = "ð"; -const eth$2 = "ð"; -const eum$2 = "ë"; -const euml$2 = "ë"; -const euro$2 = "€"; -const excl$2 = "!"; -const exist$2 = "∃"; -const expectation$2 = "ℰ"; -const exponentiale$2 = "ⅇ"; -const fallingdotseq$2 = "≒"; -const fcy$2 = "ф"; -const female$2 = "♀"; -const ffilig$2 = "ffi"; -const fflig$2 = "ff"; -const ffllig$2 = "ffl"; -const ffr$2 = "𝔣"; -const filig$2 = "fi"; -const fjlig$2 = "fj"; -const flat$2 = "♭"; -const fllig$2 = "fl"; -const fltns$2 = "▱"; -const fnof$2 = "ƒ"; -const fopf$2 = "𝕗"; -const forall$2 = "∀"; -const fork$2 = "⋔"; -const forkv$2 = "⫙"; -const fpartint$2 = "⨍"; -const frac1$2 = "¼"; -const frac12$2 = "½"; -const frac13$2 = "⅓"; -const frac14$2 = "¼"; -const frac15$2 = "⅕"; -const frac16$2 = "⅙"; -const frac18$2 = "⅛"; -const frac23$2 = "⅔"; -const frac25$2 = "⅖"; -const frac3$2 = "¾"; -const frac34$2 = "¾"; -const frac35$2 = "⅗"; -const frac38$2 = "⅜"; -const frac45$2 = "⅘"; -const frac56$2 = "⅚"; -const frac58$2 = "⅝"; -const frac78$2 = "⅞"; -const frasl$2 = "⁄"; -const frown$2 = "⌢"; -const fscr$2 = "𝒻"; -const gE$2 = "≧"; -const gEl$2 = "⪌"; -const gacute$2 = "ǵ"; -const gamma$2 = "γ"; -const gammad$2 = "ϝ"; -const gap$2 = "⪆"; -const gbreve$2 = "ğ"; -const gcirc$2 = "ĝ"; -const gcy$2 = "г"; -const gdot$2 = "ġ"; -const ge$2 = "≥"; -const gel$2 = "⋛"; -const geq$2 = "≥"; -const geqq$2 = "≧"; -const geqslant$2 = "⩾"; -const ges$2 = "⩾"; -const gescc$2 = "⪩"; -const gesdot$2 = "⪀"; -const gesdoto$2 = "⪂"; -const gesdotol$2 = "⪄"; -const gesl$2 = "⋛︀"; -const gesles$2 = "⪔"; -const gfr$2 = "𝔤"; -const gg$2 = "≫"; -const ggg$2 = "⋙"; -const gimel$2 = "ℷ"; -const gjcy$2 = "ѓ"; -const gl$2 = "≷"; -const glE$2 = "⪒"; -const gla$2 = "⪥"; -const glj$2 = "⪤"; -const gnE$2 = "≩"; -const gnap$2 = "⪊"; -const gnapprox$2 = "⪊"; -const gne$2 = "⪈"; -const gneq$2 = "⪈"; -const gneqq$2 = "≩"; -const gnsim$2 = "⋧"; -const gopf$2 = "𝕘"; -const grave$2 = "`"; -const gscr$2 = "ℊ"; -const gsim$2 = "≳"; -const gsime$2 = "⪎"; -const gsiml$2 = "⪐"; -const g$2 = ">"; -const gt$2 = ">"; -const gtcc$2 = "⪧"; -const gtcir$2 = "⩺"; -const gtdot$2 = "⋗"; -const gtlPar$2 = "⦕"; -const gtquest$2 = "⩼"; -const gtrapprox$2 = "⪆"; -const gtrarr$2 = "⥸"; -const gtrdot$2 = "⋗"; -const gtreqless$2 = "⋛"; -const gtreqqless$2 = "⪌"; -const gtrless$2 = "≷"; -const gtrsim$2 = "≳"; -const gvertneqq$2 = "≩︀"; -const gvnE$2 = "≩︀"; -const hArr$2 = "⇔"; -const hairsp$2 = " "; -const half$2 = "½"; -const hamilt$2 = "ℋ"; -const hardcy$2 = "ъ"; -const harr$2 = "↔"; -const harrcir$2 = "⥈"; -const harrw$2 = "↭"; -const hbar$2 = "ℏ"; -const hcirc$2 = "ĥ"; -const hearts$2 = "♥"; -const heartsuit$2 = "♥"; -const hellip$2 = "…"; -const hercon$2 = "⊹"; -const hfr$2 = "𝔥"; -const hksearow$2 = "⤥"; -const hkswarow$2 = "⤦"; -const hoarr$2 = "⇿"; -const homtht$2 = "∻"; -const hookleftarrow$2 = "↩"; -const hookrightarrow$2 = "↪"; -const hopf$2 = "𝕙"; -const horbar$2 = "―"; -const hscr$2 = "𝒽"; -const hslash$2 = "ℏ"; -const hstrok$2 = "ħ"; -const hybull$2 = "⁃"; -const hyphen$2 = "‐"; -const iacut$2 = "í"; -const iacute$2 = "í"; -const ic$2 = "⁣"; -const icir$2 = "î"; -const icirc$2 = "î"; -const icy$2 = "и"; -const iecy$2 = "е"; -const iexc$2 = "¡"; -const iexcl$2 = "¡"; -const iff$2 = "⇔"; -const ifr$2 = "𝔦"; -const igrav$2 = "ì"; -const igrave$2 = "ì"; -const ii$2 = "ⅈ"; -const iiiint$2 = "⨌"; -const iiint$2 = "∭"; -const iinfin$2 = "⧜"; -const iiota$2 = "℩"; -const ijlig$2 = "ij"; -const imacr$2 = "ī"; -const image$3 = "ℑ"; -const imagline$2 = "ℐ"; -const imagpart$2 = "ℑ"; -const imath$2 = "ı"; -const imof$2 = "⊷"; -const imped$2 = "Ƶ"; -const incare$2 = "℅"; -const infin$2 = "∞"; -const infintie$2 = "⧝"; -const inodot$2 = "ı"; -const int$3 = "∫"; -const intcal$2 = "⊺"; -const integers$2 = "ℤ"; -const intercal$2 = "⊺"; -const intlarhk$2 = "⨗"; -const intprod$2 = "⨼"; -const iocy$2 = "ё"; -const iogon$2 = "į"; -const iopf$2 = "𝕚"; -const iota$2 = "ι"; -const iprod$2 = "⨼"; -const iques$2 = "¿"; -const iquest$2 = "¿"; -const iscr$2 = "𝒾"; -const isin$2 = "∈"; -const isinE$2 = "⋹"; -const isindot$2 = "⋵"; -const isins$2 = "⋴"; -const isinsv$2 = "⋳"; -const isinv$2 = "∈"; -const it$2 = "⁢"; -const itilde$2 = "ĩ"; -const iukcy$2 = "і"; -const ium$2 = "ï"; -const iuml$2 = "ï"; -const jcirc$2 = "ĵ"; -const jcy$2 = "й"; -const jfr$2 = "𝔧"; -const jmath$2 = "ȷ"; -const jopf$2 = "𝕛"; -const jscr$2 = "𝒿"; -const jsercy$2 = "ј"; -const jukcy$2 = "є"; -const kappa$2 = "κ"; -const kappav$2 = "ϰ"; -const kcedil$2 = "ķ"; -const kcy$2 = "к"; -const kfr$2 = "𝔨"; -const kgreen$2 = "ĸ"; -const khcy$2 = "х"; -const kjcy$2 = "ќ"; -const kopf$2 = "𝕜"; -const kscr$2 = "𝓀"; -const lAarr$2 = "⇚"; -const lArr$2 = "⇐"; -const lAtail$2 = "⤛"; -const lBarr$2 = "⤎"; -const lE$2 = "≦"; -const lEg$2 = "⪋"; -const lHar$2 = "⥢"; -const lacute$2 = "ĺ"; -const laemptyv$2 = "⦴"; -const lagran$2 = "ℒ"; -const lambda$2 = "λ"; -const lang$2 = "⟨"; -const langd$2 = "⦑"; -const langle$2 = "⟨"; -const lap$2 = "⪅"; -const laqu$2 = "«"; -const laquo$2 = "«"; -const larr$2 = "←"; -const larrb$2 = "⇤"; -const larrbfs$2 = "⤟"; -const larrfs$2 = "⤝"; -const larrhk$2 = "↩"; -const larrlp$2 = "↫"; -const larrpl$2 = "⤹"; -const larrsim$2 = "⥳"; -const larrtl$2 = "↢"; -const lat$2 = "⪫"; -const latail$2 = "⤙"; -const late$2 = "⪭"; -const lates$2 = "⪭︀"; -const lbarr$2 = "⤌"; -const lbbrk$2 = "❲"; -const lbrace$2 = "{"; -const lbrack$2 = "["; -const lbrke$2 = "⦋"; -const lbrksld$2 = "⦏"; -const lbrkslu$2 = "⦍"; -const lcaron$2 = "ľ"; -const lcedil$2 = "ļ"; -const lceil$2 = "⌈"; -const lcub$2 = "{"; -const lcy$2 = "л"; -const ldca$2 = "⤶"; -const ldquo$2 = "“"; -const ldquor$2 = "„"; -const ldrdhar$2 = "⥧"; -const ldrushar$2 = "⥋"; -const ldsh$2 = "↲"; -const le$2 = "≤"; -const leftarrow$2 = "←"; -const leftarrowtail$2 = "↢"; -const leftharpoondown$2 = "↽"; -const leftharpoonup$2 = "↼"; -const leftleftarrows$2 = "⇇"; -const leftrightarrow$2 = "↔"; -const leftrightarrows$2 = "⇆"; -const leftrightharpoons$2 = "⇋"; -const leftrightsquigarrow$2 = "↭"; -const leftthreetimes$2 = "⋋"; -const leg$2 = "⋚"; -const leq$2 = "≤"; -const leqq$2 = "≦"; -const leqslant$2 = "⩽"; -const les$2 = "⩽"; -const lescc$2 = "⪨"; -const lesdot$2 = "⩿"; -const lesdoto$2 = "⪁"; -const lesdotor$2 = "⪃"; -const lesg$2 = "⋚︀"; -const lesges$2 = "⪓"; -const lessapprox$2 = "⪅"; -const lessdot$2 = "⋖"; -const lesseqgtr$2 = "⋚"; -const lesseqqgtr$2 = "⪋"; -const lessgtr$2 = "≶"; -const lesssim$2 = "≲"; -const lfisht$2 = "⥼"; -const lfloor$2 = "⌊"; -const lfr$2 = "𝔩"; -const lg$2 = "≶"; -const lgE$2 = "⪑"; -const lhard$2 = "↽"; -const lharu$2 = "↼"; -const lharul$2 = "⥪"; -const lhblk$2 = "▄"; -const ljcy$2 = "љ"; -const ll$2 = "≪"; -const llarr$2 = "⇇"; -const llcorner$2 = "⌞"; -const llhard$2 = "⥫"; -const lltri$2 = "◺"; -const lmidot$2 = "ŀ"; -const lmoust$2 = "⎰"; -const lmoustache$2 = "⎰"; -const lnE$2 = "≨"; -const lnap$2 = "⪉"; -const lnapprox$2 = "⪉"; -const lne$2 = "⪇"; -const lneq$2 = "⪇"; -const lneqq$2 = "≨"; -const lnsim$2 = "⋦"; -const loang$2 = "⟬"; -const loarr$2 = "⇽"; -const lobrk$2 = "⟦"; -const longleftarrow$2 = "⟵"; -const longleftrightarrow$2 = "⟷"; -const longmapsto$2 = "⟼"; -const longrightarrow$2 = "⟶"; -const looparrowleft$2 = "↫"; -const looparrowright$2 = "↬"; -const lopar$2 = "⦅"; -const lopf$2 = "𝕝"; -const loplus$2 = "⨭"; -const lotimes$2 = "⨴"; -const lowast$2 = "∗"; -const lowbar$2 = "_"; -const loz$2 = "◊"; -const lozenge$2 = "◊"; -const lozf$2 = "⧫"; -const lpar$2 = "("; -const lparlt$2 = "⦓"; -const lrarr$2 = "⇆"; -const lrcorner$2 = "⌟"; -const lrhar$2 = "⇋"; -const lrhard$2 = "⥭"; -const lrm$2 = "‎"; -const lrtri$2 = "⊿"; -const lsaquo$2 = "‹"; -const lscr$2 = "𝓁"; -const lsh$2 = "↰"; -const lsim$2 = "≲"; -const lsime$2 = "⪍"; -const lsimg$2 = "⪏"; -const lsqb$2 = "["; -const lsquo$2 = "‘"; -const lsquor$2 = "‚"; -const lstrok$2 = "ł"; -const l$2 = "<"; -const lt$3 = "<"; -const ltcc$2 = "⪦"; -const ltcir$2 = "⩹"; -const ltdot$2 = "⋖"; -const lthree$2 = "⋋"; -const ltimes$2 = "⋉"; -const ltlarr$2 = "⥶"; -const ltquest$2 = "⩻"; -const ltrPar$2 = "⦖"; -const ltri$2 = "◃"; -const ltrie$2 = "⊴"; -const ltrif$2 = "◂"; -const lurdshar$2 = "⥊"; -const luruhar$2 = "⥦"; -const lvertneqq$2 = "≨︀"; -const lvnE$2 = "≨︀"; -const mDDot$2 = "∺"; -const mac$2 = "¯"; -const macr$2 = "¯"; -const male$2 = "♂"; -const malt$2 = "✠"; -const maltese$2 = "✠"; -const map$5 = "↦"; -const mapsto$2 = "↦"; -const mapstodown$2 = "↧"; -const mapstoleft$2 = "↤"; -const mapstoup$2 = "↥"; -const marker$2 = "▮"; -const mcomma$2 = "⨩"; -const mcy$2 = "м"; -const mdash$2 = "—"; -const measuredangle$2 = "∡"; -const mfr$2 = "𝔪"; -const mho$2 = "℧"; -const micr$2 = "µ"; -const micro$2 = "µ"; -const mid$2 = "∣"; -const midast$2 = "*"; -const midcir$2 = "⫰"; -const middo$2 = "·"; -const middot$2 = "·"; -const minus$2 = "−"; -const minusb$2 = "⊟"; -const minusd$2 = "∸"; -const minusdu$2 = "⨪"; -const mlcp$2 = "⫛"; -const mldr$2 = "…"; -const mnplus$2 = "∓"; -const models$2 = "⊧"; -const mopf$2 = "𝕞"; -const mp$2 = "∓"; -const mscr$2 = "𝓂"; -const mstpos$2 = "∾"; -const mu$2 = "μ"; -const multimap$2 = "⊸"; -const mumap$2 = "⊸"; -const nGg$2 = "⋙̸"; -const nGt$2 = "≫⃒"; -const nGtv$2 = "≫̸"; -const nLeftarrow$2 = "⇍"; -const nLeftrightarrow$2 = "⇎"; -const nLl$2 = "⋘̸"; -const nLt$2 = "≪⃒"; -const nLtv$2 = "≪̸"; -const nRightarrow$2 = "⇏"; -const nVDash$2 = "⊯"; -const nVdash$2 = "⊮"; -const nabla$2 = "∇"; -const nacute$2 = "ń"; -const nang$2 = "∠⃒"; -const nap$2 = "≉"; -const napE$2 = "⩰̸"; -const napid$2 = "≋̸"; -const napos$2 = "ʼn"; -const napprox$2 = "≉"; -const natur$2 = "♮"; -const natural$2 = "♮"; -const naturals$2 = "ℕ"; -const nbs$2 = " "; -const nbsp$2 = " "; -const nbump$2 = "≎̸"; -const nbumpe$2 = "≏̸"; -const ncap$2 = "⩃"; -const ncaron$2 = "ň"; -const ncedil$2 = "ņ"; -const ncong$2 = "≇"; -const ncongdot$2 = "⩭̸"; -const ncup$2 = "⩂"; -const ncy$2 = "н"; -const ndash$2 = "–"; -const ne$2 = "≠"; -const neArr$2 = "⇗"; -const nearhk$2 = "⤤"; -const nearr$2 = "↗"; -const nearrow$2 = "↗"; -const nedot$2 = "≐̸"; -const nequiv$2 = "≢"; -const nesear$2 = "⤨"; -const nesim$2 = "≂̸"; -const nexist$2 = "∄"; -const nexists$2 = "∄"; -const nfr$2 = "𝔫"; -const ngE$2 = "≧̸"; -const nge$2 = "≱"; -const ngeq$2 = "≱"; -const ngeqq$2 = "≧̸"; -const ngeqslant$2 = "⩾̸"; -const nges$2 = "⩾̸"; -const ngsim$2 = "≵"; -const ngt$2 = "≯"; -const ngtr$2 = "≯"; -const nhArr$2 = "⇎"; -const nharr$2 = "↮"; -const nhpar$2 = "⫲"; -const ni$2 = "∋"; -const nis$2 = "⋼"; -const nisd$2 = "⋺"; -const niv$2 = "∋"; -const njcy$2 = "њ"; -const nlArr$2 = "⇍"; -const nlE$2 = "≦̸"; -const nlarr$2 = "↚"; -const nldr$2 = "‥"; -const nle$2 = "≰"; -const nleftarrow$2 = "↚"; -const nleftrightarrow$2 = "↮"; -const nleq$2 = "≰"; -const nleqq$2 = "≦̸"; -const nleqslant$2 = "⩽̸"; -const nles$2 = "⩽̸"; -const nless$2 = "≮"; -const nlsim$2 = "≴"; -const nlt$2 = "≮"; -const nltri$2 = "⋪"; -const nltrie$2 = "⋬"; -const nmid$2 = "∤"; -const nopf$2 = "𝕟"; -const no$2 = "¬"; -const not$2 = "¬"; -const notin$2 = "∉"; -const notinE$2 = "⋹̸"; -const notindot$2 = "⋵̸"; -const notinva$2 = "∉"; -const notinvb$2 = "⋷"; -const notinvc$2 = "⋶"; -const notni$2 = "∌"; -const notniva$2 = "∌"; -const notnivb$2 = "⋾"; -const notnivc$2 = "⋽"; -const npar$2 = "∦"; -const nparallel$2 = "∦"; -const nparsl$2 = "⫽⃥"; -const npart$2 = "∂̸"; -const npolint$2 = "⨔"; -const npr$2 = "⊀"; -const nprcue$2 = "⋠"; -const npre$2 = "⪯̸"; -const nprec$2 = "⊀"; -const npreceq$2 = "⪯̸"; -const nrArr$2 = "⇏"; -const nrarr$2 = "↛"; -const nrarrc$2 = "⤳̸"; -const nrarrw$2 = "↝̸"; -const nrightarrow$2 = "↛"; -const nrtri$2 = "⋫"; -const nrtrie$2 = "⋭"; -const nsc$2 = "⊁"; -const nsccue$2 = "⋡"; -const nsce$2 = "⪰̸"; -const nscr$2 = "𝓃"; -const nshortmid$2 = "∤"; -const nshortparallel$2 = "∦"; -const nsim$2 = "≁"; -const nsime$2 = "≄"; -const nsimeq$2 = "≄"; -const nsmid$2 = "∤"; -const nspar$2 = "∦"; -const nsqsube$2 = "⋢"; -const nsqsupe$2 = "⋣"; -const nsub$2 = "⊄"; -const nsubE$2 = "⫅̸"; -const nsube$2 = "⊈"; -const nsubset$2 = "⊂⃒"; -const nsubseteq$2 = "⊈"; -const nsubseteqq$2 = "⫅̸"; -const nsucc$2 = "⊁"; -const nsucceq$2 = "⪰̸"; -const nsup$2 = "⊅"; -const nsupE$2 = "⫆̸"; -const nsupe$2 = "⊉"; -const nsupset$2 = "⊃⃒"; -const nsupseteq$2 = "⊉"; -const nsupseteqq$2 = "⫆̸"; -const ntgl$2 = "≹"; -const ntild$2 = "ñ"; -const ntilde$2 = "ñ"; -const ntlg$2 = "≸"; -const ntriangleleft$2 = "⋪"; -const ntrianglelefteq$2 = "⋬"; -const ntriangleright$2 = "⋫"; -const ntrianglerighteq$2 = "⋭"; -const nu$2 = "ν"; -const num$2 = "#"; -const numero$2 = "№"; -const numsp$2 = " "; -const nvDash$2 = "⊭"; -const nvHarr$2 = "⤄"; -const nvap$2 = "≍⃒"; -const nvdash$2 = "⊬"; -const nvge$2 = "≥⃒"; -const nvgt$2 = ">⃒"; -const nvinfin$2 = "⧞"; -const nvlArr$2 = "⤂"; -const nvle$2 = "≤⃒"; -const nvlt$2 = "<⃒"; -const nvltrie$2 = "⊴⃒"; -const nvrArr$2 = "⤃"; -const nvrtrie$2 = "⊵⃒"; -const nvsim$2 = "∼⃒"; -const nwArr$2 = "⇖"; -const nwarhk$2 = "⤣"; -const nwarr$2 = "↖"; -const nwarrow$2 = "↖"; -const nwnear$2 = "⤧"; -const oS$2 = "Ⓢ"; -const oacut$2 = "ó"; -const oacute$2 = "ó"; -const oast$2 = "⊛"; -const ocir$2 = "ô"; -const ocirc$2 = "ô"; -const ocy$2 = "о"; -const odash$2 = "⊝"; -const odblac$2 = "ő"; -const odiv$2 = "⨸"; -const odot$2 = "⊙"; -const odsold$2 = "⦼"; -const oelig$2 = "œ"; -const ofcir$2 = "⦿"; -const ofr$2 = "𝔬"; -const ogon$2 = "˛"; -const ograv$2 = "ò"; -const ograve$2 = "ò"; -const ogt$2 = "⧁"; -const ohbar$2 = "⦵"; -const ohm$2 = "Ω"; -const oint$2 = "∮"; -const olarr$2 = "↺"; -const olcir$2 = "⦾"; -const olcross$2 = "⦻"; -const oline$2 = "‾"; -const olt$2 = "⧀"; -const omacr$2 = "ō"; -const omega$2 = "ω"; -const omicron$2 = "ο"; -const omid$2 = "⦶"; -const ominus$2 = "⊖"; -const oopf$2 = "𝕠"; -const opar$2 = "⦷"; -const operp$2 = "⦹"; -const oplus$2 = "⊕"; -const or$2 = "∨"; -const orarr$2 = "↻"; -const ord$2 = "º"; -const order$2 = "ℴ"; -const orderof$2 = "ℴ"; -const ordf$2 = "ª"; -const ordm$2 = "º"; -const origof$2 = "⊶"; -const oror$2 = "⩖"; -const orslope$2 = "⩗"; -const orv$2 = "⩛"; -const oscr$2 = "ℴ"; -const oslas$2 = "ø"; -const oslash$2 = "ø"; -const osol$2 = "⊘"; -const otild$2 = "õ"; -const otilde$2 = "õ"; -const otimes$2 = "⊗"; -const otimesas$2 = "⨶"; -const oum$2 = "ö"; -const ouml$2 = "ö"; -const ovbar$2 = "⌽"; -const par$2 = "¶"; -const para$2 = "¶"; -const parallel$2 = "∥"; -const parsim$2 = "⫳"; -const parsl$2 = "⫽"; -const part$2 = "∂"; -const pcy$2 = "п"; -const percnt$2 = "%"; -const period$2 = "."; -const permil$2 = "‰"; -const perp$2 = "⊥"; -const pertenk$2 = "‱"; -const pfr$2 = "𝔭"; -const phi$2 = "φ"; -const phiv$2 = "ϕ"; -const phmmat$2 = "ℳ"; -const phone$2 = "☎"; -const pi$2 = "π"; -const pitchfork$2 = "⋔"; -const piv$2 = "ϖ"; -const planck$2 = "ℏ"; -const planckh$2 = "ℎ"; -const plankv$2 = "ℏ"; -const plus$2 = "+"; -const plusacir$2 = "⨣"; -const plusb$2 = "⊞"; -const pluscir$2 = "⨢"; -const plusdo$2 = "∔"; -const plusdu$2 = "⨥"; -const pluse$2 = "⩲"; -const plusm$2 = "±"; -const plusmn$2 = "±"; -const plussim$2 = "⨦"; -const plustwo$2 = "⨧"; -const pm$2 = "±"; -const pointint$2 = "⨕"; -const popf$2 = "𝕡"; -const poun$2 = "£"; -const pound$2 = "£"; -const pr$2 = "≺"; -const prE$2 = "⪳"; -const prap$2 = "⪷"; -const prcue$2 = "≼"; -const pre$2 = "⪯"; -const prec$2 = "≺"; -const precapprox$2 = "⪷"; -const preccurlyeq$2 = "≼"; -const preceq$2 = "⪯"; -const precnapprox$2 = "⪹"; -const precneqq$2 = "⪵"; -const precnsim$2 = "⋨"; -const precsim$2 = "≾"; -const prime$2 = "′"; -const primes$2 = "ℙ"; -const prnE$2 = "⪵"; -const prnap$2 = "⪹"; -const prnsim$2 = "⋨"; -const prod$2 = "∏"; -const profalar$2 = "⌮"; -const profline$2 = "⌒"; -const profsurf$2 = "⌓"; -const prop$2 = "∝"; -const propto$2 = "∝"; -const prsim$2 = "≾"; -const prurel$2 = "⊰"; -const pscr$2 = "𝓅"; -const psi$2 = "ψ"; -const puncsp$2 = " "; -const qfr$2 = "𝔮"; -const qint$2 = "⨌"; -const qopf$2 = "𝕢"; -const qprime$2 = "⁗"; -const qscr$2 = "𝓆"; -const quaternions$2 = "ℍ"; -const quatint$2 = "⨖"; -const quest$2 = "?"; -const questeq$2 = "≟"; -const quo$2 = "\""; -const quot$2 = "\""; -const rAarr$2 = "⇛"; -const rArr$2 = "⇒"; -const rAtail$2 = "⤜"; -const rBarr$2 = "⤏"; -const rHar$2 = "⥤"; -const race$2 = "∽̱"; -const racute$2 = "ŕ"; -const radic$2 = "√"; -const raemptyv$2 = "⦳"; -const rang$2 = "⟩"; -const rangd$2 = "⦒"; -const range$2 = "⦥"; -const rangle$2 = "⟩"; -const raqu$2 = "»"; -const raquo$2 = "»"; -const rarr$2 = "→"; -const rarrap$2 = "⥵"; -const rarrb$2 = "⇥"; -const rarrbfs$2 = "⤠"; -const rarrc$2 = "⤳"; -const rarrfs$2 = "⤞"; -const rarrhk$2 = "↪"; -const rarrlp$2 = "↬"; -const rarrpl$2 = "⥅"; -const rarrsim$2 = "⥴"; -const rarrtl$2 = "↣"; -const rarrw$2 = "↝"; -const ratail$2 = "⤚"; -const ratio$2 = "∶"; -const rationals$2 = "ℚ"; -const rbarr$2 = "⤍"; -const rbbrk$2 = "❳"; -const rbrace$2 = "}"; -const rbrack$2 = "]"; -const rbrke$2 = "⦌"; -const rbrksld$2 = "⦎"; -const rbrkslu$2 = "⦐"; -const rcaron$2 = "ř"; -const rcedil$2 = "ŗ"; -const rceil$2 = "⌉"; -const rcub$2 = "}"; -const rcy$2 = "р"; -const rdca$2 = "⤷"; -const rdldhar$2 = "⥩"; -const rdquo$2 = "”"; -const rdquor$2 = "”"; -const rdsh$2 = "↳"; -const real$2 = "ℜ"; -const realine$2 = "ℛ"; -const realpart$2 = "ℜ"; -const reals$2 = "ℝ"; -const rect$2 = "▭"; -const re$6 = "®"; -const reg$2 = "®"; -const rfisht$2 = "⥽"; -const rfloor$2 = "⌋"; -const rfr$2 = "𝔯"; -const rhard$2 = "⇁"; -const rharu$2 = "⇀"; -const rharul$2 = "⥬"; -const rho$2 = "ρ"; -const rhov$2 = "ϱ"; -const rightarrow$2 = "→"; -const rightarrowtail$2 = "↣"; -const rightharpoondown$2 = "⇁"; -const rightharpoonup$2 = "⇀"; -const rightleftarrows$2 = "⇄"; -const rightleftharpoons$2 = "⇌"; -const rightrightarrows$2 = "⇉"; -const rightsquigarrow$2 = "↝"; -const rightthreetimes$2 = "⋌"; -const ring$2 = "˚"; -const risingdotseq$2 = "≓"; -const rlarr$2 = "⇄"; -const rlhar$2 = "⇌"; -const rlm$2 = "‏"; -const rmoust$2 = "⎱"; -const rmoustache$2 = "⎱"; -const rnmid$2 = "⫮"; -const roang$2 = "⟭"; -const roarr$2 = "⇾"; -const robrk$2 = "⟧"; -const ropar$2 = "⦆"; -const ropf$2 = "𝕣"; -const roplus$2 = "⨮"; -const rotimes$2 = "⨵"; -const rpar$2 = ")"; -const rpargt$2 = "⦔"; -const rppolint$2 = "⨒"; -const rrarr$2 = "⇉"; -const rsaquo$2 = "›"; -const rscr$2 = "𝓇"; -const rsh$2 = "↱"; -const rsqb$2 = "]"; -const rsquo$2 = "’"; -const rsquor$2 = "’"; -const rthree$2 = "⋌"; -const rtimes$2 = "⋊"; -const rtri$2 = "▹"; -const rtrie$2 = "⊵"; -const rtrif$2 = "▸"; -const rtriltri$2 = "⧎"; -const ruluhar$2 = "⥨"; -const rx$2 = "℞"; -const sacute$2 = "ś"; -const sbquo$2 = "‚"; -const sc$2 = "≻"; -const scE$2 = "⪴"; -const scap$2 = "⪸"; -const scaron$2 = "š"; -const sccue$2 = "≽"; -const sce$2 = "⪰"; -const scedil$2 = "ş"; -const scirc$2 = "ŝ"; -const scnE$2 = "⪶"; -const scnap$2 = "⪺"; -const scnsim$2 = "⋩"; -const scpolint$2 = "⨓"; -const scsim$2 = "≿"; -const scy$2 = "с"; -const sdot$2 = "⋅"; -const sdotb$2 = "⊡"; -const sdote$2 = "⩦"; -const seArr$2 = "⇘"; -const searhk$2 = "⤥"; -const searr$2 = "↘"; -const searrow$2 = "↘"; -const sec$2 = "§"; -const sect$2 = "§"; -const semi$2 = ";"; -const seswar$2 = "⤩"; -const setminus$2 = "∖"; -const setmn$2 = "∖"; -const sext$2 = "✶"; -const sfr$2 = "𝔰"; -const sfrown$2 = "⌢"; -const sharp$2 = "♯"; -const shchcy$2 = "щ"; -const shcy$2 = "ш"; -const shortmid$2 = "∣"; -const shortparallel$2 = "∥"; -const sh$2 = "­"; -const shy$2 = "­"; -const sigma$2 = "σ"; -const sigmaf$2 = "ς"; -const sigmav$2 = "ς"; -const sim$2 = "∼"; -const simdot$2 = "⩪"; -const sime$2 = "≃"; -const simeq$2 = "≃"; -const simg$2 = "⪞"; -const simgE$2 = "⪠"; -const siml$2 = "⪝"; -const simlE$2 = "⪟"; -const simne$2 = "≆"; -const simplus$2 = "⨤"; -const simrarr$2 = "⥲"; -const slarr$2 = "←"; -const smallsetminus$2 = "∖"; -const smashp$2 = "⨳"; -const smeparsl$2 = "⧤"; -const smid$2 = "∣"; -const smile$2 = "⌣"; -const smt$2 = "⪪"; -const smte$2 = "⪬"; -const smtes$2 = "⪬︀"; -const softcy$2 = "ь"; -const sol$2 = "/"; -const solb$2 = "⧄"; -const solbar$2 = "⌿"; -const sopf$2 = "𝕤"; -const spades$2 = "♠"; -const spadesuit$2 = "♠"; -const spar$2 = "∥"; -const sqcap$2 = "⊓"; -const sqcaps$2 = "⊓︀"; -const sqcup$2 = "⊔"; -const sqcups$2 = "⊔︀"; -const sqsub$2 = "⊏"; -const sqsube$2 = "⊑"; -const sqsubset$2 = "⊏"; -const sqsubseteq$2 = "⊑"; -const sqsup$2 = "⊐"; -const sqsupe$2 = "⊒"; -const sqsupset$2 = "⊐"; -const sqsupseteq$2 = "⊒"; -const squ$2 = "□"; -const square$2 = "□"; -const squarf$2 = "▪"; -const squf$2 = "▪"; -const srarr$2 = "→"; -const sscr$2 = "𝓈"; -const ssetmn$2 = "∖"; -const ssmile$2 = "⌣"; -const sstarf$2 = "⋆"; -const star$2 = "☆"; -const starf$2 = "★"; -const straightepsilon$2 = "ϵ"; -const straightphi$2 = "ϕ"; -const strns$2 = "¯"; -const sub$2 = "⊂"; -const subE$2 = "⫅"; -const subdot$2 = "⪽"; -const sube$2 = "⊆"; -const subedot$2 = "⫃"; -const submult$2 = "⫁"; -const subnE$2 = "⫋"; -const subne$2 = "⊊"; -const subplus$2 = "⪿"; -const subrarr$2 = "⥹"; -const subset$2 = "⊂"; -const subseteq$2 = "⊆"; -const subseteqq$2 = "⫅"; -const subsetneq$2 = "⊊"; -const subsetneqq$2 = "⫋"; -const subsim$2 = "⫇"; -const subsub$2 = "⫕"; -const subsup$2 = "⫓"; -const succ$2 = "≻"; -const succapprox$2 = "⪸"; -const succcurlyeq$2 = "≽"; -const succeq$2 = "⪰"; -const succnapprox$2 = "⪺"; -const succneqq$2 = "⪶"; -const succnsim$2 = "⋩"; -const succsim$2 = "≿"; -const sum$2 = "∑"; -const sung$2 = "♪"; -const sup$2 = "⊃"; -const sup1$2 = "¹"; -const sup2$2 = "²"; -const sup3$2 = "³"; -const supE$2 = "⫆"; -const supdot$2 = "⪾"; -const supdsub$2 = "⫘"; -const supe$2 = "⊇"; -const supedot$2 = "⫄"; -const suphsol$2 = "⟉"; -const suphsub$2 = "⫗"; -const suplarr$2 = "⥻"; -const supmult$2 = "⫂"; -const supnE$2 = "⫌"; -const supne$2 = "⊋"; -const supplus$2 = "⫀"; -const supset$2 = "⊃"; -const supseteq$2 = "⊇"; -const supseteqq$2 = "⫆"; -const supsetneq$2 = "⊋"; -const supsetneqq$2 = "⫌"; -const supsim$2 = "⫈"; -const supsub$2 = "⫔"; -const supsup$2 = "⫖"; -const swArr$2 = "⇙"; -const swarhk$2 = "⤦"; -const swarr$2 = "↙"; -const swarrow$2 = "↙"; -const swnwar$2 = "⤪"; -const szli$2 = "ß"; -const szlig$2 = "ß"; -const target$2 = "⌖"; -const tau$2 = "τ"; -const tbrk$2 = "⎴"; -const tcaron$2 = "ť"; -const tcedil$2 = "ţ"; -const tcy$2 = "т"; -const tdot$2 = "⃛"; -const telrec$2 = "⌕"; -const tfr$2 = "𝔱"; -const there4$2 = "∴"; -const therefore$2 = "∴"; -const theta$2 = "θ"; -const thetasym$2 = "ϑ"; -const thetav$2 = "ϑ"; -const thickapprox$2 = "≈"; -const thicksim$2 = "∼"; -const thinsp$2 = " "; -const thkap$2 = "≈"; -const thksim$2 = "∼"; -const thor$2 = "þ"; -const thorn$2 = "þ"; -const tilde$2 = "˜"; -const time$2 = "×"; -const times$2 = "×"; -const timesb$2 = "⊠"; -const timesbar$2 = "⨱"; -const timesd$2 = "⨰"; -const tint$2 = "∭"; -const toea$2 = "⤨"; -const top$2 = "⊤"; -const topbot$2 = "⌶"; -const topcir$2 = "⫱"; -const topf$2 = "𝕥"; -const topfork$2 = "⫚"; -const tosa$2 = "⤩"; -const tprime$2 = "‴"; -const trade$2 = "™"; -const triangle$2 = "▵"; -const triangledown$2 = "▿"; -const triangleleft$2 = "◃"; -const trianglelefteq$2 = "⊴"; -const triangleq$2 = "≜"; -const triangleright$2 = "▹"; -const trianglerighteq$2 = "⊵"; -const tridot$2 = "◬"; -const trie$2 = "≜"; -const triminus$2 = "⨺"; -const triplus$2 = "⨹"; -const trisb$2 = "⧍"; -const tritime$2 = "⨻"; -const trpezium$2 = "⏢"; -const tscr$2 = "𝓉"; -const tscy$2 = "ц"; -const tshcy$2 = "ћ"; -const tstrok$2 = "ŧ"; -const twixt$2 = "≬"; -const twoheadleftarrow$2 = "↞"; -const twoheadrightarrow$2 = "↠"; -const uArr$2 = "⇑"; -const uHar$2 = "⥣"; -const uacut$2 = "ú"; -const uacute$2 = "ú"; -const uarr$2 = "↑"; -const ubrcy$2 = "ў"; -const ubreve$2 = "ŭ"; -const ucir$2 = "û"; -const ucirc$2 = "û"; -const ucy$2 = "у"; -const udarr$2 = "⇅"; -const udblac$2 = "ű"; -const udhar$2 = "⥮"; -const ufisht$2 = "⥾"; -const ufr$2 = "𝔲"; -const ugrav$2 = "ù"; -const ugrave$2 = "ù"; -const uharl$2 = "↿"; -const uharr$2 = "↾"; -const uhblk$2 = "▀"; -const ulcorn$2 = "⌜"; -const ulcorner$2 = "⌜"; -const ulcrop$2 = "⌏"; -const ultri$2 = "◸"; -const umacr$2 = "ū"; -const um$2 = "¨"; -const uml$2 = "¨"; -const uogon$2 = "ų"; -const uopf$2 = "𝕦"; -const uparrow$2 = "↑"; -const updownarrow$2 = "↕"; -const upharpoonleft$2 = "↿"; -const upharpoonright$2 = "↾"; -const uplus$2 = "⊎"; -const upsi$2 = "υ"; -const upsih$2 = "ϒ"; -const upsilon$2 = "υ"; -const upuparrows$2 = "⇈"; -const urcorn$2 = "⌝"; -const urcorner$2 = "⌝"; -const urcrop$2 = "⌎"; -const uring$2 = "ů"; -const urtri$2 = "◹"; -const uscr$2 = "𝓊"; -const utdot$2 = "⋰"; -const utilde$2 = "ũ"; -const utri$2 = "▵"; -const utrif$2 = "▴"; -const uuarr$2 = "⇈"; -const uum$2 = "ü"; -const uuml$2 = "ü"; -const uwangle$2 = "⦧"; -const vArr$2 = "⇕"; -const vBar$2 = "⫨"; -const vBarv$2 = "⫩"; -const vDash$2 = "⊨"; -const vangrt$2 = "⦜"; -const varepsilon$2 = "ϵ"; -const varkappa$2 = "ϰ"; -const varnothing$2 = "∅"; -const varphi$2 = "ϕ"; -const varpi$2 = "ϖ"; -const varpropto$2 = "∝"; -const varr$2 = "↕"; -const varrho$2 = "ϱ"; -const varsigma$2 = "ς"; -const varsubsetneq$2 = "⊊︀"; -const varsubsetneqq$2 = "⫋︀"; -const varsupsetneq$2 = "⊋︀"; -const varsupsetneqq$2 = "⫌︀"; -const vartheta$2 = "ϑ"; -const vartriangleleft$2 = "⊲"; -const vartriangleright$2 = "⊳"; -const vcy$2 = "в"; -const vdash$2 = "⊢"; -const vee$2 = "∨"; -const veebar$2 = "⊻"; -const veeeq$2 = "≚"; -const vellip$2 = "⋮"; -const verbar$2 = "|"; -const vert$2 = "|"; -const vfr$2 = "𝔳"; -const vltri$2 = "⊲"; -const vnsub$2 = "⊂⃒"; -const vnsup$2 = "⊃⃒"; -const vopf$2 = "𝕧"; -const vprop$2 = "∝"; -const vrtri$2 = "⊳"; -const vscr$2 = "𝓋"; -const vsubnE$2 = "⫋︀"; -const vsubne$2 = "⊊︀"; -const vsupnE$2 = "⫌︀"; -const vsupne$2 = "⊋︀"; -const vzigzag$2 = "⦚"; -const wcirc$2 = "ŵ"; -const wedbar$2 = "⩟"; -const wedge$2 = "∧"; -const wedgeq$2 = "≙"; -const weierp$2 = "℘"; -const wfr$2 = "𝔴"; -const wopf$2 = "𝕨"; -const wp$2 = "℘"; -const wr$2 = "≀"; -const wreath$2 = "≀"; -const wscr$2 = "𝓌"; -const xcap$2 = "⋂"; -const xcirc$2 = "◯"; -const xcup$2 = "⋃"; -const xdtri$2 = "▽"; -const xfr$2 = "𝔵"; -const xhArr$2 = "⟺"; -const xharr$2 = "⟷"; -const xi$2 = "ξ"; -const xlArr$2 = "⟸"; -const xlarr$2 = "⟵"; -const xmap$2 = "⟼"; -const xnis$2 = "⋻"; -const xodot$2 = "⨀"; -const xopf$2 = "𝕩"; -const xoplus$2 = "⨁"; -const xotime$2 = "⨂"; -const xrArr$2 = "⟹"; -const xrarr$2 = "⟶"; -const xscr$2 = "𝓍"; -const xsqcup$2 = "⨆"; -const xuplus$2 = "⨄"; -const xutri$2 = "△"; -const xvee$2 = "⋁"; -const xwedge$2 = "⋀"; -const yacut$2 = "ý"; -const yacute$2 = "ý"; -const yacy$2 = "я"; -const ycirc$2 = "ŷ"; -const ycy$2 = "ы"; -const ye$2 = "¥"; -const yen$2 = "¥"; -const yfr$2 = "𝔶"; -const yicy$2 = "ї"; -const yopf$2 = "𝕪"; -const yscr$2 = "𝓎"; -const yucy$2 = "ю"; -const yum$2 = "ÿ"; -const yuml$2 = "ÿ"; -const zacute$2 = "ź"; -const zcaron$2 = "ž"; -const zcy$2 = "з"; -const zdot$2 = "ż"; -const zeetrf$2 = "ℨ"; -const zeta$2 = "ζ"; -const zfr$2 = "𝔷"; -const zhcy$2 = "ж"; -const zigrarr$2 = "⇝"; -const zopf$2 = "𝕫"; -const zscr$2 = "𝓏"; -const zwj$2 = "‍"; -const zwnj$2 = "‌"; -var require$$0$2 = { - AEli: AEli$2, - AElig: AElig$2, - AM: AM$2, - AMP: AMP$2, - Aacut: Aacut$2, - Aacute: Aacute$2, - Abreve: Abreve$2, - Acir: Acir$2, - Acirc: Acirc$2, - Acy: Acy$2, - Afr: Afr$2, - Agrav: Agrav$2, - Agrave: Agrave$2, - Alpha: Alpha$2, - Amacr: Amacr$2, - And: And$2, - Aogon: Aogon$2, - Aopf: Aopf$2, - ApplyFunction: ApplyFunction$2, - Arin: Arin$2, - Aring: Aring$2, - Ascr: Ascr$2, - Assign: Assign$2, - Atild: Atild$2, - Atilde: Atilde$2, - Aum: Aum$2, - Auml: Auml$2, - Backslash: Backslash$2, - Barv: Barv$2, - Barwed: Barwed$2, - Bcy: Bcy$2, - Because: Because$2, - Bernoullis: Bernoullis$2, - Beta: Beta$2, - Bfr: Bfr$2, - Bopf: Bopf$2, - Breve: Breve$2, - Bscr: Bscr$2, - Bumpeq: Bumpeq$2, - CHcy: CHcy$2, - COP: COP$2, - COPY: COPY$2, - Cacute: Cacute$2, - Cap: Cap$2, - CapitalDifferentialD: CapitalDifferentialD$2, - Cayleys: Cayleys$2, - Ccaron: Ccaron$2, - Ccedi: Ccedi$2, - Ccedil: Ccedil$2, - Ccirc: Ccirc$2, - Cconint: Cconint$2, - Cdot: Cdot$2, - Cedilla: Cedilla$2, - CenterDot: CenterDot$2, - Cfr: Cfr$2, - Chi: Chi$2, - CircleDot: CircleDot$2, - CircleMinus: CircleMinus$2, - CirclePlus: CirclePlus$2, - CircleTimes: CircleTimes$2, - ClockwiseContourIntegral: ClockwiseContourIntegral$2, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote$2, - CloseCurlyQuote: CloseCurlyQuote$2, - Colon: Colon$2, - Colone: Colone$2, - Congruent: Congruent$2, - Conint: Conint$2, - ContourIntegral: ContourIntegral$2, - Copf: Copf$2, - Coproduct: Coproduct$2, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral$2, - Cross: Cross$2, - Cscr: Cscr$2, - Cup: Cup$2, - CupCap: CupCap$2, - DD: DD$2, - DDotrahd: DDotrahd$2, - DJcy: DJcy$2, - DScy: DScy$2, - DZcy: DZcy$2, - Dagger: Dagger$2, - Darr: Darr$2, - Dashv: Dashv$2, - Dcaron: Dcaron$2, - Dcy: Dcy$2, - Del: Del$2, - Delta: Delta$2, - Dfr: Dfr$2, - DiacriticalAcute: DiacriticalAcute$2, - DiacriticalDot: DiacriticalDot$2, - DiacriticalDoubleAcute: DiacriticalDoubleAcute$2, - DiacriticalGrave: DiacriticalGrave$2, - DiacriticalTilde: DiacriticalTilde$2, - Diamond: Diamond$2, - DifferentialD: DifferentialD$2, - Dopf: Dopf$2, - Dot: Dot$2, - DotDot: DotDot$2, - DotEqual: DotEqual$2, - DoubleContourIntegral: DoubleContourIntegral$2, - DoubleDot: DoubleDot$2, - DoubleDownArrow: DoubleDownArrow$2, - DoubleLeftArrow: DoubleLeftArrow$2, - DoubleLeftRightArrow: DoubleLeftRightArrow$2, - DoubleLeftTee: DoubleLeftTee$2, - DoubleLongLeftArrow: DoubleLongLeftArrow$2, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow$2, - DoubleLongRightArrow: DoubleLongRightArrow$2, - DoubleRightArrow: DoubleRightArrow$2, - DoubleRightTee: DoubleRightTee$2, - DoubleUpArrow: DoubleUpArrow$2, - DoubleUpDownArrow: DoubleUpDownArrow$2, - DoubleVerticalBar: DoubleVerticalBar$2, - DownArrow: DownArrow$2, - DownArrowBar: DownArrowBar$2, - DownArrowUpArrow: DownArrowUpArrow$2, - DownBreve: DownBreve$2, - DownLeftRightVector: DownLeftRightVector$2, - DownLeftTeeVector: DownLeftTeeVector$2, - DownLeftVector: DownLeftVector$2, - DownLeftVectorBar: DownLeftVectorBar$2, - DownRightTeeVector: DownRightTeeVector$2, - DownRightVector: DownRightVector$2, - DownRightVectorBar: DownRightVectorBar$2, - DownTee: DownTee$2, - DownTeeArrow: DownTeeArrow$2, - Downarrow: Downarrow$2, - Dscr: Dscr$2, - Dstrok: Dstrok$2, - ENG: ENG$2, - ET: ET$2, - ETH: ETH$2, - Eacut: Eacut$2, - Eacute: Eacute$2, - Ecaron: Ecaron$2, - Ecir: Ecir$2, - Ecirc: Ecirc$2, - Ecy: Ecy$2, - Edot: Edot$2, - Efr: Efr$2, - Egrav: Egrav$2, - Egrave: Egrave$2, - Element: Element$2, - Emacr: Emacr$2, - EmptySmallSquare: EmptySmallSquare$2, - EmptyVerySmallSquare: EmptyVerySmallSquare$2, - Eogon: Eogon$2, - Eopf: Eopf$2, - Epsilon: Epsilon$2, - Equal: Equal$2, - EqualTilde: EqualTilde$2, - Equilibrium: Equilibrium$2, - Escr: Escr$2, - Esim: Esim$2, - Eta: Eta$2, - Eum: Eum$2, - Euml: Euml$2, - Exists: Exists$2, - ExponentialE: ExponentialE$2, - Fcy: Fcy$2, - Ffr: Ffr$2, - FilledSmallSquare: FilledSmallSquare$2, - FilledVerySmallSquare: FilledVerySmallSquare$2, - Fopf: Fopf$2, - ForAll: ForAll$2, - Fouriertrf: Fouriertrf$2, - Fscr: Fscr$2, - GJcy: GJcy$2, - G: G$2, - GT: GT$2, - Gamma: Gamma$2, - Gammad: Gammad$2, - Gbreve: Gbreve$2, - Gcedil: Gcedil$2, - Gcirc: Gcirc$2, - Gcy: Gcy$2, - Gdot: Gdot$2, - Gfr: Gfr$2, - Gg: Gg$2, - Gopf: Gopf$2, - GreaterEqual: GreaterEqual$2, - GreaterEqualLess: GreaterEqualLess$2, - GreaterFullEqual: GreaterFullEqual$2, - GreaterGreater: GreaterGreater$2, - GreaterLess: GreaterLess$2, - GreaterSlantEqual: GreaterSlantEqual$2, - GreaterTilde: GreaterTilde$2, - Gscr: Gscr$2, - Gt: Gt$2, - HARDcy: HARDcy$2, - Hacek: Hacek$2, - Hat: Hat$2, - Hcirc: Hcirc$2, - Hfr: Hfr$2, - HilbertSpace: HilbertSpace$2, - Hopf: Hopf$2, - HorizontalLine: HorizontalLine$2, - Hscr: Hscr$2, - Hstrok: Hstrok$2, - HumpDownHump: HumpDownHump$2, - HumpEqual: HumpEqual$2, - IEcy: IEcy$2, - IJlig: IJlig$2, - IOcy: IOcy$2, - Iacut: Iacut$2, - Iacute: Iacute$2, - Icir: Icir$2, - Icirc: Icirc$2, - Icy: Icy$2, - Idot: Idot$2, - Ifr: Ifr$2, - Igrav: Igrav$2, - Igrave: Igrave$2, - Im: Im$2, - Imacr: Imacr$2, - ImaginaryI: ImaginaryI$2, - Implies: Implies$2, - Int: Int$2, - Integral: Integral$2, - Intersection: Intersection$2, - InvisibleComma: InvisibleComma$2, - InvisibleTimes: InvisibleTimes$2, - Iogon: Iogon$2, - Iopf: Iopf$2, - Iota: Iota$2, - Iscr: Iscr$2, - Itilde: Itilde$2, - Iukcy: Iukcy$2, - Ium: Ium$2, - Iuml: Iuml$2, - Jcirc: Jcirc$2, - Jcy: Jcy$2, - Jfr: Jfr$2, - Jopf: Jopf$2, - Jscr: Jscr$2, - Jsercy: Jsercy$2, - Jukcy: Jukcy$2, - KHcy: KHcy$2, - KJcy: KJcy$2, - Kappa: Kappa$2, - Kcedil: Kcedil$2, - Kcy: Kcy$2, - Kfr: Kfr$2, - Kopf: Kopf$2, - Kscr: Kscr$2, - LJcy: LJcy$2, - L: L$2, - LT: LT$2, - Lacute: Lacute$2, - Lambda: Lambda$2, - Lang: Lang$2, - Laplacetrf: Laplacetrf$2, - Larr: Larr$2, - Lcaron: Lcaron$2, - Lcedil: Lcedil$2, - Lcy: Lcy$2, - LeftAngleBracket: LeftAngleBracket$2, - LeftArrow: LeftArrow$2, - LeftArrowBar: LeftArrowBar$2, - LeftArrowRightArrow: LeftArrowRightArrow$2, - LeftCeiling: LeftCeiling$2, - LeftDoubleBracket: LeftDoubleBracket$2, - LeftDownTeeVector: LeftDownTeeVector$2, - LeftDownVector: LeftDownVector$2, - LeftDownVectorBar: LeftDownVectorBar$2, - LeftFloor: LeftFloor$2, - LeftRightArrow: LeftRightArrow$2, - LeftRightVector: LeftRightVector$2, - LeftTee: LeftTee$2, - LeftTeeArrow: LeftTeeArrow$2, - LeftTeeVector: LeftTeeVector$2, - LeftTriangle: LeftTriangle$2, - LeftTriangleBar: LeftTriangleBar$2, - LeftTriangleEqual: LeftTriangleEqual$2, - LeftUpDownVector: LeftUpDownVector$2, - LeftUpTeeVector: LeftUpTeeVector$2, - LeftUpVector: LeftUpVector$2, - LeftUpVectorBar: LeftUpVectorBar$2, - LeftVector: LeftVector$2, - LeftVectorBar: LeftVectorBar$2, - Leftarrow: Leftarrow$2, - Leftrightarrow: Leftrightarrow$2, - LessEqualGreater: LessEqualGreater$2, - LessFullEqual: LessFullEqual$2, - LessGreater: LessGreater$2, - LessLess: LessLess$2, - LessSlantEqual: LessSlantEqual$2, - LessTilde: LessTilde$2, - Lfr: Lfr$2, - Ll: Ll$2, - Lleftarrow: Lleftarrow$2, - Lmidot: Lmidot$2, - LongLeftArrow: LongLeftArrow$2, - LongLeftRightArrow: LongLeftRightArrow$2, - LongRightArrow: LongRightArrow$2, - Longleftarrow: Longleftarrow$2, - Longleftrightarrow: Longleftrightarrow$2, - Longrightarrow: Longrightarrow$2, - Lopf: Lopf$2, - LowerLeftArrow: LowerLeftArrow$2, - LowerRightArrow: LowerRightArrow$2, - Lscr: Lscr$2, - Lsh: Lsh$2, - Lstrok: Lstrok$2, - Lt: Lt$2, - "Map": "⤅", - Mcy: Mcy$2, - MediumSpace: MediumSpace$2, - Mellintrf: Mellintrf$2, - Mfr: Mfr$2, - MinusPlus: MinusPlus$2, - Mopf: Mopf$2, - Mscr: Mscr$2, - Mu: Mu$2, - NJcy: NJcy$2, - Nacute: Nacute$2, - Ncaron: Ncaron$2, - Ncedil: Ncedil$2, - Ncy: Ncy$2, - NegativeMediumSpace: NegativeMediumSpace$2, - NegativeThickSpace: NegativeThickSpace$2, - NegativeThinSpace: NegativeThinSpace$2, - NegativeVeryThinSpace: NegativeVeryThinSpace$2, - NestedGreaterGreater: NestedGreaterGreater$2, - NestedLessLess: NestedLessLess$2, - NewLine: NewLine$2, - Nfr: Nfr$2, - NoBreak: NoBreak$2, - NonBreakingSpace: NonBreakingSpace$2, - Nopf: Nopf$2, - Not: Not$2, - NotCongruent: NotCongruent$2, - NotCupCap: NotCupCap$2, - NotDoubleVerticalBar: NotDoubleVerticalBar$2, - NotElement: NotElement$2, - NotEqual: NotEqual$2, - NotEqualTilde: NotEqualTilde$2, - NotExists: NotExists$2, - NotGreater: NotGreater$2, - NotGreaterEqual: NotGreaterEqual$2, - NotGreaterFullEqual: NotGreaterFullEqual$2, - NotGreaterGreater: NotGreaterGreater$2, - NotGreaterLess: NotGreaterLess$2, - NotGreaterSlantEqual: NotGreaterSlantEqual$2, - NotGreaterTilde: NotGreaterTilde$2, - NotHumpDownHump: NotHumpDownHump$2, - NotHumpEqual: NotHumpEqual$2, - NotLeftTriangle: NotLeftTriangle$2, - NotLeftTriangleBar: NotLeftTriangleBar$2, - NotLeftTriangleEqual: NotLeftTriangleEqual$2, - NotLess: NotLess$2, - NotLessEqual: NotLessEqual$2, - NotLessGreater: NotLessGreater$2, - NotLessLess: NotLessLess$2, - NotLessSlantEqual: NotLessSlantEqual$2, - NotLessTilde: NotLessTilde$2, - NotNestedGreaterGreater: NotNestedGreaterGreater$2, - NotNestedLessLess: NotNestedLessLess$2, - NotPrecedes: NotPrecedes$2, - NotPrecedesEqual: NotPrecedesEqual$2, - NotPrecedesSlantEqual: NotPrecedesSlantEqual$2, - NotReverseElement: NotReverseElement$2, - NotRightTriangle: NotRightTriangle$2, - NotRightTriangleBar: NotRightTriangleBar$2, - NotRightTriangleEqual: NotRightTriangleEqual$2, - NotSquareSubset: NotSquareSubset$2, - NotSquareSubsetEqual: NotSquareSubsetEqual$2, - NotSquareSuperset: NotSquareSuperset$2, - NotSquareSupersetEqual: NotSquareSupersetEqual$2, - NotSubset: NotSubset$2, - NotSubsetEqual: NotSubsetEqual$2, - NotSucceeds: NotSucceeds$2, - NotSucceedsEqual: NotSucceedsEqual$2, - NotSucceedsSlantEqual: NotSucceedsSlantEqual$2, - NotSucceedsTilde: NotSucceedsTilde$2, - NotSuperset: NotSuperset$2, - NotSupersetEqual: NotSupersetEqual$2, - NotTilde: NotTilde$2, - NotTildeEqual: NotTildeEqual$2, - NotTildeFullEqual: NotTildeFullEqual$2, - NotTildeTilde: NotTildeTilde$2, - NotVerticalBar: NotVerticalBar$2, - Nscr: Nscr$2, - Ntild: Ntild$2, - Ntilde: Ntilde$2, - Nu: Nu$2, - OElig: OElig$2, - Oacut: Oacut$2, - Oacute: Oacute$2, - Ocir: Ocir$2, - Ocirc: Ocirc$2, - Ocy: Ocy$2, - Odblac: Odblac$2, - Ofr: Ofr$2, - Ograv: Ograv$2, - Ograve: Ograve$2, - Omacr: Omacr$2, - Omega: Omega$2, - Omicron: Omicron$2, - Oopf: Oopf$2, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote$2, - OpenCurlyQuote: OpenCurlyQuote$2, - Or: Or$2, - Oscr: Oscr$2, - Oslas: Oslas$2, - Oslash: Oslash$2, - Otild: Otild$2, - Otilde: Otilde$2, - Otimes: Otimes$2, - Oum: Oum$2, - Ouml: Ouml$2, - OverBar: OverBar$2, - OverBrace: OverBrace$2, - OverBracket: OverBracket$2, - OverParenthesis: OverParenthesis$2, - PartialD: PartialD$2, - Pcy: Pcy$2, - Pfr: Pfr$2, - Phi: Phi$2, - Pi: Pi$2, - PlusMinus: PlusMinus$2, - Poincareplane: Poincareplane$2, - Popf: Popf$2, - Pr: Pr$2, - Precedes: Precedes$2, - PrecedesEqual: PrecedesEqual$2, - PrecedesSlantEqual: PrecedesSlantEqual$2, - PrecedesTilde: PrecedesTilde$2, - Prime: Prime$2, - Product: Product$2, - Proportion: Proportion$2, - Proportional: Proportional$2, - Pscr: Pscr$2, - Psi: Psi$2, - QUO: QUO$2, - QUOT: QUOT$2, - Qfr: Qfr$2, - Qopf: Qopf$2, - Qscr: Qscr$2, - RBarr: RBarr$2, - RE: RE$2, - REG: REG$2, - Racute: Racute$2, - Rang: Rang$2, - Rarr: Rarr$2, - Rarrtl: Rarrtl$2, - Rcaron: Rcaron$2, - Rcedil: Rcedil$2, - Rcy: Rcy$2, - Re: Re$2, - ReverseElement: ReverseElement$2, - ReverseEquilibrium: ReverseEquilibrium$2, - ReverseUpEquilibrium: ReverseUpEquilibrium$2, - Rfr: Rfr$2, - Rho: Rho$2, - RightAngleBracket: RightAngleBracket$2, - RightArrow: RightArrow$2, - RightArrowBar: RightArrowBar$2, - RightArrowLeftArrow: RightArrowLeftArrow$2, - RightCeiling: RightCeiling$2, - RightDoubleBracket: RightDoubleBracket$2, - RightDownTeeVector: RightDownTeeVector$2, - RightDownVector: RightDownVector$2, - RightDownVectorBar: RightDownVectorBar$2, - RightFloor: RightFloor$2, - RightTee: RightTee$2, - RightTeeArrow: RightTeeArrow$2, - RightTeeVector: RightTeeVector$2, - RightTriangle: RightTriangle$2, - RightTriangleBar: RightTriangleBar$2, - RightTriangleEqual: RightTriangleEqual$2, - RightUpDownVector: RightUpDownVector$2, - RightUpTeeVector: RightUpTeeVector$2, - RightUpVector: RightUpVector$2, - RightUpVectorBar: RightUpVectorBar$2, - RightVector: RightVector$2, - RightVectorBar: RightVectorBar$2, - Rightarrow: Rightarrow$2, - Ropf: Ropf$2, - RoundImplies: RoundImplies$2, - Rrightarrow: Rrightarrow$2, - Rscr: Rscr$2, - Rsh: Rsh$2, - RuleDelayed: RuleDelayed$2, - SHCHcy: SHCHcy$2, - SHcy: SHcy$2, - SOFTcy: SOFTcy$2, - Sacute: Sacute$2, - Sc: Sc$2, - Scaron: Scaron$2, - Scedil: Scedil$2, - Scirc: Scirc$2, - Scy: Scy$2, - Sfr: Sfr$2, - ShortDownArrow: ShortDownArrow$2, - ShortLeftArrow: ShortLeftArrow$2, - ShortRightArrow: ShortRightArrow$2, - ShortUpArrow: ShortUpArrow$2, - Sigma: Sigma$2, - SmallCircle: SmallCircle$2, - Sopf: Sopf$2, - Sqrt: Sqrt$2, - Square: Square$2, - SquareIntersection: SquareIntersection$2, - SquareSubset: SquareSubset$2, - SquareSubsetEqual: SquareSubsetEqual$2, - SquareSuperset: SquareSuperset$2, - SquareSupersetEqual: SquareSupersetEqual$2, - SquareUnion: SquareUnion$2, - Sscr: Sscr$2, - Star: Star$2, - Sub: Sub$2, - Subset: Subset$2, - SubsetEqual: SubsetEqual$2, - Succeeds: Succeeds$2, - SucceedsEqual: SucceedsEqual$2, - SucceedsSlantEqual: SucceedsSlantEqual$2, - SucceedsTilde: SucceedsTilde$2, - SuchThat: SuchThat$2, - Sum: Sum$2, - Sup: Sup$2, - Superset: Superset$2, - SupersetEqual: SupersetEqual$2, - Supset: Supset$2, - THOR: THOR$2, - THORN: THORN$2, - TRADE: TRADE$2, - TSHcy: TSHcy$2, - TScy: TScy$2, - Tab: Tab$2, - Tau: Tau$2, - Tcaron: Tcaron$2, - Tcedil: Tcedil$2, - Tcy: Tcy$2, - Tfr: Tfr$2, - Therefore: Therefore$2, - Theta: Theta$2, - ThickSpace: ThickSpace$2, - ThinSpace: ThinSpace$2, - Tilde: Tilde$2, - TildeEqual: TildeEqual$2, - TildeFullEqual: TildeFullEqual$2, - TildeTilde: TildeTilde$2, - Topf: Topf$2, - TripleDot: TripleDot$2, - Tscr: Tscr$2, - Tstrok: Tstrok$2, - Uacut: Uacut$2, - Uacute: Uacute$2, - Uarr: Uarr$2, - Uarrocir: Uarrocir$2, - Ubrcy: Ubrcy$2, - Ubreve: Ubreve$2, - Ucir: Ucir$2, - Ucirc: Ucirc$2, - Ucy: Ucy$2, - Udblac: Udblac$2, - Ufr: Ufr$2, - Ugrav: Ugrav$2, - Ugrave: Ugrave$2, - Umacr: Umacr$2, - UnderBar: UnderBar$2, - UnderBrace: UnderBrace$2, - UnderBracket: UnderBracket$2, - UnderParenthesis: UnderParenthesis$2, - Union: Union$2, - UnionPlus: UnionPlus$2, - Uogon: Uogon$2, - Uopf: Uopf$2, - UpArrow: UpArrow$2, - UpArrowBar: UpArrowBar$2, - UpArrowDownArrow: UpArrowDownArrow$2, - UpDownArrow: UpDownArrow$2, - UpEquilibrium: UpEquilibrium$2, - UpTee: UpTee$2, - UpTeeArrow: UpTeeArrow$2, - Uparrow: Uparrow$2, - Updownarrow: Updownarrow$2, - UpperLeftArrow: UpperLeftArrow$2, - UpperRightArrow: UpperRightArrow$2, - Upsi: Upsi$2, - Upsilon: Upsilon$2, - Uring: Uring$2, - Uscr: Uscr$2, - Utilde: Utilde$2, - Uum: Uum$2, - Uuml: Uuml$2, - VDash: VDash$2, - Vbar: Vbar$2, - Vcy: Vcy$2, - Vdash: Vdash$2, - Vdashl: Vdashl$2, - Vee: Vee$2, - Verbar: Verbar$2, - Vert: Vert$2, - VerticalBar: VerticalBar$2, - VerticalLine: VerticalLine$2, - VerticalSeparator: VerticalSeparator$2, - VerticalTilde: VerticalTilde$2, - VeryThinSpace: VeryThinSpace$2, - Vfr: Vfr$2, - Vopf: Vopf$2, - Vscr: Vscr$2, - Vvdash: Vvdash$2, - Wcirc: Wcirc$2, - Wedge: Wedge$2, - Wfr: Wfr$2, - Wopf: Wopf$2, - Wscr: Wscr$2, - Xfr: Xfr$2, - Xi: Xi$2, - Xopf: Xopf$2, - Xscr: Xscr$2, - YAcy: YAcy$2, - YIcy: YIcy$2, - YUcy: YUcy$2, - Yacut: Yacut$2, - Yacute: Yacute$2, - Ycirc: Ycirc$2, - Ycy: Ycy$2, - Yfr: Yfr$2, - Yopf: Yopf$2, - Yscr: Yscr$2, - Yuml: Yuml$2, - ZHcy: ZHcy$2, - Zacute: Zacute$2, - Zcaron: Zcaron$2, - Zcy: Zcy$2, - Zdot: Zdot$2, - ZeroWidthSpace: ZeroWidthSpace$2, - Zeta: Zeta$2, - Zfr: Zfr$2, - Zopf: Zopf$2, - Zscr: Zscr$2, - aacut: aacut$2, - aacute: aacute$2, - abreve: abreve$2, - ac: ac$2, - acE: acE$2, - acd: acd$2, - acir: acir$2, - acirc: acirc$2, - acut: acut$2, - acute: acute$2, - acy: acy$2, - aeli: aeli$2, - aelig: aelig$2, - af: af$2, - afr: afr$2, - agrav: agrav$2, - agrave: agrave$2, - alefsym: alefsym$2, - aleph: aleph$2, - alpha: alpha$2, - amacr: amacr$2, - amalg: amalg$2, - am: am$2, - amp: amp$2, - and: and$2, - andand: andand$2, - andd: andd$2, - andslope: andslope$2, - andv: andv$2, - ang: ang$2, - ange: ange$2, - angle: angle$2, - angmsd: angmsd$2, - angmsdaa: angmsdaa$2, - angmsdab: angmsdab$2, - angmsdac: angmsdac$2, - angmsdad: angmsdad$2, - angmsdae: angmsdae$2, - angmsdaf: angmsdaf$2, - angmsdag: angmsdag$2, - angmsdah: angmsdah$2, - angrt: angrt$2, - angrtvb: angrtvb$2, - angrtvbd: angrtvbd$2, - angsph: angsph$2, - angst: angst$2, - angzarr: angzarr$2, - aogon: aogon$2, - aopf: aopf$2, - ap: ap$2, - apE: apE$2, - apacir: apacir$2, - ape: ape$2, - apid: apid$2, - apos: apos$2, - approx: approx$2, - approxeq: approxeq$2, - arin: arin$2, - aring: aring$2, - ascr: ascr$2, - ast: ast$2, - asymp: asymp$2, - asympeq: asympeq$2, - atild: atild$2, - atilde: atilde$2, - aum: aum$2, - auml: auml$2, - awconint: awconint$2, - awint: awint$2, - bNot: bNot$2, - backcong: backcong$2, - backepsilon: backepsilon$2, - backprime: backprime$2, - backsim: backsim$2, - backsimeq: backsimeq$2, - barvee: barvee$2, - barwed: barwed$2, - barwedge: barwedge$2, - bbrk: bbrk$2, - bbrktbrk: bbrktbrk$2, - bcong: bcong$2, - bcy: bcy$2, - bdquo: bdquo$2, - becaus: becaus$2, - because: because$2, - bemptyv: bemptyv$2, - bepsi: bepsi$2, - bernou: bernou$2, - beta: beta$2, - beth: beth$2, - between: between$2, - bfr: bfr$2, - bigcap: bigcap$2, - bigcirc: bigcirc$2, - bigcup: bigcup$2, - bigodot: bigodot$2, - bigoplus: bigoplus$2, - bigotimes: bigotimes$2, - bigsqcup: bigsqcup$2, - bigstar: bigstar$2, - bigtriangledown: bigtriangledown$2, - bigtriangleup: bigtriangleup$2, - biguplus: biguplus$2, - bigvee: bigvee$2, - bigwedge: bigwedge$2, - bkarow: bkarow$2, - blacklozenge: blacklozenge$2, - blacksquare: blacksquare$2, - blacktriangle: blacktriangle$2, - blacktriangledown: blacktriangledown$2, - blacktriangleleft: blacktriangleleft$2, - blacktriangleright: blacktriangleright$2, - blank: blank$2, - blk12: blk12$2, - blk14: blk14$2, - blk34: blk34$2, - block: block$2, - bne: bne$2, - bnequiv: bnequiv$2, - bnot: bnot$2, - bopf: bopf$2, - bot: bot$2, - bottom: bottom$2, - bowtie: bowtie$2, - boxDL: boxDL$2, - boxDR: boxDR$2, - boxDl: boxDl$2, - boxDr: boxDr$2, - boxH: boxH$2, - boxHD: boxHD$2, - boxHU: boxHU$2, - boxHd: boxHd$2, - boxHu: boxHu$2, - boxUL: boxUL$2, - boxUR: boxUR$2, - boxUl: boxUl$2, - boxUr: boxUr$2, - boxV: boxV$2, - boxVH: boxVH$2, - boxVL: boxVL$2, - boxVR: boxVR$2, - boxVh: boxVh$2, - boxVl: boxVl$2, - boxVr: boxVr$2, - boxbox: boxbox$2, - boxdL: boxdL$2, - boxdR: boxdR$2, - boxdl: boxdl$2, - boxdr: boxdr$2, - boxh: boxh$2, - boxhD: boxhD$2, - boxhU: boxhU$2, - boxhd: boxhd$2, - boxhu: boxhu$2, - boxminus: boxminus$2, - boxplus: boxplus$2, - boxtimes: boxtimes$2, - boxuL: boxuL$2, - boxuR: boxuR$2, - boxul: boxul$2, - boxur: boxur$2, - boxv: boxv$2, - boxvH: boxvH$2, - boxvL: boxvL$2, - boxvR: boxvR$2, - boxvh: boxvh$2, - boxvl: boxvl$2, - boxvr: boxvr$2, - bprime: bprime$2, - breve: breve$2, - brvba: brvba$2, - brvbar: brvbar$2, - bscr: bscr$2, - bsemi: bsemi$2, - bsim: bsim$2, - bsime: bsime$2, - bsol: bsol$2, - bsolb: bsolb$2, - bsolhsub: bsolhsub$2, - bull: bull$2, - bullet: bullet$2, - bump: bump$2, - bumpE: bumpE$2, - bumpe: bumpe$2, - bumpeq: bumpeq$2, - cacute: cacute$2, - cap: cap$2, - capand: capand$2, - capbrcup: capbrcup$2, - capcap: capcap$2, - capcup: capcup$2, - capdot: capdot$2, - caps: caps$2, - caret: caret$2, - caron: caron$2, - ccaps: ccaps$2, - ccaron: ccaron$2, - ccedi: ccedi$2, - ccedil: ccedil$2, - ccirc: ccirc$2, - ccups: ccups$2, - ccupssm: ccupssm$2, - cdot: cdot$2, - cedi: cedi$2, - cedil: cedil$2, - cemptyv: cemptyv$2, - cen: cen$2, - cent: cent$2, - centerdot: centerdot$2, - cfr: cfr$2, - chcy: chcy$2, - check: check$3, - checkmark: checkmark$2, - chi: chi$2, - cir: cir$2, - cirE: cirE$2, - circ: circ$2, - circeq: circeq$2, - circlearrowleft: circlearrowleft$2, - circlearrowright: circlearrowright$2, - circledR: circledR$2, - circledS: circledS$2, - circledast: circledast$2, - circledcirc: circledcirc$2, - circleddash: circleddash$2, - cire: cire$2, - cirfnint: cirfnint$2, - cirmid: cirmid$2, - cirscir: cirscir$2, - clubs: clubs$2, - clubsuit: clubsuit$2, - colon: colon$2, - colone: colone$2, - coloneq: coloneq$2, - comma: comma$2, - commat: commat$2, - comp: comp$2, - compfn: compfn$2, - complement: complement$2, - complexes: complexes$2, - cong: cong$2, - congdot: congdot$2, - conint: conint$2, - copf: copf$2, - coprod: coprod$2, - cop: cop$2, - copy: copy$2, - copysr: copysr$2, - crarr: crarr$2, - cross: cross$2, - cscr: cscr$2, - csub: csub$2, - csube: csube$2, - csup: csup$2, - csupe: csupe$2, - ctdot: ctdot$2, - cudarrl: cudarrl$2, - cudarrr: cudarrr$2, - cuepr: cuepr$2, - cuesc: cuesc$2, - cularr: cularr$2, - cularrp: cularrp$2, - cup: cup$2, - cupbrcap: cupbrcap$2, - cupcap: cupcap$2, - cupcup: cupcup$2, - cupdot: cupdot$2, - cupor: cupor$2, - cups: cups$2, - curarr: curarr$2, - curarrm: curarrm$2, - curlyeqprec: curlyeqprec$2, - curlyeqsucc: curlyeqsucc$2, - curlyvee: curlyvee$2, - curlywedge: curlywedge$2, - curre: curre$2, - curren: curren$2, - curvearrowleft: curvearrowleft$2, - curvearrowright: curvearrowright$2, - cuvee: cuvee$2, - cuwed: cuwed$2, - cwconint: cwconint$2, - cwint: cwint$2, - cylcty: cylcty$2, - dArr: dArr$2, - dHar: dHar$2, - dagger: dagger$2, - daleth: daleth$2, - darr: darr$2, - dash: dash$2, - dashv: dashv$2, - dbkarow: dbkarow$2, - dblac: dblac$2, - dcaron: dcaron$2, - dcy: dcy$2, - dd: dd$2, - ddagger: ddagger$2, - ddarr: ddarr$2, - ddotseq: ddotseq$2, - de: de$2, - deg: deg$2, - delta: delta$2, - demptyv: demptyv$2, - dfisht: dfisht$2, - dfr: dfr$2, - dharl: dharl$2, - dharr: dharr$2, - diam: diam$2, - diamond: diamond$2, - diamondsuit: diamondsuit$2, - diams: diams$2, - die: die$2, - digamma: digamma$2, - disin: disin$2, - div: div$2, - divid: divid$2, - divide: divide$2, - divideontimes: divideontimes$2, - divonx: divonx$2, - djcy: djcy$2, - dlcorn: dlcorn$2, - dlcrop: dlcrop$2, - dollar: dollar$2, - dopf: dopf$2, - dot: dot$2, - doteq: doteq$2, - doteqdot: doteqdot$2, - dotminus: dotminus$2, - dotplus: dotplus$2, - dotsquare: dotsquare$2, - doublebarwedge: doublebarwedge$2, - downarrow: downarrow$2, - downdownarrows: downdownarrows$2, - downharpoonleft: downharpoonleft$2, - downharpoonright: downharpoonright$2, - drbkarow: drbkarow$2, - drcorn: drcorn$2, - drcrop: drcrop$2, - dscr: dscr$2, - dscy: dscy$2, - dsol: dsol$2, - dstrok: dstrok$2, - dtdot: dtdot$2, - dtri: dtri$2, - dtrif: dtrif$2, - duarr: duarr$2, - duhar: duhar$2, - dwangle: dwangle$2, - dzcy: dzcy$2, - dzigrarr: dzigrarr$2, - eDDot: eDDot$2, - eDot: eDot$2, - eacut: eacut$2, - eacute: eacute$2, - easter: easter$2, - ecaron: ecaron$2, - ecir: ecir$2, - ecirc: ecirc$2, - ecolon: ecolon$2, - ecy: ecy$2, - edot: edot$2, - ee: ee$2, - efDot: efDot$2, - efr: efr$2, - eg: eg$2, - egrav: egrav$2, - egrave: egrave$2, - egs: egs$2, - egsdot: egsdot$2, - el: el$2, - elinters: elinters$2, - ell: ell$2, - els: els$2, - elsdot: elsdot$2, - emacr: emacr$2, - empty: empty$2, - emptyset: emptyset$2, - emptyv: emptyv$2, - emsp13: emsp13$2, - emsp14: emsp14$2, - emsp: emsp$2, - eng: eng$2, - ensp: ensp$2, - eogon: eogon$2, - eopf: eopf$2, - epar: epar$2, - eparsl: eparsl$2, - eplus: eplus$2, - epsi: epsi$2, - epsilon: epsilon$2, - epsiv: epsiv$2, - eqcirc: eqcirc$2, - eqcolon: eqcolon$2, - eqsim: eqsim$2, - eqslantgtr: eqslantgtr$2, - eqslantless: eqslantless$2, - equals: equals$2, - equest: equest$2, - equiv: equiv$2, - equivDD: equivDD$2, - eqvparsl: eqvparsl$2, - erDot: erDot$2, - erarr: erarr$2, - escr: escr$2, - esdot: esdot$2, - esim: esim$2, - eta: eta$2, - et: et$2, - eth: eth$2, - eum: eum$2, - euml: euml$2, - euro: euro$2, - excl: excl$2, - exist: exist$2, - expectation: expectation$2, - exponentiale: exponentiale$2, - fallingdotseq: fallingdotseq$2, - fcy: fcy$2, - female: female$2, - ffilig: ffilig$2, - fflig: fflig$2, - ffllig: ffllig$2, - ffr: ffr$2, - filig: filig$2, - fjlig: fjlig$2, - flat: flat$2, - fllig: fllig$2, - fltns: fltns$2, - fnof: fnof$2, - fopf: fopf$2, - forall: forall$2, - fork: fork$2, - forkv: forkv$2, - fpartint: fpartint$2, - frac1: frac1$2, - frac12: frac12$2, - frac13: frac13$2, - frac14: frac14$2, - frac15: frac15$2, - frac16: frac16$2, - frac18: frac18$2, - frac23: frac23$2, - frac25: frac25$2, - frac3: frac3$2, - frac34: frac34$2, - frac35: frac35$2, - frac38: frac38$2, - frac45: frac45$2, - frac56: frac56$2, - frac58: frac58$2, - frac78: frac78$2, - frasl: frasl$2, - frown: frown$2, - fscr: fscr$2, - gE: gE$2, - gEl: gEl$2, - gacute: gacute$2, - gamma: gamma$2, - gammad: gammad$2, - gap: gap$2, - gbreve: gbreve$2, - gcirc: gcirc$2, - gcy: gcy$2, - gdot: gdot$2, - ge: ge$2, - gel: gel$2, - geq: geq$2, - geqq: geqq$2, - geqslant: geqslant$2, - ges: ges$2, - gescc: gescc$2, - gesdot: gesdot$2, - gesdoto: gesdoto$2, - gesdotol: gesdotol$2, - gesl: gesl$2, - gesles: gesles$2, - gfr: gfr$2, - gg: gg$2, - ggg: ggg$2, - gimel: gimel$2, - gjcy: gjcy$2, - gl: gl$2, - glE: glE$2, - gla: gla$2, - glj: glj$2, - gnE: gnE$2, - gnap: gnap$2, - gnapprox: gnapprox$2, - gne: gne$2, - gneq: gneq$2, - gneqq: gneqq$2, - gnsim: gnsim$2, - gopf: gopf$2, - grave: grave$2, - gscr: gscr$2, - gsim: gsim$2, - gsime: gsime$2, - gsiml: gsiml$2, - g: g$2, - gt: gt$2, - gtcc: gtcc$2, - gtcir: gtcir$2, - gtdot: gtdot$2, - gtlPar: gtlPar$2, - gtquest: gtquest$2, - gtrapprox: gtrapprox$2, - gtrarr: gtrarr$2, - gtrdot: gtrdot$2, - gtreqless: gtreqless$2, - gtreqqless: gtreqqless$2, - gtrless: gtrless$2, - gtrsim: gtrsim$2, - gvertneqq: gvertneqq$2, - gvnE: gvnE$2, - hArr: hArr$2, - hairsp: hairsp$2, - half: half$2, - hamilt: hamilt$2, - hardcy: hardcy$2, - harr: harr$2, - harrcir: harrcir$2, - harrw: harrw$2, - hbar: hbar$2, - hcirc: hcirc$2, - hearts: hearts$2, - heartsuit: heartsuit$2, - hellip: hellip$2, - hercon: hercon$2, - hfr: hfr$2, - hksearow: hksearow$2, - hkswarow: hkswarow$2, - hoarr: hoarr$2, - homtht: homtht$2, - hookleftarrow: hookleftarrow$2, - hookrightarrow: hookrightarrow$2, - hopf: hopf$2, - horbar: horbar$2, - hscr: hscr$2, - hslash: hslash$2, - hstrok: hstrok$2, - hybull: hybull$2, - hyphen: hyphen$2, - iacut: iacut$2, - iacute: iacute$2, - ic: ic$2, - icir: icir$2, - icirc: icirc$2, - icy: icy$2, - iecy: iecy$2, - iexc: iexc$2, - iexcl: iexcl$2, - iff: iff$2, - ifr: ifr$2, - igrav: igrav$2, - igrave: igrave$2, - ii: ii$2, - iiiint: iiiint$2, - iiint: iiint$2, - iinfin: iinfin$2, - iiota: iiota$2, - ijlig: ijlig$2, - imacr: imacr$2, - image: image$3, - imagline: imagline$2, - imagpart: imagpart$2, - imath: imath$2, - imof: imof$2, - imped: imped$2, - "in": "∈", - incare: incare$2, - infin: infin$2, - infintie: infintie$2, - inodot: inodot$2, - int: int$3, - intcal: intcal$2, - integers: integers$2, - intercal: intercal$2, - intlarhk: intlarhk$2, - intprod: intprod$2, - iocy: iocy$2, - iogon: iogon$2, - iopf: iopf$2, - iota: iota$2, - iprod: iprod$2, - iques: iques$2, - iquest: iquest$2, - iscr: iscr$2, - isin: isin$2, - isinE: isinE$2, - isindot: isindot$2, - isins: isins$2, - isinsv: isinsv$2, - isinv: isinv$2, - it: it$2, - itilde: itilde$2, - iukcy: iukcy$2, - ium: ium$2, - iuml: iuml$2, - jcirc: jcirc$2, - jcy: jcy$2, - jfr: jfr$2, - jmath: jmath$2, - jopf: jopf$2, - jscr: jscr$2, - jsercy: jsercy$2, - jukcy: jukcy$2, - kappa: kappa$2, - kappav: kappav$2, - kcedil: kcedil$2, - kcy: kcy$2, - kfr: kfr$2, - kgreen: kgreen$2, - khcy: khcy$2, - kjcy: kjcy$2, - kopf: kopf$2, - kscr: kscr$2, - lAarr: lAarr$2, - lArr: lArr$2, - lAtail: lAtail$2, - lBarr: lBarr$2, - lE: lE$2, - lEg: lEg$2, - lHar: lHar$2, - lacute: lacute$2, - laemptyv: laemptyv$2, - lagran: lagran$2, - lambda: lambda$2, - lang: lang$2, - langd: langd$2, - langle: langle$2, - lap: lap$2, - laqu: laqu$2, - laquo: laquo$2, - larr: larr$2, - larrb: larrb$2, - larrbfs: larrbfs$2, - larrfs: larrfs$2, - larrhk: larrhk$2, - larrlp: larrlp$2, - larrpl: larrpl$2, - larrsim: larrsim$2, - larrtl: larrtl$2, - lat: lat$2, - latail: latail$2, - late: late$2, - lates: lates$2, - lbarr: lbarr$2, - lbbrk: lbbrk$2, - lbrace: lbrace$2, - lbrack: lbrack$2, - lbrke: lbrke$2, - lbrksld: lbrksld$2, - lbrkslu: lbrkslu$2, - lcaron: lcaron$2, - lcedil: lcedil$2, - lceil: lceil$2, - lcub: lcub$2, - lcy: lcy$2, - ldca: ldca$2, - ldquo: ldquo$2, - ldquor: ldquor$2, - ldrdhar: ldrdhar$2, - ldrushar: ldrushar$2, - ldsh: ldsh$2, - le: le$2, - leftarrow: leftarrow$2, - leftarrowtail: leftarrowtail$2, - leftharpoondown: leftharpoondown$2, - leftharpoonup: leftharpoonup$2, - leftleftarrows: leftleftarrows$2, - leftrightarrow: leftrightarrow$2, - leftrightarrows: leftrightarrows$2, - leftrightharpoons: leftrightharpoons$2, - leftrightsquigarrow: leftrightsquigarrow$2, - leftthreetimes: leftthreetimes$2, - leg: leg$2, - leq: leq$2, - leqq: leqq$2, - leqslant: leqslant$2, - les: les$2, - lescc: lescc$2, - lesdot: lesdot$2, - lesdoto: lesdoto$2, - lesdotor: lesdotor$2, - lesg: lesg$2, - lesges: lesges$2, - lessapprox: lessapprox$2, - lessdot: lessdot$2, - lesseqgtr: lesseqgtr$2, - lesseqqgtr: lesseqqgtr$2, - lessgtr: lessgtr$2, - lesssim: lesssim$2, - lfisht: lfisht$2, - lfloor: lfloor$2, - lfr: lfr$2, - lg: lg$2, - lgE: lgE$2, - lhard: lhard$2, - lharu: lharu$2, - lharul: lharul$2, - lhblk: lhblk$2, - ljcy: ljcy$2, - ll: ll$2, - llarr: llarr$2, - llcorner: llcorner$2, - llhard: llhard$2, - lltri: lltri$2, - lmidot: lmidot$2, - lmoust: lmoust$2, - lmoustache: lmoustache$2, - lnE: lnE$2, - lnap: lnap$2, - lnapprox: lnapprox$2, - lne: lne$2, - lneq: lneq$2, - lneqq: lneqq$2, - lnsim: lnsim$2, - loang: loang$2, - loarr: loarr$2, - lobrk: lobrk$2, - longleftarrow: longleftarrow$2, - longleftrightarrow: longleftrightarrow$2, - longmapsto: longmapsto$2, - longrightarrow: longrightarrow$2, - looparrowleft: looparrowleft$2, - looparrowright: looparrowright$2, - lopar: lopar$2, - lopf: lopf$2, - loplus: loplus$2, - lotimes: lotimes$2, - lowast: lowast$2, - lowbar: lowbar$2, - loz: loz$2, - lozenge: lozenge$2, - lozf: lozf$2, - lpar: lpar$2, - lparlt: lparlt$2, - lrarr: lrarr$2, - lrcorner: lrcorner$2, - lrhar: lrhar$2, - lrhard: lrhard$2, - lrm: lrm$2, - lrtri: lrtri$2, - lsaquo: lsaquo$2, - lscr: lscr$2, - lsh: lsh$2, - lsim: lsim$2, - lsime: lsime$2, - lsimg: lsimg$2, - lsqb: lsqb$2, - lsquo: lsquo$2, - lsquor: lsquor$2, - lstrok: lstrok$2, - l: l$2, - lt: lt$3, - ltcc: ltcc$2, - ltcir: ltcir$2, - ltdot: ltdot$2, - lthree: lthree$2, - ltimes: ltimes$2, - ltlarr: ltlarr$2, - ltquest: ltquest$2, - ltrPar: ltrPar$2, - ltri: ltri$2, - ltrie: ltrie$2, - ltrif: ltrif$2, - lurdshar: lurdshar$2, - luruhar: luruhar$2, - lvertneqq: lvertneqq$2, - lvnE: lvnE$2, - mDDot: mDDot$2, - mac: mac$2, - macr: macr$2, - male: male$2, - malt: malt$2, - maltese: maltese$2, - map: map$5, - mapsto: mapsto$2, - mapstodown: mapstodown$2, - mapstoleft: mapstoleft$2, - mapstoup: mapstoup$2, - marker: marker$2, - mcomma: mcomma$2, - mcy: mcy$2, - mdash: mdash$2, - measuredangle: measuredangle$2, - mfr: mfr$2, - mho: mho$2, - micr: micr$2, - micro: micro$2, - mid: mid$2, - midast: midast$2, - midcir: midcir$2, - middo: middo$2, - middot: middot$2, - minus: minus$2, - minusb: minusb$2, - minusd: minusd$2, - minusdu: minusdu$2, - mlcp: mlcp$2, - mldr: mldr$2, - mnplus: mnplus$2, - models: models$2, - mopf: mopf$2, - mp: mp$2, - mscr: mscr$2, - mstpos: mstpos$2, - mu: mu$2, - multimap: multimap$2, - mumap: mumap$2, - nGg: nGg$2, - nGt: nGt$2, - nGtv: nGtv$2, - nLeftarrow: nLeftarrow$2, - nLeftrightarrow: nLeftrightarrow$2, - nLl: nLl$2, - nLt: nLt$2, - nLtv: nLtv$2, - nRightarrow: nRightarrow$2, - nVDash: nVDash$2, - nVdash: nVdash$2, - nabla: nabla$2, - nacute: nacute$2, - nang: nang$2, - nap: nap$2, - napE: napE$2, - napid: napid$2, - napos: napos$2, - napprox: napprox$2, - natur: natur$2, - natural: natural$2, - naturals: naturals$2, - nbs: nbs$2, - nbsp: nbsp$2, - nbump: nbump$2, - nbumpe: nbumpe$2, - ncap: ncap$2, - ncaron: ncaron$2, - ncedil: ncedil$2, - ncong: ncong$2, - ncongdot: ncongdot$2, - ncup: ncup$2, - ncy: ncy$2, - ndash: ndash$2, - ne: ne$2, - neArr: neArr$2, - nearhk: nearhk$2, - nearr: nearr$2, - nearrow: nearrow$2, - nedot: nedot$2, - nequiv: nequiv$2, - nesear: nesear$2, - nesim: nesim$2, - nexist: nexist$2, - nexists: nexists$2, - nfr: nfr$2, - ngE: ngE$2, - nge: nge$2, - ngeq: ngeq$2, - ngeqq: ngeqq$2, - ngeqslant: ngeqslant$2, - nges: nges$2, - ngsim: ngsim$2, - ngt: ngt$2, - ngtr: ngtr$2, - nhArr: nhArr$2, - nharr: nharr$2, - nhpar: nhpar$2, - ni: ni$2, - nis: nis$2, - nisd: nisd$2, - niv: niv$2, - njcy: njcy$2, - nlArr: nlArr$2, - nlE: nlE$2, - nlarr: nlarr$2, - nldr: nldr$2, - nle: nle$2, - nleftarrow: nleftarrow$2, - nleftrightarrow: nleftrightarrow$2, - nleq: nleq$2, - nleqq: nleqq$2, - nleqslant: nleqslant$2, - nles: nles$2, - nless: nless$2, - nlsim: nlsim$2, - nlt: nlt$2, - nltri: nltri$2, - nltrie: nltrie$2, - nmid: nmid$2, - nopf: nopf$2, - no: no$2, - not: not$2, - notin: notin$2, - notinE: notinE$2, - notindot: notindot$2, - notinva: notinva$2, - notinvb: notinvb$2, - notinvc: notinvc$2, - notni: notni$2, - notniva: notniva$2, - notnivb: notnivb$2, - notnivc: notnivc$2, - npar: npar$2, - nparallel: nparallel$2, - nparsl: nparsl$2, - npart: npart$2, - npolint: npolint$2, - npr: npr$2, - nprcue: nprcue$2, - npre: npre$2, - nprec: nprec$2, - npreceq: npreceq$2, - nrArr: nrArr$2, - nrarr: nrarr$2, - nrarrc: nrarrc$2, - nrarrw: nrarrw$2, - nrightarrow: nrightarrow$2, - nrtri: nrtri$2, - nrtrie: nrtrie$2, - nsc: nsc$2, - nsccue: nsccue$2, - nsce: nsce$2, - nscr: nscr$2, - nshortmid: nshortmid$2, - nshortparallel: nshortparallel$2, - nsim: nsim$2, - nsime: nsime$2, - nsimeq: nsimeq$2, - nsmid: nsmid$2, - nspar: nspar$2, - nsqsube: nsqsube$2, - nsqsupe: nsqsupe$2, - nsub: nsub$2, - nsubE: nsubE$2, - nsube: nsube$2, - nsubset: nsubset$2, - nsubseteq: nsubseteq$2, - nsubseteqq: nsubseteqq$2, - nsucc: nsucc$2, - nsucceq: nsucceq$2, - nsup: nsup$2, - nsupE: nsupE$2, - nsupe: nsupe$2, - nsupset: nsupset$2, - nsupseteq: nsupseteq$2, - nsupseteqq: nsupseteqq$2, - ntgl: ntgl$2, - ntild: ntild$2, - ntilde: ntilde$2, - ntlg: ntlg$2, - ntriangleleft: ntriangleleft$2, - ntrianglelefteq: ntrianglelefteq$2, - ntriangleright: ntriangleright$2, - ntrianglerighteq: ntrianglerighteq$2, - nu: nu$2, - num: num$2, - numero: numero$2, - numsp: numsp$2, - nvDash: nvDash$2, - nvHarr: nvHarr$2, - nvap: nvap$2, - nvdash: nvdash$2, - nvge: nvge$2, - nvgt: nvgt$2, - nvinfin: nvinfin$2, - nvlArr: nvlArr$2, - nvle: nvle$2, - nvlt: nvlt$2, - nvltrie: nvltrie$2, - nvrArr: nvrArr$2, - nvrtrie: nvrtrie$2, - nvsim: nvsim$2, - nwArr: nwArr$2, - nwarhk: nwarhk$2, - nwarr: nwarr$2, - nwarrow: nwarrow$2, - nwnear: nwnear$2, - oS: oS$2, - oacut: oacut$2, - oacute: oacute$2, - oast: oast$2, - ocir: ocir$2, - ocirc: ocirc$2, - ocy: ocy$2, - odash: odash$2, - odblac: odblac$2, - odiv: odiv$2, - odot: odot$2, - odsold: odsold$2, - oelig: oelig$2, - ofcir: ofcir$2, - ofr: ofr$2, - ogon: ogon$2, - ograv: ograv$2, - ograve: ograve$2, - ogt: ogt$2, - ohbar: ohbar$2, - ohm: ohm$2, - oint: oint$2, - olarr: olarr$2, - olcir: olcir$2, - olcross: olcross$2, - oline: oline$2, - olt: olt$2, - omacr: omacr$2, - omega: omega$2, - omicron: omicron$2, - omid: omid$2, - ominus: ominus$2, - oopf: oopf$2, - opar: opar$2, - operp: operp$2, - oplus: oplus$2, - or: or$2, - orarr: orarr$2, - ord: ord$2, - order: order$2, - orderof: orderof$2, - ordf: ordf$2, - ordm: ordm$2, - origof: origof$2, - oror: oror$2, - orslope: orslope$2, - orv: orv$2, - oscr: oscr$2, - oslas: oslas$2, - oslash: oslash$2, - osol: osol$2, - otild: otild$2, - otilde: otilde$2, - otimes: otimes$2, - otimesas: otimesas$2, - oum: oum$2, - ouml: ouml$2, - ovbar: ovbar$2, - par: par$2, - para: para$2, - parallel: parallel$2, - parsim: parsim$2, - parsl: parsl$2, - part: part$2, - pcy: pcy$2, - percnt: percnt$2, - period: period$2, - permil: permil$2, - perp: perp$2, - pertenk: pertenk$2, - pfr: pfr$2, - phi: phi$2, - phiv: phiv$2, - phmmat: phmmat$2, - phone: phone$2, - pi: pi$2, - pitchfork: pitchfork$2, - piv: piv$2, - planck: planck$2, - planckh: planckh$2, - plankv: plankv$2, - plus: plus$2, - plusacir: plusacir$2, - plusb: plusb$2, - pluscir: pluscir$2, - plusdo: plusdo$2, - plusdu: plusdu$2, - pluse: pluse$2, - plusm: plusm$2, - plusmn: plusmn$2, - plussim: plussim$2, - plustwo: plustwo$2, - pm: pm$2, - pointint: pointint$2, - popf: popf$2, - poun: poun$2, - pound: pound$2, - pr: pr$2, - prE: prE$2, - prap: prap$2, - prcue: prcue$2, - pre: pre$2, - prec: prec$2, - precapprox: precapprox$2, - preccurlyeq: preccurlyeq$2, - preceq: preceq$2, - precnapprox: precnapprox$2, - precneqq: precneqq$2, - precnsim: precnsim$2, - precsim: precsim$2, - prime: prime$2, - primes: primes$2, - prnE: prnE$2, - prnap: prnap$2, - prnsim: prnsim$2, - prod: prod$2, - profalar: profalar$2, - profline: profline$2, - profsurf: profsurf$2, - prop: prop$2, - propto: propto$2, - prsim: prsim$2, - prurel: prurel$2, - pscr: pscr$2, - psi: psi$2, - puncsp: puncsp$2, - qfr: qfr$2, - qint: qint$2, - qopf: qopf$2, - qprime: qprime$2, - qscr: qscr$2, - quaternions: quaternions$2, - quatint: quatint$2, - quest: quest$2, - questeq: questeq$2, - quo: quo$2, - quot: quot$2, - rAarr: rAarr$2, - rArr: rArr$2, - rAtail: rAtail$2, - rBarr: rBarr$2, - rHar: rHar$2, - race: race$2, - racute: racute$2, - radic: radic$2, - raemptyv: raemptyv$2, - rang: rang$2, - rangd: rangd$2, - range: range$2, - rangle: rangle$2, - raqu: raqu$2, - raquo: raquo$2, - rarr: rarr$2, - rarrap: rarrap$2, - rarrb: rarrb$2, - rarrbfs: rarrbfs$2, - rarrc: rarrc$2, - rarrfs: rarrfs$2, - rarrhk: rarrhk$2, - rarrlp: rarrlp$2, - rarrpl: rarrpl$2, - rarrsim: rarrsim$2, - rarrtl: rarrtl$2, - rarrw: rarrw$2, - ratail: ratail$2, - ratio: ratio$2, - rationals: rationals$2, - rbarr: rbarr$2, - rbbrk: rbbrk$2, - rbrace: rbrace$2, - rbrack: rbrack$2, - rbrke: rbrke$2, - rbrksld: rbrksld$2, - rbrkslu: rbrkslu$2, - rcaron: rcaron$2, - rcedil: rcedil$2, - rceil: rceil$2, - rcub: rcub$2, - rcy: rcy$2, - rdca: rdca$2, - rdldhar: rdldhar$2, - rdquo: rdquo$2, - rdquor: rdquor$2, - rdsh: rdsh$2, - real: real$2, - realine: realine$2, - realpart: realpart$2, - reals: reals$2, - rect: rect$2, - re: re$6, - reg: reg$2, - rfisht: rfisht$2, - rfloor: rfloor$2, - rfr: rfr$2, - rhard: rhard$2, - rharu: rharu$2, - rharul: rharul$2, - rho: rho$2, - rhov: rhov$2, - rightarrow: rightarrow$2, - rightarrowtail: rightarrowtail$2, - rightharpoondown: rightharpoondown$2, - rightharpoonup: rightharpoonup$2, - rightleftarrows: rightleftarrows$2, - rightleftharpoons: rightleftharpoons$2, - rightrightarrows: rightrightarrows$2, - rightsquigarrow: rightsquigarrow$2, - rightthreetimes: rightthreetimes$2, - ring: ring$2, - risingdotseq: risingdotseq$2, - rlarr: rlarr$2, - rlhar: rlhar$2, - rlm: rlm$2, - rmoust: rmoust$2, - rmoustache: rmoustache$2, - rnmid: rnmid$2, - roang: roang$2, - roarr: roarr$2, - robrk: robrk$2, - ropar: ropar$2, - ropf: ropf$2, - roplus: roplus$2, - rotimes: rotimes$2, - rpar: rpar$2, - rpargt: rpargt$2, - rppolint: rppolint$2, - rrarr: rrarr$2, - rsaquo: rsaquo$2, - rscr: rscr$2, - rsh: rsh$2, - rsqb: rsqb$2, - rsquo: rsquo$2, - rsquor: rsquor$2, - rthree: rthree$2, - rtimes: rtimes$2, - rtri: rtri$2, - rtrie: rtrie$2, - rtrif: rtrif$2, - rtriltri: rtriltri$2, - ruluhar: ruluhar$2, - rx: rx$2, - sacute: sacute$2, - sbquo: sbquo$2, - sc: sc$2, - scE: scE$2, - scap: scap$2, - scaron: scaron$2, - sccue: sccue$2, - sce: sce$2, - scedil: scedil$2, - scirc: scirc$2, - scnE: scnE$2, - scnap: scnap$2, - scnsim: scnsim$2, - scpolint: scpolint$2, - scsim: scsim$2, - scy: scy$2, - sdot: sdot$2, - sdotb: sdotb$2, - sdote: sdote$2, - seArr: seArr$2, - searhk: searhk$2, - searr: searr$2, - searrow: searrow$2, - sec: sec$2, - sect: sect$2, - semi: semi$2, - seswar: seswar$2, - setminus: setminus$2, - setmn: setmn$2, - sext: sext$2, - sfr: sfr$2, - sfrown: sfrown$2, - sharp: sharp$2, - shchcy: shchcy$2, - shcy: shcy$2, - shortmid: shortmid$2, - shortparallel: shortparallel$2, - sh: sh$2, - shy: shy$2, - sigma: sigma$2, - sigmaf: sigmaf$2, - sigmav: sigmav$2, - sim: sim$2, - simdot: simdot$2, - sime: sime$2, - simeq: simeq$2, - simg: simg$2, - simgE: simgE$2, - siml: siml$2, - simlE: simlE$2, - simne: simne$2, - simplus: simplus$2, - simrarr: simrarr$2, - slarr: slarr$2, - smallsetminus: smallsetminus$2, - smashp: smashp$2, - smeparsl: smeparsl$2, - smid: smid$2, - smile: smile$2, - smt: smt$2, - smte: smte$2, - smtes: smtes$2, - softcy: softcy$2, - sol: sol$2, - solb: solb$2, - solbar: solbar$2, - sopf: sopf$2, - spades: spades$2, - spadesuit: spadesuit$2, - spar: spar$2, - sqcap: sqcap$2, - sqcaps: sqcaps$2, - sqcup: sqcup$2, - sqcups: sqcups$2, - sqsub: sqsub$2, - sqsube: sqsube$2, - sqsubset: sqsubset$2, - sqsubseteq: sqsubseteq$2, - sqsup: sqsup$2, - sqsupe: sqsupe$2, - sqsupset: sqsupset$2, - sqsupseteq: sqsupseteq$2, - squ: squ$2, - square: square$2, - squarf: squarf$2, - squf: squf$2, - srarr: srarr$2, - sscr: sscr$2, - ssetmn: ssetmn$2, - ssmile: ssmile$2, - sstarf: sstarf$2, - star: star$2, - starf: starf$2, - straightepsilon: straightepsilon$2, - straightphi: straightphi$2, - strns: strns$2, - sub: sub$2, - subE: subE$2, - subdot: subdot$2, - sube: sube$2, - subedot: subedot$2, - submult: submult$2, - subnE: subnE$2, - subne: subne$2, - subplus: subplus$2, - subrarr: subrarr$2, - subset: subset$2, - subseteq: subseteq$2, - subseteqq: subseteqq$2, - subsetneq: subsetneq$2, - subsetneqq: subsetneqq$2, - subsim: subsim$2, - subsub: subsub$2, - subsup: subsup$2, - succ: succ$2, - succapprox: succapprox$2, - succcurlyeq: succcurlyeq$2, - succeq: succeq$2, - succnapprox: succnapprox$2, - succneqq: succneqq$2, - succnsim: succnsim$2, - succsim: succsim$2, - sum: sum$2, - sung: sung$2, - sup: sup$2, - sup1: sup1$2, - sup2: sup2$2, - sup3: sup3$2, - supE: supE$2, - supdot: supdot$2, - supdsub: supdsub$2, - supe: supe$2, - supedot: supedot$2, - suphsol: suphsol$2, - suphsub: suphsub$2, - suplarr: suplarr$2, - supmult: supmult$2, - supnE: supnE$2, - supne: supne$2, - supplus: supplus$2, - supset: supset$2, - supseteq: supseteq$2, - supseteqq: supseteqq$2, - supsetneq: supsetneq$2, - supsetneqq: supsetneqq$2, - supsim: supsim$2, - supsub: supsub$2, - supsup: supsup$2, - swArr: swArr$2, - swarhk: swarhk$2, - swarr: swarr$2, - swarrow: swarrow$2, - swnwar: swnwar$2, - szli: szli$2, - szlig: szlig$2, - target: target$2, - tau: tau$2, - tbrk: tbrk$2, - tcaron: tcaron$2, - tcedil: tcedil$2, - tcy: tcy$2, - tdot: tdot$2, - telrec: telrec$2, - tfr: tfr$2, - there4: there4$2, - therefore: therefore$2, - theta: theta$2, - thetasym: thetasym$2, - thetav: thetav$2, - thickapprox: thickapprox$2, - thicksim: thicksim$2, - thinsp: thinsp$2, - thkap: thkap$2, - thksim: thksim$2, - thor: thor$2, - thorn: thorn$2, - tilde: tilde$2, - time: time$2, - times: times$2, - timesb: timesb$2, - timesbar: timesbar$2, - timesd: timesd$2, - tint: tint$2, - toea: toea$2, - top: top$2, - topbot: topbot$2, - topcir: topcir$2, - topf: topf$2, - topfork: topfork$2, - tosa: tosa$2, - tprime: tprime$2, - trade: trade$2, - triangle: triangle$2, - triangledown: triangledown$2, - triangleleft: triangleleft$2, - trianglelefteq: trianglelefteq$2, - triangleq: triangleq$2, - triangleright: triangleright$2, - trianglerighteq: trianglerighteq$2, - tridot: tridot$2, - trie: trie$2, - triminus: triminus$2, - triplus: triplus$2, - trisb: trisb$2, - tritime: tritime$2, - trpezium: trpezium$2, - tscr: tscr$2, - tscy: tscy$2, - tshcy: tshcy$2, - tstrok: tstrok$2, - twixt: twixt$2, - twoheadleftarrow: twoheadleftarrow$2, - twoheadrightarrow: twoheadrightarrow$2, - uArr: uArr$2, - uHar: uHar$2, - uacut: uacut$2, - uacute: uacute$2, - uarr: uarr$2, - ubrcy: ubrcy$2, - ubreve: ubreve$2, - ucir: ucir$2, - ucirc: ucirc$2, - ucy: ucy$2, - udarr: udarr$2, - udblac: udblac$2, - udhar: udhar$2, - ufisht: ufisht$2, - ufr: ufr$2, - ugrav: ugrav$2, - ugrave: ugrave$2, - uharl: uharl$2, - uharr: uharr$2, - uhblk: uhblk$2, - ulcorn: ulcorn$2, - ulcorner: ulcorner$2, - ulcrop: ulcrop$2, - ultri: ultri$2, - umacr: umacr$2, - um: um$2, - uml: uml$2, - uogon: uogon$2, - uopf: uopf$2, - uparrow: uparrow$2, - updownarrow: updownarrow$2, - upharpoonleft: upharpoonleft$2, - upharpoonright: upharpoonright$2, - uplus: uplus$2, - upsi: upsi$2, - upsih: upsih$2, - upsilon: upsilon$2, - upuparrows: upuparrows$2, - urcorn: urcorn$2, - urcorner: urcorner$2, - urcrop: urcrop$2, - uring: uring$2, - urtri: urtri$2, - uscr: uscr$2, - utdot: utdot$2, - utilde: utilde$2, - utri: utri$2, - utrif: utrif$2, - uuarr: uuarr$2, - uum: uum$2, - uuml: uuml$2, - uwangle: uwangle$2, - vArr: vArr$2, - vBar: vBar$2, - vBarv: vBarv$2, - vDash: vDash$2, - vangrt: vangrt$2, - varepsilon: varepsilon$2, - varkappa: varkappa$2, - varnothing: varnothing$2, - varphi: varphi$2, - varpi: varpi$2, - varpropto: varpropto$2, - varr: varr$2, - varrho: varrho$2, - varsigma: varsigma$2, - varsubsetneq: varsubsetneq$2, - varsubsetneqq: varsubsetneqq$2, - varsupsetneq: varsupsetneq$2, - varsupsetneqq: varsupsetneqq$2, - vartheta: vartheta$2, - vartriangleleft: vartriangleleft$2, - vartriangleright: vartriangleright$2, - vcy: vcy$2, - vdash: vdash$2, - vee: vee$2, - veebar: veebar$2, - veeeq: veeeq$2, - vellip: vellip$2, - verbar: verbar$2, - vert: vert$2, - vfr: vfr$2, - vltri: vltri$2, - vnsub: vnsub$2, - vnsup: vnsup$2, - vopf: vopf$2, - vprop: vprop$2, - vrtri: vrtri$2, - vscr: vscr$2, - vsubnE: vsubnE$2, - vsubne: vsubne$2, - vsupnE: vsupnE$2, - vsupne: vsupne$2, - vzigzag: vzigzag$2, - wcirc: wcirc$2, - wedbar: wedbar$2, - wedge: wedge$2, - wedgeq: wedgeq$2, - weierp: weierp$2, - wfr: wfr$2, - wopf: wopf$2, - wp: wp$2, - wr: wr$2, - wreath: wreath$2, - wscr: wscr$2, - xcap: xcap$2, - xcirc: xcirc$2, - xcup: xcup$2, - xdtri: xdtri$2, - xfr: xfr$2, - xhArr: xhArr$2, - xharr: xharr$2, - xi: xi$2, - xlArr: xlArr$2, - xlarr: xlarr$2, - xmap: xmap$2, - xnis: xnis$2, - xodot: xodot$2, - xopf: xopf$2, - xoplus: xoplus$2, - xotime: xotime$2, - xrArr: xrArr$2, - xrarr: xrarr$2, - xscr: xscr$2, - xsqcup: xsqcup$2, - xuplus: xuplus$2, - xutri: xutri$2, - xvee: xvee$2, - xwedge: xwedge$2, - yacut: yacut$2, - yacute: yacute$2, - yacy: yacy$2, - ycirc: ycirc$2, - ycy: ycy$2, - ye: ye$2, - yen: yen$2, - yfr: yfr$2, - yicy: yicy$2, - yopf: yopf$2, - yscr: yscr$2, - yucy: yucy$2, - yum: yum$2, - yuml: yuml$2, - zacute: zacute$2, - zcaron: zcaron$2, - zcy: zcy$2, - zdot: zdot$2, - zeetrf: zeetrf$2, - zeta: zeta$2, - zfr: zfr$2, - zhcy: zhcy$2, - zigrarr: zigrarr$2, - zopf: zopf$2, - zscr: zscr$2, - zwj: zwj$2, - zwnj: zwnj$2 -}; + for (let i = 0; i < value.length; i++) { + const c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue -var characterEntities$2 = require$$0$2; + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } -var decodeEntity_1$2 = decodeEntity$3; + if (replacements[c]) { + product += replacements[c]; + continue + } -var own$9 = {}.hasOwnProperty; + if (c < ' ') { + let hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } -function decodeEntity$3(characters) { - return own$9.call(characterEntities$2, characters) - ? characterEntities$2[characters] - : false -} + product += c; + } -var regexCheck$2 = regexCheck_1; + const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b); -var asciiDigit$3 = regexCheck$2(/\d/); + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); -var asciiDigit_1 = asciiDigit$3; + return quoteChar + product + quoteChar + } -var regexCheck$1 = regexCheck_1; + function serializeObject (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } -var asciiHexDigit$1 = regexCheck$1(/[\dA-Fa-f]/); + stack.push(value); -var asciiHexDigit_1 = asciiHexDigit$1; + let stepback = indent; + indent = indent + gap; -var decodeEntity$2 = decodeEntity_1$2; -var asciiAlphanumeric$3 = asciiAlphanumeric_1; -var asciiDigit$2 = asciiDigit_1; -var asciiHexDigit = asciiHexDigit_1; + let keys = propertyList || Object.keys(value); + let partial = []; + for (const key of keys) { + const propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + let member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } -function _interopDefaultLegacy$1(e) { - return e && typeof e === 'object' && 'default' in e ? e : {default: e} -} + let final; + if (partial.length === 0) { + final = '{}'; + } else { + let properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + let separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } -var decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy$1(decodeEntity$2); + stack.pop(); + indent = stepback; + return final + } -var characterReference$2 = { - name: 'characterReference', - tokenize: tokenizeCharacterReference -}; + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key) + } -function tokenizeCharacterReference(effects, ok, nok) { - var self = this; - var size = 0; - var max; - var test; - return start + const firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key) + } - function start(code) { - effects.enter('characterReference'); - effects.enter('characterReferenceMarker'); - effects.consume(code); - effects.exit('characterReferenceMarker'); - return open - } + for (let i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key) + } + } - function open(code) { - if (code === 35) { - effects.enter('characterReferenceMarkerNumeric'); - effects.consume(code); - effects.exit('characterReferenceMarkerNumeric'); - return numeric + return key } - effects.enter('characterReferenceValue'); - max = 31; - test = asciiAlphanumeric$3; - return value(code) - } - - function numeric(code) { - if (code === 88 || code === 120) { - effects.enter('characterReferenceMarkerHexadecimal'); - effects.consume(code); - effects.exit('characterReferenceMarkerHexadecimal'); - effects.enter('characterReferenceValue'); - max = 6; - test = asciiHexDigit; - return value - } + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } - effects.enter('characterReferenceValue'); - max = 7; - test = asciiDigit$2; - return value(code) - } + stack.push(value); - function value(code) { - var token; + let stepback = indent; + indent = indent + gap; - if (code === 59 && size) { - token = effects.exit('characterReferenceValue'); + let partial = []; + for (let i = 0; i < value.length; i++) { + const propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } - if ( - test === asciiAlphanumeric$3 && - !decodeEntity__default['default'](self.sliceSerialize(token)) - ) { - return nok(code) - } + let final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + let properties = partial.join(','); + final = '[' + properties + ']'; + } else { + let separator = ',\n' + indent; + let properties = partial.join(separator); + final = '[\n' + indent + properties + ',\n' + stepback + ']'; + } + } - effects.enter('characterReferenceMarker'); - effects.consume(code); - effects.exit('characterReferenceMarker'); - effects.exit('characterReference'); - return ok + stack.pop(); + indent = stepback; + return final } +}; - if (test(code) && size++ < max) { - effects.consume(code); - return value - } +const JSON5 = { + parse: parse$1, + stringify, +}; - return nok(code) +var lib = JSON5; + +/** + * @typedef Option + * @property {'boolean'|'string'} [type='string'] + * @property {string} long + * @property {string} description + * @property {string} [value] + * @property {string} [short] + * @property {boolean|string} [default=''] + * @property {boolean} [truelike=false] + */ + +/** @type {Option[]} */ +const schema = [ + { + long: 'help', + description: 'output usage information', + short: 'h', + type: 'boolean', + default: false + }, + { + long: 'version', + description: 'output version number', + short: 'v', + type: 'boolean', + default: false + }, + { + long: 'output', + description: 'specify output location', + short: 'o', + value: '[path]' + }, + { + long: 'rc-path', + description: 'specify configuration file', + short: 'r', + type: 'string', + value: '' + }, + { + long: 'ignore-path', + description: 'specify ignore file', + short: 'i', + type: 'string', + value: '' + }, + { + long: 'setting', + description: 'specify settings', + short: 's', + type: 'string', + value: '' + }, + { + long: 'ext', + description: 'specify extensions', + short: 'e', + type: 'string', + value: '' + }, + { + long: 'use', + description: 'use plugins', + short: 'u', + type: 'string', + value: '' + }, + { + long: 'watch', + description: 'watch for changes and reprocess', + short: 'w', + type: 'boolean', + default: false + }, + { + long: 'quiet', + description: 'output only warnings and errors', + short: 'q', + type: 'boolean', + default: false + }, + { + long: 'silent', + description: 'output only errors', + short: 'S', + type: 'boolean', + default: false + }, + { + long: 'frail', + description: 'exit with 1 on warnings', + short: 'f', + type: 'boolean', + default: false + }, + { + long: 'tree', + description: 'specify input and output as syntax tree', + short: 't', + type: 'boolean', + default: false + }, + { + long: 'report', + description: 'specify reporter', + type: 'string', + value: '' + }, + { + long: 'file-path', + description: 'specify path to process as', + type: 'string', + value: '' + }, + { + long: 'ignore-path-resolve-from', + description: 'resolve patterns in `ignore-path` from its directory or cwd', + type: 'string', + value: 'dir|cwd', + default: 'dir' + }, + { + long: 'ignore-pattern', + description: 'specify ignore patterns', + type: 'string', + value: '' + }, + { + long: 'silently-ignore', + description: 'do not fail when given ignored files', + type: 'boolean' + }, + { + long: 'tree-in', + description: 'specify input as syntax tree', + type: 'boolean' + }, + { + long: 'tree-out', + description: 'output syntax tree', + type: 'boolean' + }, + { + long: 'inspect', + description: 'output formatted syntax tree', + type: 'boolean' + }, + { + long: 'stdout', + description: 'specify writing to stdout', + type: 'boolean', + truelike: true + }, + { + long: 'color', + description: 'specify color in report', + type: 'boolean', + default: true + }, + { + long: 'config', + description: 'search for configuration files', + type: 'boolean', + default: true + }, + { + long: 'ignore', + description: 'search for ignore files', + type: 'boolean', + default: true } -} +]; -var characterReference_1 = characterReference$2; +/** + * @typedef {import('unified-engine').Options} EngineOptions + * @typedef {import('./schema.js').Option} Option + * + * @typedef {Required< + * Pick< + * EngineOptions, + * | 'extensions' + * | 'ignoreName' + * | 'packageField' + * | 'pluginPrefix' + * | 'processor' + * | 'rcName' + * > + * >} RequiredEngineOptions + * + * @typedef ArgsOptionsFields + * @property {string} name + * Name of executable + * @property {string} description + * Description of executable + * @property {string} version + * Version (semver) of executable + * + * @typedef {RequiredEngineOptions & Pick & ArgsOptionsFields} Options + */ -var markdownLineEnding$e = markdownLineEnding_1; -var markdownLineEndingOrSpace$7 = markdownLineEndingOrSpace_1; -var prefixSize$2 = prefixSize_1; -var factorySpace$b = factorySpace$i; +const own$7 = {}.hasOwnProperty; -var codeFenced$1 = { - name: 'codeFenced', - tokenize: tokenizeCodeFenced, - concrete: true +/** + * Schema for `minimist`. + */ +const minischema = { + unknown: handleUnknownArgument, + /** @type {Record} */ + default: {}, + /** @type {Record} */ + alias: {}, + /** @type {string[]} */ + string: [], + /** @type {string[]} */ + boolean: [] }; -function tokenizeCodeFenced(effects, ok, nok) { - var self = this; - var closingFenceConstruct = { - tokenize: tokenizeClosingFence, - partial: true - }; - var initialPrefix = prefixSize$2(this.events, 'linePrefix'); - var sizeOpen = 0; - var marker; - return start +let index = -1; +while (++index < schema.length) { + addEach(schema[index]); +} - function start(code) { - effects.enter('codeFenced'); - effects.enter('codeFencedFence'); - effects.enter('codeFencedFenceSequence'); - marker = code; - return sequenceOpen(code) - } +/** + * Parse CLI options. + * + * @param {string[]} flags + * @param {Options} configuration + */ +function options(flags, configuration) { + const extension = configuration.extensions[0]; + const name = configuration.name; + const config = toCamelCase(minimist(flags, minischema)); + let index = -1; - function sequenceOpen(code) { - if (code === marker) { - effects.consume(code); - sizeOpen++; - return sequenceOpen + while (++index < schema.length) { + const option = schema[index]; + if (option.type === 'string' && config[option.long] === '') { + throw fault('Missing value:%s', inspect(option).join(' ')) } - - effects.exit('codeFencedFenceSequence'); - return sizeOpen < 3 - ? nok(code) - : factorySpace$b(effects, infoOpen, 'whitespace')(code) } - function infoOpen(code) { - if (code === null || markdownLineEnding$e(code)) { - return openAfter(code) - } + const ext = commaSeparated(/** @type {string} */ (config.ext)); + const report = reporter(/** @type {string} */ (config.report)); + const help = [ + inspectAll(schema), + '', + 'Examples:', + '', + ' # Process `input.' + extension + '`', + ' $ ' + name + ' input.' + extension + ' -o output.' + extension, + '', + ' # Pipe', + ' $ ' + name + ' < input.' + extension + ' > output.' + extension, + '', + ' # Rewrite all applicable files', + ' $ ' + name + ' . -o' + ].join('\n'); - effects.enter('codeFencedFenceInfo'); - effects.enter('chunkString', { - contentType: 'string' - }); - return info(code) + return { + helpMessage: help, + cwd: configuration.cwd, + processor: configuration.processor, + help: config.help, + version: config.version, + files: config._, + filePath: config.filePath, + watch: config.watch, + extensions: ext.length === 0 ? configuration.extensions : ext, + output: config.output, + out: config.stdout, + tree: config.tree, + treeIn: config.treeIn, + treeOut: config.treeOut, + inspect: config.inspect, + rcName: configuration.rcName, + packageField: configuration.packageField, + rcPath: config.rcPath, + detectConfig: config.config, + settings: /** @type {Record} */ ( + settings(/** @type {string} */ (config.setting)) + ), + ignoreName: configuration.ignoreName, + ignorePath: config.ignorePath, + ignorePathResolveFrom: config.ignorePathResolveFrom, + ignorePatterns: commaSeparated( + /** @type {string} */ (config.ignorePattern) + ), + silentlyIgnore: config.silentlyIgnore, + detectIgnore: config.ignore, + pluginPrefix: configuration.pluginPrefix, + plugins: plugins$2(/** @type {string} */ (config.use)), + reporter: report[0], + reporterOptions: report[1], + color: config.color, + silent: config.silent, + quiet: config.quiet, + frail: config.frail } +} - function info(code) { - if (code === null || markdownLineEndingOrSpace$7(code)) { - effects.exit('chunkString'); - effects.exit('codeFencedFenceInfo'); - return factorySpace$b(effects, infoAfter, 'whitespace')(code) - } +/** + * @param {Option} option + */ +function addEach(option) { + const value = option.default; - if (code === 96 && code === marker) return nok(code) - effects.consume(code); - return info - } + minischema.default[option.long] = value === undefined ? null : value; - function infoAfter(code) { - if (code === null || markdownLineEnding$e(code)) { - return openAfter(code) - } + if (option.type && option.type in minischema) { + minischema[option.type].push(option.long); + } - effects.enter('codeFencedFenceMeta'); - effects.enter('chunkString', { - contentType: 'string' - }); - return meta(code) + if (option.short) { + minischema.alias[option.short] = option.long; } +} - function meta(code) { - if (code === null || markdownLineEnding$e(code)) { - effects.exit('chunkString'); - effects.exit('codeFencedFenceMeta'); - return openAfter(code) - } +/** + * Parse `extensions`. + * + * @param {string[]|string|null|undefined} value + * @returns {string[]} + */ +function commaSeparated(value) { + return flatten(normalize(value).map((d) => splitList(d))) +} - if (code === 96 && code === marker) return nok(code) - effects.consume(code); - return meta - } +/** + * Parse `plugins`. + * + * @param {string[]|string|null|undefined} value + * @returns {Record|undefined>} + */ +function plugins$2(value) { + const normalized = normalize(value).map((d) => splitOptions(d)); + let index = -1; + /** @type {Record|undefined>} */ + const result = {}; - function openAfter(code) { - effects.exit('codeFencedFence'); - return self.interrupt ? ok(code) : content(code) + while (++index < normalized.length) { + const value = normalized[index]; + result[value[0]] = value[1] ? parseConfig(value[1], {}) : undefined; } - function content(code) { - if (code === null) { - return after(code) - } + return result +} - if (markdownLineEnding$e(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return effects.attempt( - closingFenceConstruct, - after, - initialPrefix - ? factorySpace$b(effects, content, 'linePrefix', initialPrefix + 1) - : content - ) - } +/** + * Parse `reporter`: only one is accepted. + * + * @param {string[]|string|null|undefined} value + * @returns {[string|undefined, Record|undefined]} + */ +function reporter(value) { + const all = normalize(value) + .map((d) => splitOptions(d)) + .map( + /** + * @returns {[string, Record|undefined]} + */ + (value) => [value[0], value[1] ? parseConfig(value[1], {}) : undefined] + ); - effects.enter('codeFlowValue'); - return contentContinue(code) - } + return all[all.length - 1] || [] +} - function contentContinue(code) { - if (code === null || markdownLineEnding$e(code)) { - effects.exit('codeFlowValue'); - return content(code) - } +/** + * Parse `settings`. + * + * @param {string[]|string|null|undefined} value + * @returns {Record} + */ +function settings(value) { + const normalized = normalize(value); + let index = -1; + /** @type {Record} */ + const cache = {}; - effects.consume(code); - return contentContinue + while (++index < normalized.length) { + parseConfig(normalized[index], cache); } - function after(code) { - effects.exit('codeFenced'); - return ok(code) - } + return cache +} - function tokenizeClosingFence(effects, ok, nok) { - var size = 0; - return factorySpace$b( - effects, - closingSequenceStart, - 'linePrefix', - this.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 +/** + * Parse configuration. + * + * @param {string} value + * @param {Record} cache + * @returns {Record} + */ +function parseConfig(value, cache) { + /** @type {Record} */ + let flags; + /** @type {string} */ + let flag; + + try { + flags = toCamelCase(parseJSON(value)); + } catch (error) { + throw fault( + 'Cannot parse `%s` as JSON: %s', + value, + // Fix position + error.message.replace(/at(?= position)/, 'around') ) + } - function closingSequenceStart(code) { - effects.enter('codeFencedFence'); - effects.enter('codeFencedFenceSequence'); - return closingSequence(code) + for (flag in flags) { + if (own$7.call(flags, flag)) { + cache[flag] = flags[flag]; } + } - function closingSequence(code) { - if (code === marker) { - effects.consume(code); - size++; - return closingSequence - } + return cache +} - if (size < sizeOpen) return nok(code) - effects.exit('codeFencedFenceSequence'); - return factorySpace$b(effects, closingSequenceEnd, 'whitespace')(code) +/** + * Handle an unknown flag. + * + * @param {string} flag + * @returns {boolean} + */ +function handleUnknownArgument(flag) { + // Not a glob. + if (flag.charAt(0) === '-') { + // Long options, always unknown. + if (flag.charAt(1) === '-') { + throw fault( + 'Unknown option `%s`, expected:\n%s', + flag, + inspectAll(schema) + ) } - function closingSequenceEnd(code) { - if (code === null || markdownLineEnding$e(code)) { - effects.exit('codeFencedFence'); - return ok(code) - } + // Short options, can be grouped. + const found = flag.slice(1).split(''); + const known = schema.filter((d) => d.short); + const knownKeys = new Set(known.map((d) => d.short)); + let index = -1; - return nok(code) + while (++index < found.length) { + const key = found[index]; + if (!knownKeys.has(key)) { + throw fault( + 'Unknown short option `-%s`, expected:\n%s', + key, + inspectAll(known) + ) + } } } + + return true } -var codeFenced_1 = codeFenced$1; +/** + * Inspect all `options`. + * + * @param {Option[]} options + * @returns {string} + */ +function inspectAll(options) { + return textTable(options.map((d) => inspect(d))) +} -var markdownLineEnding$d = markdownLineEnding_1; -var chunkedSplice$2 = chunkedSplice_1; -var prefixSize$1 = prefixSize_1; -var factorySpace$a = factorySpace$i; +/** + * Inspect one `option`. + * + * @param {Option} option + * @returns {string[]} + */ +function inspect(option) { + let description = option.description; + let long = option.long; -var codeIndented$1 = { - name: 'codeIndented', - tokenize: tokenizeCodeIndented, - resolve: resolveCodeIndented -}; -var indentedContentConstruct = { - tokenize: tokenizeIndentedContent, - partial: true -}; + if (option.default === true || option.truelike) { + description += ' (on by default)'; + long = '[no-]' + long; + } -function resolveCodeIndented(events, context) { - var code = { - type: 'codeIndented', - start: events[0][1].start, - end: events[events.length - 1][1].end - }; - chunkedSplice$2(events, 0, 0, [['enter', code, context]]); - chunkedSplice$2(events, events.length, 0, [['exit', code, context]]); - return events + return [ + '', + option.short ? '-' + option.short : '', + '--' + long + (option.value ? ' ' + option.value : ''), + description + ] } -function tokenizeCodeIndented(effects, ok, nok) { - return effects.attempt(indentedContentConstruct, afterPrefix, nok) - - function afterPrefix(code) { - if (code === null) { - return ok(code) - } - - if (markdownLineEnding$d(code)) { - return effects.attempt(indentedContentConstruct, afterPrefix, ok)(code) - } - - effects.enter('codeFlowValue'); - return content(code) +/** + * Normalize `value`. + * + * @param {string[]|string|null|undefined} value + * @returns {string[]} + */ +function normalize(value) { + if (!value) { + return [] } - function content(code) { - if (code === null || markdownLineEnding$d(code)) { - effects.exit('codeFlowValue'); - return afterPrefix(code) - } - - effects.consume(code); - return content + if (typeof value === 'string') { + return [value] } -} - -function tokenizeIndentedContent(effects, ok, nok) { - var self = this; - return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1) - - function afterPrefix(code) { - if (markdownLineEnding$d(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1) - } - return prefixSize$1(self.events, 'linePrefix') < 4 ? nok(code) : ok(code) - } + return flatten(value.map((d) => normalize(d))) } -var codeIndented_1 = codeIndented$1; - -var markdownLineEnding$c = markdownLineEnding_1; - -var codeText$1 = { - name: 'codeText', - tokenize: tokenizeCodeText, - resolve: resolveCodeText, - previous: previous$1 -}; - -function resolveCodeText(events) { - var tailExitIndex = events.length - 4; - var headEnterIndex = 3; - var index; - var enter; // If we start and end with an EOL or a space. +/** + * Flatten `values`. + * + * @param {string|string[]|string[][]} values + * @returns {string[]} + */ +function flatten(values) { + // @ts-expect-error: TS is wrong. + return values.flat() +} - if ( - (events[headEnterIndex][1].type === 'lineEnding' || - events[headEnterIndex][1].type === 'space') && - (events[tailExitIndex][1].type === 'lineEnding' || - events[tailExitIndex][1].type === 'space') - ) { - index = headEnterIndex; // And we have data. +/** + * @param {string} value + * @returns {string[]} + */ +function splitOptions(value) { + return value.split('=') +} - while (++index < tailExitIndex) { - if (events[index][1].type === 'codeTextData') { - // Then we have padding. - events[tailExitIndex][1].type = events[headEnterIndex][1].type = - 'codeTextPadding'; - headEnterIndex += 2; - tailExitIndex -= 2; - break - } - } - } // Merge adjacent spaces and data. +/** + * @param {string} value + * @returns {string[]} + */ +function splitList(value) { + return value.split(',') +} - index = headEnterIndex - 1; - tailExitIndex++; +/** + * Transform the keys on an object to camel-case, recursivly. + * + * @param {Record} object + * @returns {Record} + */ +function toCamelCase(object) { + /** @type {Record} */ + const result = {}; + /** @type {string} */ + let key; - while (++index <= tailExitIndex) { - if (enter === undefined) { - if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { - enter = index; - } - } else if ( - index === tailExitIndex || - events[index][1].type === 'lineEnding' - ) { - events[enter][1].type = 'codeTextData'; + for (key in object) { + if (own$7.call(object, key)) { + let value = object[key]; - if (index !== enter + 2) { - events[enter][1].end = events[index - 1][1].end; - events.splice(enter + 2, index - enter - 2); - tailExitIndex -= index - enter - 2; - index = enter + 2; + if (value && typeof value === 'object' && !Array.isArray(value)) { + // @ts-expect-error: looks like an object. + value = toCamelCase(value); } - enter = undefined; + result[camelcase(key)] = value; } } - return events + return result } -function previous$1(code) { - // If there is a previous code, there will always be a tail. - return ( - code !== 96 || - this.events[this.events.length - 1][1].type === 'characterEscape' - ) +/** + * Parse a (lazy?) JSON config. + * + * @param {string} value + * @returns {Record} + */ +function parseJSON(value) { + return lib.parse('{' + value + '}') } -function tokenizeCodeText(effects, ok, nok) { - var sizeOpen = 0; - var size; - var token; - return start - - function start(code) { - effects.enter('codeText'); - effects.enter('codeTextSequence'); - return openingSequence(code) - } - - function openingSequence(code) { - if (code === 96) { - effects.consume(code); - sizeOpen++; - return openingSequence - } - - effects.exit('codeTextSequence'); - return gap(code) - } +/** + * @typedef {import('unified-engine').Options} EngineOptions + * @typedef {import('unified-engine').Context} EngineContext + * @typedef {import('unified-engine').Callback} EngineCallback + * @typedef {import('./options.js').Options} Options + */ - function gap(code) { - // EOF. - if (code === null) { - return nok(code) - } // Closing fence? - // Could also be data. +// Fake TTY stream. +const ttyStream = Object.assign(new stream.Readable(), {isTTY: true}); - if (code === 96) { - token = effects.enter('codeTextSequence'); - size = 0; - return closingSequence(code) - } // Tabs don’t work, and virtual spaces don’t make sense. +// Exit, lazily, with the correct exit status code. +let exitStatus = 0; - if (code === 32) { - effects.enter('space'); - effects.consume(code); - effects.exit('space'); - return gap - } +process$2.on('exit', onexit); - if (markdownLineEnding$c(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return gap - } // Data. +// Handle uncaught errors, such as from unexpected async behaviour. +process$2.on('uncaughtException', fail); - effects.enter('codeTextData'); - return data(code) - } // In code. +/** + * Start the CLI. + * + * @param {Options} cliConfig + */ +function args(cliConfig) { + /** @type {EngineOptions & {help: boolean, helpMessage: string, watch: boolean, version: boolean}} */ + let config; + /** @type {chokidar.FSWatcher|undefined} */ + let watcher; + /** @type {boolean|string|undefined} */ + let output; - function data(code) { - if ( - code === null || - code === 32 || - code === 96 || - markdownLineEnding$c(code) - ) { - effects.exit('codeTextData'); - return gap(code) - } + try { + // @ts-expect-error: Close enough. + config = options(process$2.argv.slice(2), cliConfig); + } catch (error) { + return fail(error, true) + } - effects.consume(code); - return data - } // Closing fence. + if (config.help) { + process$2.stdout.write( + [ + 'Usage: ' + cliConfig.name + ' [options] [path | glob ...]', + '', + ' ' + cliConfig.description, + '', + 'Options:', + '', + config.helpMessage, + '' + ].join('\n'), + noop$1 + ); - function closingSequence(code) { - // More. - if (code === 96) { - effects.consume(code); - size++; - return closingSequence - } // Done! + return + } - if (size === sizeOpen) { - effects.exit('codeTextSequence'); - effects.exit('codeText'); - return ok(code) - } // More or less accents: mark as data. + if (config.version) { + process$2.stdout.write(cliConfig.version + '\n', noop$1); - token.type = 'codeTextData'; - return data(code) + return } -} - -var codeText_1 = codeText$1; -var asciiControl$1 = asciiControl_1; -var markdownLineEndingOrSpace$6 = markdownLineEndingOrSpace_1; -var markdownLineEnding$b = markdownLineEnding_1; + // Modify `config` for watching. + if (config.watch) { + output = config.output; -// eslint-disable-next-line max-params -function destinationFactory( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - var limit = max || Infinity; - var balance = 0; - return start + // Do not read from stdin(4). + config.streamIn = ttyStream; - function start(code) { - if (code === 60) { - effects.enter(type); - effects.enter(literalType); - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - return destinationEnclosedBefore - } + // Do not write to stdout(4). + config.out = false; - if (asciiControl$1(code) || code === 41) { - return nok(code) - } + process$2.stderr.write( + source$1.bold('Watching...') + ' (press CTRL+C to exit)\n', + noop$1 + ); - effects.enter(type); - effects.enter(rawType); - effects.enter(stringType); - effects.enter('chunkString', { - contentType: 'string' - }); - return destinationRaw(code) - } + // Prevent infinite loop if set to regeneration. + if (output === true) { + config.output = false; - function destinationEnclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - effects.exit(literalType); - effects.exit(type); - return ok + process$2.stderr.write( + source$1.yellow('Note') + ': Ignoring `--output` until exit.\n', + noop$1 + ); } - - effects.enter(stringType); - effects.enter('chunkString', { - contentType: 'string' - }); - return destinationEnclosed(code) } - function destinationEnclosed(code) { - if (code === 62) { - effects.exit('chunkString'); - effects.exit(stringType); - return destinationEnclosedBefore(code) - } - - if (code === null || code === 60 || markdownLineEnding$b(code)) { - return nok(code) - } + // Initial run. + engine(config, done); - effects.consume(code); - return code === 92 ? destinationEnclosedEscape : destinationEnclosed - } + /** + * Handle complete run. + * + * @type {EngineCallback} + */ + function done(error, code, context) { + if (error) { + clean(); + fail(error); + } else { + exitStatus = code || 0; - function destinationEnclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code); - return destinationEnclosed + if (config.watch && !watcher && context) { + subscribe(context); + } } - - return destinationEnclosed(code) } - function destinationRaw(code) { - if (code === 40) { - if (++balance > limit) return nok(code) - effects.consume(code); - return destinationRaw + // Clean the watcher. + function clean() { + if (watcher) { + watcher.close(); + watcher = undefined; } + } - if (code === 41) { - if (!balance--) { - effects.exit('chunkString'); - effects.exit(stringType); - effects.exit(rawType); - effects.exit(type); - return ok(code) - } + /** + * Subscribe a chokidar watcher to all processed files. + * + * @param {EngineContext} context + */ + function subscribe(context) { + watcher = chokidar + // @ts-expect-error: `fileSet` is available. + .watch(context.fileSet.origins, {cwd: config.cwd, ignoreInitial: true}) + .on('error', done) + .on('change', (filePath) => { + config.files = [filePath]; + engine(config, done); + }); - effects.consume(code); - return destinationRaw - } + process$2.on('SIGINT', onsigint); - if (code === null || markdownLineEndingOrSpace$6(code)) { - if (balance) return nok(code) - effects.exit('chunkString'); - effects.exit(stringType); - effects.exit(rawType); - effects.exit(type); - return ok(code) - } + /** + * Handle a SIGINT. + */ + function onsigint() { + // Hide the `^C` in terminal. + process$2.stderr.write('\n', noop$1); - if (asciiControl$1(code)) return nok(code) - effects.consume(code); - return code === 92 ? destinationRawEscape : destinationRaw - } + clean(); - function destinationRawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code); - return destinationRaw + // Do another process if `output` specified regeneration. + if (output === true) { + config.output = output; + config.watch = false; + engine(config, done); + } } - - return destinationRaw(code) } } -var factoryDestination$2 = destinationFactory; - -var markdownLineEnding$a = markdownLineEnding_1; -var markdownSpace$7 = markdownSpace_1; - -// eslint-disable-next-line max-params -function labelFactory(effects, ok, nok, type, markerType, stringType) { - var self = this; - var size = 0; - var data; - return start - - function start(code) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.enter(stringType); - return atBreak - } - - function atBreak(code) { - if ( - code === null || - code === 91 || - (code === 93 && !data) || - /* c8 ignore next */ - (code === 94 && - /* c8 ignore next */ - !size && - /* c8 ignore next */ - '_hiddenFootnoteSupport' in self.parser.constructs) || - size > 999 - ) { - return nok(code) - } +/** + * Print an error, optionally with stack. + * + * @param {Error} error + * @param {boolean} [pretty=false] + */ +function fail(error, pretty) { + // Old versions of Node + /* c8 ignore next 1 */ + const message = String((pretty ? error : error.stack) || error); - if (code === 93) { - effects.exit(stringType); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok - } + exitStatus = 1; - if (markdownLineEnding$a(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return atBreak - } + process$2.stderr.write(message.trim() + '\n', noop$1); +} - effects.enter('chunkString', { - contentType: 'string' - }); - return label(code) - } +function onexit() { + /* eslint-disable unicorn/no-process-exit */ + process$2.exit(exitStatus); + /* eslint-enable unicorn/no-process-exit */ +} - function label(code) { - if ( - code === null || - code === 91 || - code === 93 || - markdownLineEnding$a(code) || - size++ > 999 - ) { - effects.exit('chunkString'); - return atBreak(code) - } +function noop$1() {} - effects.consume(code); - data = data || !markdownSpace$7(code); - return code === 92 ? labelEscape : label - } +var require$$0 = [ + "md", + "markdown", + "mdown", + "mkdn", + "mkd", + "mdwn", + "mkdown", + "ron" +]; - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code); - size++; - return label - } +var markdownExtensions = require$$0; - return label(code) +/** + * Throw a given error. + * + * @param {Error | null | undefined} [error] + */ +function bail(error) { + if (error) { + throw error } } -var factoryLabel$2 = labelFactory; - -var markdownLineEnding$9 = markdownLineEnding_1; -var markdownSpace$6 = markdownSpace_1; -var factorySpace$9 = factorySpace$i; - -function whitespaceFactory(effects, ok) { - var seen; - return start +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; - function start(code) { - if (markdownLineEnding$9(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - seen = true; - return start - } +var isArray = function isArray(arr) { + if (typeof Array.isArray === 'function') { + return Array.isArray(arr); + } - if (markdownSpace$6(code)) { - return factorySpace$9( - effects, - start, - seen ? 'linePrefix' : 'lineSuffix' - )(code) - } + return toStr.call(arr) === '[object Array]'; +}; - return ok(code) - } -} +var isPlainObject = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== '[object Object]') { + return false; + } -var factoryWhitespace$2 = whitespaceFactory; + var hasOwnConstructor = hasOwn.call(obj, 'constructor'); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); + // Not own constructor property must be Object + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } -var markdownLineEnding$8 = markdownLineEnding_1; -var factorySpace$8 = factorySpace$i; + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + for (key in obj) { /**/ } -function titleFactory(effects, ok, nok, type, markerType, stringType) { - var marker; - return start + return typeof key === 'undefined' || hasOwn.call(obj, key); +}; - function start(code) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - marker = code === 40 ? 41 : code; - return atFirstTitleBreak - } +// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target +var setProperty = function setProperty(target, options) { + if (defineProperty && options.name === '__proto__') { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } +}; - function atFirstTitleBreak(code) { - if (code === marker) { - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok - } +// Return undefined instead of __proto__ if '__proto__' is not an own property +var getProperty = function getProperty(obj, name) { + if (name === '__proto__') { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + // In early versions of node, obj['__proto__'] is buggy when obj has + // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. + return gOPD(obj, name).value; + } + } - effects.enter(stringType); - return atTitleBreak(code) - } + return obj[name]; +}; - function atTitleBreak(code) { - if (code === marker) { - effects.exit(stringType); - return atFirstTitleBreak(marker) - } +var extend = function extend() { + var options, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; - if (code === null) { - return nok(code) - } // Note: blank lines can’t exist in content. + // Handle a deep copy situation + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { + target = {}; + } - if (markdownLineEnding$8(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$8(effects, atTitleBreak, 'linePrefix') - } + for (; i < length; ++i) { + options = arguments[i]; + // Only deal with non-null/undefined values + if (options != null) { + // Extend the base object + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); - effects.enter('chunkString', { - contentType: 'string' - }); - return title(code) - } + // Prevent never-ending loop + if (target !== copy) { + // Recurse if we're merging plain objects or arrays + if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject(src) ? src : {}; + } - function title(code) { - if (code === marker || code === null || markdownLineEnding$8(code)) { - effects.exit('chunkString'); - return atTitleBreak(code) - } + // Never move original objects, clone them + setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); - effects.consume(code); - return code === 92 ? titleEscape : title - } + // Don't bring in undefined values + } else if (typeof copy !== 'undefined') { + setProperty(target, { name: name, newValue: copy }); + } + } + } + } + } - function titleEscape(code) { - if (code === marker || code === 92) { - effects.consume(code); - return title - } + // Return the modified object + return target; +}; - return title(code) - } -} +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFileCompatible} VFileCompatible + * @typedef {import('vfile').VFileValue} VFileValue + * @typedef {import('..').Processor} Processor + * @typedef {import('..').Plugin} Plugin + * @typedef {import('..').Preset} Preset + * @typedef {import('..').Pluggable} Pluggable + * @typedef {import('..').PluggableList} PluggableList + * @typedef {import('..').Transformer} Transformer + * @typedef {import('..').Parser} Parser + * @typedef {import('..').Compiler} Compiler + * @typedef {import('..').RunCallback} RunCallback + * @typedef {import('..').ProcessCallback} ProcessCallback + * + * @typedef Context + * @property {Node} tree + * @property {VFile} file + */ -var factoryTitle$2 = titleFactory; +// Expose a frozen processor. +const unified = base().freeze(); -var markdownLineEnding$7 = markdownLineEnding_1; -var markdownLineEndingOrSpace$5 = markdownLineEndingOrSpace_1; -var normalizeIdentifier$3 = normalizeIdentifier_1; -var factoryDestination$1 = factoryDestination$2; -var factoryLabel$1 = factoryLabel$2; -var factorySpace$7 = factorySpace$i; -var factoryWhitespace$1 = factoryWhitespace$2; -var factoryTitle$1 = factoryTitle$2; +const own$6 = {}.hasOwnProperty; -var definition$2 = { - name: 'definition', - tokenize: tokenizeDefinition -}; -var titleConstruct = { - tokenize: tokenizeTitle, - partial: true -}; +// Function to create the first processor. +/** + * @returns {Processor} + */ +function base() { + const transformers = trough(); + /** @type {Processor['attachers']} */ + const attachers = []; + /** @type {Record} */ + let namespace = {}; + /** @type {boolean|undefined} */ + let frozen; + let freezeIndex = -1; -function tokenizeDefinition(effects, ok, nok) { - var self = this; - var identifier; - return start + // Data management. + // @ts-expect-error: overloads are handled. + processor.data = data; + processor.Parser = undefined; + processor.Compiler = undefined; - function start(code) { - effects.enter('definition'); - return factoryLabel$1.call( - self, - effects, - labelAfter, - nok, - 'definitionLabel', - 'definitionLabelMarker', - 'definitionLabelString' - )(code) - } + // Lock. + processor.freeze = freeze; - function labelAfter(code) { - identifier = normalizeIdentifier$3( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ); + // Plugins. + processor.attachers = attachers; + // @ts-expect-error: overloads are handled. + processor.use = use; - if (code === 58) { - effects.enter('definitionMarker'); - effects.consume(code); - effects.exit('definitionMarker'); // Note: blank lines can’t exist in content. + // API. + processor.parse = parse; + processor.stringify = stringify; + // @ts-expect-error: overloads are handled. + processor.run = run; + processor.runSync = runSync; + // @ts-expect-error: overloads are handled. + processor.process = process; + processor.processSync = processSync; - return factoryWhitespace$1( - effects, - factoryDestination$1( - effects, - effects.attempt( - titleConstruct, - factorySpace$7(effects, after, 'whitespace'), - factorySpace$7(effects, after, 'whitespace') - ), - nok, - 'definitionDestination', - 'definitionDestinationLiteral', - 'definitionDestinationLiteralMarker', - 'definitionDestinationRaw', - 'definitionDestinationString' - ) - ) + // Expose. + return processor + + // Create a new processor based on the processor in the current scope. + /** @type {Processor} */ + function processor() { + const destination = base(); + let index = -1; + + while (++index < attachers.length) { + destination.use(...attachers[index]); } - return nok(code) - } + destination.data(extend(true, {}, namespace)); - function after(code) { - if (code === null || markdownLineEnding$7(code)) { - effects.exit('definition'); + return destination + } - if (self.parser.defined.indexOf(identifier) < 0) { - self.parser.defined.push(identifier); + /** + * @param {string|Record} [key] + * @param {unknown} [value] + * @returns {unknown} + */ + function data(key, value) { + if (typeof key === 'string') { + // Set `key`. + if (arguments.length === 2) { + assertUnfrozen('data', frozen); + namespace[key] = value; + return processor } - return ok(code) + // Get `key`. + return (own$6.call(namespace, key) && namespace[key]) || null } - return nok(code) - } -} - -function tokenizeTitle(effects, ok, nok) { - return start + // Set space. + if (key) { + assertUnfrozen('data', frozen); + namespace = key; + return processor + } - function start(code) { - return markdownLineEndingOrSpace$5(code) - ? factoryWhitespace$1(effects, before)(code) - : nok(code) + // Get space. + return namespace } - function before(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle$1( - effects, - factorySpace$7(effects, after, 'whitespace'), - nok, - 'definitionTitle', - 'definitionTitleMarker', - 'definitionTitleString' - )(code) + /** @type {Processor['freeze']} */ + function freeze() { + if (frozen) { + return processor } - return nok(code) - } + while (++freezeIndex < attachers.length) { + const [attacher, ...options] = attachers[freezeIndex]; - function after(code) { - return code === null || markdownLineEnding$7(code) ? ok(code) : nok(code) - } -} + if (options[0] === false) { + continue + } -var definition_1$1 = definition$2; + if (options[0] === true) { + options[1] = undefined; + } -var markdownLineEnding$6 = markdownLineEnding_1; + /** @type {Transformer|void} */ + const transformer = attacher.call(processor, ...options); -var hardBreakEscape$1 = { - name: 'hardBreakEscape', - tokenize: tokenizeHardBreakEscape -}; + if (typeof transformer === 'function') { + transformers.use(transformer); + } + } -function tokenizeHardBreakEscape(effects, ok, nok) { - return start + frozen = true; + freezeIndex = Number.POSITIVE_INFINITY; - function start(code) { - effects.enter('hardBreakEscape'); - effects.enter('escapeMarker'); - effects.consume(code); - return open + return processor } - function open(code) { - if (markdownLineEnding$6(code)) { - effects.exit('escapeMarker'); - effects.exit('hardBreakEscape'); - return ok(code) + /** + * @param {Pluggable|null|undefined} [value] + * @param {...unknown} options + * @returns {Processor} + */ + function use(value, ...options) { + /** @type {Record|undefined} */ + let settings; + + assertUnfrozen('use', frozen); + + if (value === null || value === undefined) ; else if (typeof value === 'function') { + addPlugin(value, ...options); + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new TypeError('Expected usable value, not `' + value + '`') } - return nok(code) - } -} + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings); + } -var hardBreakEscape_1 = hardBreakEscape$1; + return processor -var markdownLineEnding$5 = markdownLineEnding_1; -var markdownLineEndingOrSpace$4 = markdownLineEndingOrSpace_1; -var markdownSpace$5 = markdownSpace_1; -var chunkedSplice$1 = chunkedSplice_1; -var factorySpace$6 = factorySpace$i; + /** + * @param {import('..').Pluggable} value + * @returns {void} + */ + function add(value) { + if (typeof value === 'function') { + addPlugin(value); + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + const [plugin, ...options] = value; + addPlugin(plugin, ...options); + } else { + addPreset(value); + } + } else { + throw new TypeError('Expected usable value, not `' + value + '`') + } + } -var headingAtx$1 = { - name: 'headingAtx', - tokenize: tokenizeHeadingAtx, - resolve: resolveHeadingAtx -}; + /** + * @param {Preset} result + * @returns {void} + */ + function addPreset(result) { + addList(result.plugins); -function resolveHeadingAtx(events, context) { - var contentEnd = events.length - 2; - var contentStart = 3; - var content; - var text; // Prefix whitespace, part of the opening. + if (result.settings) { + settings = Object.assign(settings || {}, result.settings); + } + } - if (events[contentStart][1].type === 'whitespace') { - contentStart += 2; - } // Suffix whitespace, part of the closing. + /** + * @param {PluggableList|null|undefined} [plugins] + * @returns {void} + */ + function addList(plugins) { + let index = -1; - if ( - contentEnd - 2 > contentStart && - events[contentEnd][1].type === 'whitespace' - ) { - contentEnd -= 2; - } + if (plugins === null || plugins === undefined) ; else if (Array.isArray(plugins)) { + while (++index < plugins.length) { + const thing = plugins[index]; + add(thing); + } + } else { + throw new TypeError('Expected a list of plugins, not `' + plugins + '`') + } + } - if ( - events[contentEnd][1].type === 'atxHeadingSequence' && - (contentStart === contentEnd - 1 || - (contentEnd - 4 > contentStart && - events[contentEnd - 2][1].type === 'whitespace')) - ) { - contentEnd -= contentStart + 1 === contentEnd ? 2 : 4; - } + /** + * @param {Plugin} plugin + * @param {...unknown} [value] + * @returns {void} + */ + function addPlugin(plugin, value) { + let index = -1; + /** @type {Processor['attachers'][number]|undefined} */ + let entry; - if (contentEnd > contentStart) { - content = { - type: 'atxHeadingText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end - }; - text = { - type: 'chunkText', - start: events[contentStart][1].start, - end: events[contentEnd][1].end, - contentType: 'text' - }; - chunkedSplice$1(events, contentStart, contentEnd - contentStart + 1, [ - ['enter', content, context], - ['enter', text, context], - ['exit', text, context], - ['exit', content, context] - ]); + while (++index < attachers.length) { + if (attachers[index][0] === plugin) { + entry = attachers[index]; + break + } + } + + if (entry) { + if (isPlainObject$1(entry[1]) && isPlainObject$1(value)) { + value = extend(true, entry[1], value); + } + + entry[1] = value; + } else { + // @ts-expect-error: fine. + attachers.push([...arguments]); + } + } } - return events -} + /** @type {Processor['parse']} */ + function parse(doc) { + processor.freeze(); + const file = vfile(doc); + const Parser = processor.Parser; + assertParser('parse', Parser); -function tokenizeHeadingAtx(effects, ok, nok) { - var self = this; - var size = 0; - return start + if (newable(Parser, 'parse')) { + // @ts-expect-error: `newable` checks this. + return new Parser(String(file), file).parse() + } - function start(code) { - effects.enter('atxHeading'); - effects.enter('atxHeadingSequence'); - return fenceOpenInside(code) + // @ts-expect-error: `newable` checks this. + return Parser(String(file), file) // eslint-disable-line new-cap } - function fenceOpenInside(code) { - if (code === 35 && size++ < 6) { - effects.consume(code); - return fenceOpenInside - } + /** @type {Processor['stringify']} */ + function stringify(node, doc) { + processor.freeze(); + const file = vfile(doc); + const Compiler = processor.Compiler; + assertCompiler('stringify', Compiler); + assertNode(node); - if (code === null || markdownLineEndingOrSpace$4(code)) { - effects.exit('atxHeadingSequence'); - return self.interrupt ? ok(code) : headingBreak(code) + if (newable(Compiler, 'compile')) { + // @ts-expect-error: `newable` checks this. + return new Compiler(node, file).compile() } - return nok(code) + // @ts-expect-error: `newable` checks this. + return Compiler(node, file) // eslint-disable-line new-cap } - function headingBreak(code) { - if (code === 35) { - effects.enter('atxHeadingSequence'); - return sequence(code) + /** + * @param {Node} node + * @param {VFileCompatible|RunCallback} [doc] + * @param {RunCallback} [callback] + * @returns {Promise|void} + */ + function run(node, doc, callback) { + assertNode(node); + processor.freeze(); + + if (!callback && typeof doc === 'function') { + callback = doc; + doc = undefined; } - if (code === null || markdownLineEnding$5(code)) { - effects.exit('atxHeading'); - return ok(code) + if (!callback) { + return new Promise(executor) } - if (markdownSpace$5(code)) { - return factorySpace$6(effects, headingBreak, 'whitespace')(code) + executor(null, callback); + + /** + * @param {null|((node: Node) => void)} resolve + * @param {(error: Error) => void} reject + * @returns {void} + */ + function executor(resolve, reject) { + // @ts-expect-error: `doc` can’t be a callback anymore, we checked. + transformers.run(node, vfile(doc), done); + + /** + * @param {Error|null} error + * @param {Node} tree + * @param {VFile} file + * @returns {void} + */ + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + // @ts-expect-error: `callback` is defined if `resolve` is not. + callback(null, tree, file); + } + } } + } - effects.enter('atxHeadingText'); - return data(code) + /** @type {Processor['runSync']} */ + function runSync(node, file) { + /** @type {Node|undefined} */ + let result; + /** @type {boolean|undefined} */ + let complete; + + processor.run(node, file, done); + + assertDone('runSync', 'run', complete); + + // @ts-expect-error: we either bailed on an error or have a tree. + return result + + /** + * @param {Error|null} [error] + * @param {Node} [tree] + * @returns {void} + */ + function done(error, tree) { + bail(error); + result = tree; + complete = true; + } } - function sequence(code) { - if (code === 35) { - effects.consume(code); - return sequence + /** + * @param {VFileCompatible} doc + * @param {ProcessCallback} [callback] + * @returns {Promise|undefined} + */ + function process(doc, callback) { + processor.freeze(); + assertParser('process', processor.Parser); + assertCompiler('process', processor.Compiler); + + if (!callback) { + return new Promise(executor) } - effects.exit('atxHeadingSequence'); - return headingBreak(code) - } + executor(null, callback); - function data(code) { - if (code === null || code === 35 || markdownLineEndingOrSpace$4(code)) { - effects.exit('atxHeadingText'); - return headingBreak(code) + /** + * @param {null|((file: VFile) => void)} resolve + * @param {(error?: Error|null|undefined) => void} reject + * @returns {void} + */ + function executor(resolve, reject) { + const file = vfile(doc); + + processor.run(processor.parse(file), file, (error, tree, file) => { + if (error || !tree || !file) { + done(error); + } else { + /** @type {unknown} */ + const result = processor.stringify(tree, file); + + if (result === undefined || result === null) ; else if (looksLikeAVFileValue(result)) { + file.value = result; + } else { + file.result = result; + } + + done(error, file); + } + }); + + /** + * @param {Error|null|undefined} [error] + * @param {VFile|undefined} [file] + * @returns {void} + */ + function done(error, file) { + if (error || !file) { + reject(error); + } else if (resolve) { + resolve(file); + } else { + // @ts-expect-error: `callback` is defined if `resolve` is not. + callback(null, file); + } + } } + } - effects.consume(code); - return data + /** @type {Processor['processSync']} */ + function processSync(doc) { + /** @type {boolean|undefined} */ + let complete; + + processor.freeze(); + assertParser('processSync', processor.Parser); + assertCompiler('processSync', processor.Compiler); + + const file = vfile(doc); + + processor.process(file, done); + + assertDone('processSync', 'process', complete); + + return file + + /** + * @param {Error|null|undefined} [error] + * @returns {void} + */ + function done(error) { + complete = true; + bail(error); + } } } -var headingAtx_1 = headingAtx$1; - -// This module is copied from . -var basics = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'section', - 'source', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -]; - -var htmlBlockNames$1 = basics; - -// This module is copied from . -var raws = ['pre', 'script', 'style', 'textarea']; - -var htmlRawNames$1 = raws; - -var asciiAlpha$2 = asciiAlpha_1; -var asciiAlphanumeric$2 = asciiAlphanumeric_1; -var markdownLineEnding$4 = markdownLineEnding_1; -var markdownLineEndingOrSpace$3 = markdownLineEndingOrSpace_1; -var markdownSpace$4 = markdownSpace_1; -var fromCharCode = fromCharCode_1; -var htmlBlockNames = htmlBlockNames$1; -var htmlRawNames = htmlRawNames$1; -var partialBlankLine$1 = partialBlankLine_1; - -var htmlFlow$1 = { - name: 'htmlFlow', - tokenize: tokenizeHtmlFlow, - resolveTo: resolveToHtmlFlow, - concrete: true -}; -var nextBlankConstruct = { - tokenize: tokenizeNextBlank, - partial: true -}; +/** + * Check if `value` is a constructor. + * + * @param {unknown} value + * @param {string} name + * @returns {boolean} + */ +function newable(value, name) { + return ( + typeof value === 'function' && + // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && + // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype) + ) +} -function resolveToHtmlFlow(events) { - var index = events.length; +/** + * Check if `value` is an object with keys. + * + * @param {Record} value + * @returns {boolean} + */ +function keys(value) { + /** @type {string} */ + let key; - while (index--) { - if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { - break + for (key in value) { + if (own$6.call(value, key)) { + return true } } - if (index > 1 && events[index - 2][1].type === 'linePrefix') { - // Add the prefix start to the HTML token. - events[index][1].start = events[index - 2][1].start; // Add the prefix start to the HTML line token. + return false +} - events[index + 1][1].start = events[index - 2][1].start; // Remove the line prefix. +/** + * Assert a parser is available. + * + * @param {string} name + * @param {unknown} value + * @returns {asserts value is Parser} + */ +function assertParser(name, value) { + if (typeof value !== 'function') { + throw new TypeError('Cannot `' + name + '` without `Parser`') + } +} - events.splice(index - 2, 2); +/** + * Assert a compiler is available. + * + * @param {string} name + * @param {unknown} value + * @returns {asserts value is Compiler} + */ +function assertCompiler(name, value) { + if (typeof value !== 'function') { + throw new TypeError('Cannot `' + name + '` without `Compiler`') } +} - return events +/** + * Assert the processor is not frozen. + * + * @param {string} name + * @param {unknown} frozen + * @returns {asserts frozen is false} + */ +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + 'Cannot call `' + + name + + '` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.' + ) + } } -function tokenizeHtmlFlow(effects, ok, nok) { - var self = this; - var kind; - var startTag; - var buffer; - var index; - var marker; - return start +/** + * Assert `node` is a unist node. + * + * @param {unknown} node + * @returns {asserts node is Node} + */ +function assertNode(node) { + // `isPlainObj` unfortunately uses `any` instead of `unknown`. + // type-coverage:ignore-next-line + if (!isPlainObject$1(node) || typeof node.type !== 'string') { + throw new TypeError('Expected node, got `' + node + '`') + // Fine. + } +} - function start(code) { - effects.enter('htmlFlow'); - effects.enter('htmlFlowData'); - effects.consume(code); - return open +/** + * Assert that `complete` is `true`. + * + * @param {string} name + * @param {string} asyncName + * @param {unknown} complete + * @returns {asserts complete is true} + */ +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + '`' + name + '` finished async. Use `' + asyncName + '` instead' + ) } +} - function open(code) { - if (code === 33) { - effects.consume(code); - return declarationStart - } +/** + * @param {VFileCompatible} [value] + * @returns {VFile} + */ +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value) +} - if (code === 47) { - effects.consume(code); - return tagCloseStart - } +/** + * @param {VFileCompatible} [value] + * @returns {value is VFile} + */ +function looksLikeAVFile(value) { + return Boolean( + value && + typeof value === 'object' && + 'message' in value && + 'messages' in value + ) +} - if (code === 63) { - effects.consume(code); - kind = 3; // While we’re in an instruction instead of a declaration, we’re on a `?` - // right now, so we do need to search for `>`, similar to declarations. +/** + * @param {unknown} [value] + * @returns {value is VFileValue} + */ +function looksLikeAVFileValue(value) { + return typeof value === 'string' || isBuffer(value) +} - return self.interrupt ? ok : continuationDeclarationInside - } +/** + * @typedef Options + * @property {boolean} [includeImageAlt=true] + */ - if (asciiAlpha$2(code)) { - effects.consume(code); - buffer = fromCharCode(code); - startTag = true; - return tagName - } +/** + * Get the text content of a node. + * Prefer the node’s plain-text fields, otherwise serialize its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} node + * @param {Options} [options] + * @returns {string} + */ +function toString(node, options) { + var {includeImageAlt = true} = options || {}; + return one(node, includeImageAlt) +} - return nok(code) - } +/** + * @param {unknown} node + * @param {boolean} includeImageAlt + * @returns {string} + */ +function one(node, includeImageAlt) { + return ( + (node && + typeof node === 'object' && + // @ts-ignore looks like a literal. + (node.value || + // @ts-ignore looks like an image. + (includeImageAlt ? node.alt : '') || + // @ts-ignore looks like a parent. + ('children' in node && all(node.children, includeImageAlt)) || + (Array.isArray(node) && all(node, includeImageAlt)))) || + '' + ) +} - function declarationStart(code) { - if (code === 45) { - effects.consume(code); - kind = 2; - return commentOpenInside - } +/** + * @param {Array.} values + * @param {boolean} includeImageAlt + * @returns {string} + */ +function all(values, includeImageAlt) { + /** @type {Array.} */ + var result = []; + var index = -1; - if (code === 91) { - effects.consume(code); - kind = 5; - buffer = 'CDATA['; - index = 0; - return cdataOpenInside - } + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt); + } - if (asciiAlpha$2(code)) { - effects.consume(code); - kind = 4; - return self.interrupt ? ok : continuationDeclarationInside - } + return result.join('') +} - return nok(code) - } +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * @param {T[]} list + * @param {number} start + * @param {number} remove + * @param {T[]} items + * @returns {void} + */ +function splice(list, start, remove, items) { + const end = list.length; + let chunkStart = 0; + /** @type {unknown[]} */ - function commentOpenInside(code) { - if (code === 45) { - effects.consume(code); - return self.interrupt ? ok : continuationDeclarationInside - } + let parameters; // Make start between zero and `end` (included). - return nok(code) + if (start < 0) { + start = -start > end ? 0 : end + start; + } else { + start = start > end ? end : start; } - function cdataOpenInside(code) { - if (code === buffer.charCodeAt(index++)) { - effects.consume(code); - return index === buffer.length - ? self.interrupt - ? ok - : continuation - : cdataOpenInside - } + remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items. - return nok(code) - } + if (items.length < 10000) { + parameters = Array.from(items); + parameters.unshift(start, remove) // @ts-expect-error Hush, it’s fine. + ;[].splice.apply(list, parameters); + } else { + // Delete `remove` items starting from `start` + if (remove) [].splice.apply(list, [start, remove]); // Insert the items in chunks to not cause stack overflows. - function tagCloseStart(code) { - if (asciiAlpha$2(code)) { - effects.consume(code); - buffer = fromCharCode(code); - return tagName + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000); + parameters.unshift(start, 0) // @ts-expect-error Hush, it’s fine. + ;[].splice.apply(list, parameters); + chunkStart += 10000; + start += 10000; } + } +} +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * @param {T[]} list + * @param {T[]} items + * @returns {T[]} + */ - return nok(code) +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items); + return list } - function tagName(code) { - if ( - code === null || - code === 47 || - code === 62 || - markdownLineEndingOrSpace$3(code) - ) { - if ( - code !== 47 && - startTag && - htmlRawNames.indexOf(buffer.toLowerCase()) > -1 - ) { - kind = 1; - return self.interrupt ? ok(code) : continuation(code) - } + return items +} - if (htmlBlockNames.indexOf(buffer.toLowerCase()) > -1) { - kind = 6; +/** + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + */ - if (code === 47) { - effects.consume(code); - return basicSelfClosing - } +const hasOwnProperty = {}.hasOwnProperty; - return self.interrupt ? ok(code) : continuation(code) - } +/** + * Combine several syntax extensions into one. + * + * @param {Extension[]} extensions List of syntax extensions. + * @returns {NormalizedExtension} A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {}; + let index = -1; - kind = 7; // Do not support complete HTML when interrupting. + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]); + } - return self.interrupt - ? nok(code) - : startTag - ? completeAttributeNameBefore(code) - : completeClosingTagAfter(code) - } + return all +} - if (code === 45 || asciiAlphanumeric$2(code)) { - effects.consume(code); - buffer += fromCharCode(code); - return tagName - } +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all Extension to merge into. + * @param {Extension} extension Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {string} */ + let hook; - return nok(code) - } + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined; + const left = maybe || (all[hook] = {}); + const right = extension[hook]; + /** @type {string} */ + let code; - function basicSelfClosing(code) { - if (code === 62) { - effects.consume(code); - return self.interrupt ? ok : continuation + for (code in right) { + if (!hasOwnProperty.call(left, code)) left[code] = []; + const value = right[code]; + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ); } - - return nok(code) } +} - function completeClosingTagAfter(code) { - if (markdownSpace$4(code)) { - effects.consume(code); - return completeClosingTagAfter - } +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {unknown[]} existing + * @param {unknown[]} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1; + /** @type {unknown[]} */ + const before = []; - return completeEnd(code) + while (++index < list.length) { +(list[index].add === 'after' ? existing : before).push(list[index]); } - function completeAttributeNameBefore(code) { - if (code === 47) { - effects.consume(code); - return completeEnd - } - - if (code === 58 || code === 95 || asciiAlpha$2(code)) { - effects.consume(code); - return completeAttributeName - } + splice(existing, 0, 0, before); +} - if (markdownSpace$4(code)) { - effects.consume(code); - return completeAttributeNameBefore - } +/** + * Combine several HTML extensions into one. + * + * @param {HtmlExtension[]} htmlExtensions List of HTML extensions. + * @returns {HtmlExtension} A single combined extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {}; + let index = -1; - return completeEnd(code) + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]); } - function completeAttributeName(code) { - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric$2(code) - ) { - effects.consume(code); - return completeAttributeName - } + return handlers +} - return completeAttributeNameAfter(code) - } +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all Extension to merge into. + * @param {HtmlExtension} extension Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {string} */ + let hook; - function completeAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code); - return completeAttributeValueBefore - } + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined; + const left = maybe || (all[hook] = {}); + const right = extension[hook]; + /** @type {string} */ + let type; - if (markdownSpace$4(code)) { - effects.consume(code); - return completeAttributeNameAfter + if (right) { + for (type in right) { + left[type] = right[type]; + } } - - return completeAttributeNameBefore(code) } +} - function completeAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) - } +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. +const unicodePunctuationRegex = + /[!-/:-@[-`{-~\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; - if (code === 34 || code === 39) { - effects.consume(code); - marker = code; - return completeAttributeValueQuoted - } +/** + * @typedef {import('micromark-util-types').Code} Code + */ +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + */ - if (markdownSpace$4(code)) { - effects.consume(code); - return completeAttributeValueBefore - } +const asciiAlpha = regexCheck(/[A-Za-z]/); +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + */ - marker = undefined; - return completeAttributeValueUnquoted(code) - } +const asciiDigit = regexCheck(/\d/); +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + */ - function completeAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code); - return completeAttributeValueQuotedAfter - } +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/); +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + */ - if (code === null || markdownLineEnding$4(code)) { - return nok(code) - } +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + */ - effects.consume(code); - return completeAttributeValueQuoted - } +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + */ - function completeAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 62 || - code === 96 || - markdownLineEndingOrSpace$3(code) - ) { - return completeAttributeNameAfter(code) - } +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * @returns {code is number} + */ - effects.consume(code); - return completeAttributeValueUnquoted - } +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * @returns {code is number} + */ - function completeAttributeValueQuotedAfter(code) { - if (code === 47 || code === 62 || markdownSpace$4(code)) { - return completeAttributeNameBefore(code) - } +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * @returns {code is number} + */ - return nok(code) - } +function markdownLineEnding(code) { + return code !== null && code < -2 +} +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * @returns {code is number} + */ - function completeEnd(code) { - if (code === 62) { - effects.consume(code); - return completeAfter - } +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + */ - return nok(code) - } +const unicodeWhitespace = regexCheck(/\s/); +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + */ +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. - function completeAfter(code) { - if (markdownSpace$4(code)) { - effects.consume(code); - return completeAfter - } +const unicodePunctuation = regexCheck(unicodePunctuationRegex); +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => code is number} + */ - return code === null || markdownLineEnding$4(code) - ? continuation(code) - : nok(code) +function regexCheck(regex) { + return check + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code Character code + * @returns {code is number} Whether the character code matches the bound regex + */ + + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) } +} - function continuation(code) { - if (code === 45 && kind === 2) { - effects.consume(code); - return continuationCommentInside - } +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ +/** + * @param {Effects} effects + * @param {State} ok + * @param {string} type + * @param {number} [max=Infinity] + * @returns {State} + */ - if (code === 60 && kind === 1) { - effects.consume(code); - return continuationRawTagOpen - } +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY; + let size = 0; + return start + /** @type {State} */ - if (code === 62 && kind === 4) { - effects.consume(code); - return continuationClose + function start(code) { + if (markdownSpace(code)) { + effects.enter(type); + return prefix(code) } - if (code === 63 && kind === 3) { - effects.consume(code); - return continuationDeclarationInside - } + return ok(code) + } + /** @type {State} */ - if (code === 93 && kind === 5) { + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { effects.consume(code); - return continuationCharacterDataInside - } - - if (markdownLineEnding$4(code) && (kind === 6 || kind === 7)) { - return effects.check( - nextBlankConstruct, - continuationClose, - continuationAtLineEnding - )(code) - } - - if (code === null || markdownLineEnding$4(code)) { - return continuationAtLineEnding(code) + return prefix } - effects.consume(code); - return continuation + effects.exit(type); + return ok(code) } +} - function continuationAtLineEnding(code) { - effects.exit('htmlFlowData'); - return htmlContinueStart(code) - } +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + */ - function htmlContinueStart(code) { - if (code === null) { - return done(code) - } +/** @type {InitialConstruct} */ +const content$1 = { + tokenize: initializeContent +}; +/** @type {Initializer} */ - if (markdownLineEnding$4(code)) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return htmlContinueStart - } +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ); + /** @type {Token} */ - effects.enter('htmlFlowData'); - return continuation(code) - } + let previous; + return contentStart + /** @type {State} */ - function continuationCommentInside(code) { - if (code === 45) { + function afterContentStartConstruct(code) { + if (code === null) { effects.consume(code); - return continuationDeclarationInside + return } - return continuation(code) + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace(effects, contentStart, 'linePrefix') } + /** @type {State} */ - function continuationRawTagOpen(code) { - if (code === 47) { - effects.consume(code); - buffer = ''; - return continuationRawEndTag - } - - return continuation(code) + function paragraphInitial(code) { + effects.enter('paragraph'); + return lineStart(code) } + /** @type {State} */ - function continuationRawEndTag(code) { - if (code === 62 && htmlRawNames.indexOf(buffer.toLowerCase()) > -1) { - effects.consume(code); - return continuationClose - } + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }); - if (asciiAlpha$2(code) && buffer.length < 8) { - effects.consume(code); - buffer += fromCharCode(code); - return continuationRawEndTag + if (previous) { + previous.next = token; } - return continuation(code) + previous = token; + return data(code) } + /** @type {State} */ - function continuationCharacterDataInside(code) { - if (code === 93) { + function data(code) { + if (code === null) { + effects.exit('chunkText'); + effects.exit('paragraph'); effects.consume(code); - return continuationDeclarationInside + return } - return continuation(code) - } - - function continuationDeclarationInside(code) { - if (code === 62) { + if (markdownLineEnding(code)) { effects.consume(code); - return continuationClose - } - - return continuation(code) - } - - function continuationClose(code) { - if (code === null || markdownLineEnding$4(code)) { - effects.exit('htmlFlowData'); - return done(code) - } + effects.exit('chunkText'); + return lineStart + } // Data. effects.consume(code); - return continuationClose - } - - function done(code) { - effects.exit('htmlFlow'); - return ok(code) + return data } } -function tokenizeNextBlank(effects, ok, nok) { - return start +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Point} Point + */ +/** @type {InitialConstruct} */ - function start(code) { - effects.exit('htmlFlowData'); - effects.enter('lineEndingBlank'); - effects.consume(code); - effects.exit('lineEndingBlank'); - return effects.attempt(partialBlankLine$1, ok, nok) - } -} +const document$2 = { + tokenize: initializeDocument +}; +/** @type {Construct} */ -var htmlFlow_1 = htmlFlow$1; +const containerConstruct = { + tokenize: tokenizeContainer +}; +/** @type {Initializer} */ -var asciiAlpha$1 = asciiAlpha_1; -var asciiAlphanumeric$1 = asciiAlphanumeric_1; -var markdownLineEnding$3 = markdownLineEnding_1; -var markdownLineEndingOrSpace$2 = markdownLineEndingOrSpace_1; -var markdownSpace$3 = markdownSpace_1; -var factorySpace$5 = factorySpace$i; +function initializeDocument(effects) { + const self = this; + /** @type {StackItem[]} */ -var htmlText$1 = { - name: 'htmlText', - tokenize: tokenizeHtmlText -}; + const stack = []; + let continued = 0; + /** @type {TokenizeContext|undefined} */ -function tokenizeHtmlText(effects, ok, nok) { - var self = this; - var marker; - var buffer; - var index; - var returnState; + let childFlow; + /** @type {Token|undefined} */ + + let childToken; + /** @type {number} */ + + let lineStartOffset; return start + /** @type {State} */ function start(code) { - effects.enter('htmlText'); - effects.enter('htmlTextData'); - effects.consume(code); - return open + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued]; + self.containerState = item[1]; + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } // Done. + + return checkNewContainers(code) } + /** @type {State} */ - function open(code) { - if (code === 33) { - effects.consume(code); - return declarationOpen - } + function documentContinue(code) { + if (self.containerState._closeFlow) closeFlow(); + continued++; + return start(code) + } + /** @type {State} */ - if (code === 47) { - effects.consume(code); - return tagCloseStart - } + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. - if (code === 63) { - effects.consume(code); - return instruction - } + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. - if (asciiAlpha$1(code)) { - effects.consume(code); - return tagOpen - } + self.interrupt = Boolean(childFlow.currentConstruct); + } // Check if there is a new container. - return nok(code) + self.containerState = {}; + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) } + /** @type {State} */ - function declarationOpen(code) { - if (code === 45) { - effects.consume(code); - return commentOpen - } + function thereIsANewContainer(code) { + if (childFlow) closeFlow(); + exitContainers(continued); + return documentContinued(code) + } + /** @type {State} */ - if (code === 91) { - effects.consume(code); - buffer = 'CDATA['; - index = 0; - return cdataOpen - } + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length; + lineStartOffset = self.now().offset; + return flowStart(code) + } + /** @type {State} */ - if (asciiAlpha$1(code)) { - effects.consume(code); - return declaration - } + function documentContinued(code) { + // Try new containers. + self.containerState = {}; + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + /** @type {State} */ - return nok(code) + function containerContinue(code) { + continued++; + stack.push([self.currentConstruct, self.containerState]); // Try another. + + return documentContinued(code) } + /** @type {State} */ - function commentOpen(code) { - if (code === 45) { + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow(); + exitContainers(0); effects.consume(code); - return commentStart + return } - return nok(code) + childFlow = childFlow || self.parser.flow(self.now()); + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }); + return flowContinue(code) } + /** @type {State} */ - function commentStart(code) { - if (code === null || code === 62) { - return nok(code) - } - - if (code === 45) { + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true); + exitContainers(0); effects.consume(code); - return commentStartDash + return } - return comment(code) - } + if (markdownLineEnding(code)) { + effects.consume(code); + writeToChild(effects.exit('chunkFlow')); // Get ready for the next line. - function commentStartDash(code) { - if (code === null || code === 62) { - return nok(code) + continued = 0; + self.interrupt = undefined; + return start } - return comment(code) + effects.consume(code); + return flowContinue } + /** + * @param {Token} token + * @param {boolean} [eof] + * @returns {void} + */ - function comment(code) { - if (code === null) { - return nok(code) - } + function writeToChild(token, eof) { + const stream = self.sliceStream(token); + if (eof) stream.push(null); + token.previous = childToken; + if (childToken) childToken.next = token; + childToken = token; + childFlow.defineSkip(token.start); + childFlow.write(stream); // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. - if (code === 45) { - effects.consume(code); - return commentClose - } + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length; - if (markdownLineEnding$3(code)) { - returnState = comment; - return atLineEnding(code) - } + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + (!childFlow.events[index][1].end || // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } - effects.consume(code); - return comment - } + const indexBeforeExits = self.events.length; + let indexBeforeFlow = indexBeforeExits; + /** @type {boolean|undefined} */ - function commentClose(code) { - if (code === 45) { - effects.consume(code); - return end - } + let seen; + /** @type {Point|undefined} */ - return comment(code) - } + let point; // Find the previous chunk (the one before the lazy line). - function cdataOpen(code) { - if (code === buffer.charCodeAt(index++)) { - effects.consume(code); - return index === buffer.length ? cdata : cdataOpen - } + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end; + break + } - return nok(code) - } + seen = true; + } + } - function cdata(code) { - if (code === null) { - return nok(code) - } + exitContainers(continued); // Fix positions. - if (code === 93) { - effects.consume(code); - return cdataClose - } + index = indexBeforeExits; - if (markdownLineEnding$3(code)) { - returnState = cdata; - return atLineEnding(code) - } + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point); + index++; + } // Inject the exits earlier (they’re still also at the end). - effects.consume(code); - return cdata - } + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ); // Discard the duplicate exits. - function cdataClose(code) { - if (code === 93) { - effects.consume(code); - return cdataEnd + self.events.length = index; } - - return cdata(code) } + /** + * @param {number} size + * @returns {void} + */ - function cdataEnd(code) { - if (code === 62) { - return end(code) - } + function exitContainers(size) { + let index = stack.length; // Exit open containers. - if (code === 93) { - effects.consume(code); - return cdataEnd + while (index-- > size) { + const entry = stack[index]; + self.containerState = entry[1]; + entry[0].exit.call(self, effects); } - return cdata(code) + stack.length = size; } - function declaration(code) { - if (code === null || code === 62) { - return end(code) - } + function closeFlow() { + childFlow.write([null]); + childToken = undefined; + childFlow = undefined; + self.containerState._closeFlow = undefined; + } +} +/** @type {Tokenizer} */ - if (markdownLineEnding$3(code)) { - returnState = declaration; - return atLineEnding(code) - } +function tokenizeContainer(effects, ok, nok) { + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} - effects.consume(code); - return declaration +/** + * @typedef {import('micromark-util-types').Code} Code + */ + +/** + * Classify whether a character code represents whitespace, punctuation, or + * something else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * Note that eof (`null`) is seen as whitespace. + * + * @param {Code} code + * @returns {number|undefined} + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 } - function instruction(code) { - if (code === null) { - return nok(code) - } + if (unicodePunctuation(code)) { + return 2 + } +} - if (code === 63) { - effects.consume(code); - return instructionClose - } +/** + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + */ - if (markdownLineEnding$3(code)) { - returnState = instruction; - return atLineEnding(code) - } +/** + * Call all `resolveAll`s. + * + * @param {{resolveAll?: Resolver}[]} constructs + * @param {Event[]} events + * @param {TokenizeContext} context + * @returns {Event[]} + */ +function resolveAll(constructs, events, context) { + /** @type {Resolver[]} */ + const called = []; + let index = -1; - effects.consume(code); - return instruction - } + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll; - function instructionClose(code) { - return code === 62 ? end(code) : instruction(code) + if (resolve && !called.includes(resolve)) { + events = resolve(events, context); + called.push(resolve); + } } - function tagCloseStart(code) { - if (asciiAlpha$1(code)) { - effects.consume(code); - return tagClose - } + return events +} - return nok(code) - } +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Point} Point + */ - function tagClose(code) { - if (code === 45 || asciiAlphanumeric$1(code)) { - effects.consume(code); - return tagClose - } +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +}; +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ - return tagCloseBetween(code) - } +function resolveAllAttention(events, context) { + let index = -1; + /** @type {number} */ - function tagCloseBetween(code) { - if (markdownLineEnding$3(code)) { - returnState = tagCloseBetween; - return atLineEnding(code) - } + let open; + /** @type {Token} */ - if (markdownSpace$3(code)) { - effects.consume(code); - return tagCloseBetween - } + let group; + /** @type {Token} */ - return end(code) - } + let text; + /** @type {Token} */ - function tagOpen(code) { - if (code === 45 || asciiAlphanumeric$1(code)) { - effects.consume(code); - return tagOpen + let openingSequence; + /** @type {Token} */ + + let closingSequence; + /** @type {number} */ + + let use; + /** @type {Event[]} */ + + let nextEvents; + /** @type {number} */ + + let offset; // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index; // Now walk back to find an opener. + + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } // Number of markers to use from the sequence. + + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1; + const start = Object.assign({}, events[open][1].end); + const end = Object.assign({}, events[index][1].start); + movePoint(start, -use); + movePoint(end, use); + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + }; + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + }; + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + }; + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + }; + events[open][1].end = Object.assign({}, openingSequence.start); + events[index][1].start = Object.assign({}, closingSequence.end); + nextEvents = []; // If there are more markers in the opening, add them before. + + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]); + } // Opening. + + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]); // Between. + + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ); // Closing. + + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]); // If there are more markers in the closing, add them after. + + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2; + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]); + } else { + offset = 0; + } + + splice(events, open - 1, index - open + 3, nextEvents); + index = open + nextEvents.length - offset - 2; + break + } + } } + } // Remove remaining sequences. - if (code === 47 || code === 62 || markdownLineEndingOrSpace$2(code)) { - return tagOpenBetween(code) + index = -1; + + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data'; } + } - return nok(code) + return events +} +/** @type {Tokenizer} */ + +function tokenizeAttention(effects, ok) { + const before = classifyCharacter(this.previous); + /** @type {NonNullable} */ + + let marker; + return start + /** @type {State} */ + + function start(code) { + effects.enter('attentionSequence'); + marker = code; + return sequence(code) } + /** @type {State} */ - function tagOpenBetween(code) { - if (code === 47) { + function sequence(code) { + if (code === marker) { effects.consume(code); - return end + return sequence } - if (code === 58 || code === 95 || asciiAlpha$1(code)) { - effects.consume(code); - return tagOpenAttributeName - } + const token = effects.exit('attentionSequence'); + const after = classifyCharacter(code); + const open = !after || (after === 2 && before); + const close = !before || (before === 2 && after); + token._open = Boolean(marker === 42 ? open : open && (before || !close)); + token._close = Boolean(marker === 42 ? close : close && (after || !open)); + return ok(code) + } +} +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ - if (markdownLineEnding$3(code)) { - returnState = tagOpenBetween; - return atLineEnding(code) - } +function movePoint(point, offset) { + point.column += offset; + point.offset += offset; + point._bufferIndex += offset; +} - if (markdownSpace$3(code)) { - effects.consume(code); - return tagOpenBetween - } +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + */ - return end(code) +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +}; +/** @type {Tokenizer} */ + +function tokenizeAutolink(effects, ok, nok) { + let size = 1; + return start + /** @type {State} */ + + function start(code) { + effects.enter('autolink'); + effects.enter('autolinkMarker'); + effects.consume(code); + effects.exit('autolinkMarker'); + effects.enter('autolinkProtocol'); + return open } + /** @type {State} */ - function tagOpenAttributeName(code) { - if ( - code === 45 || - code === 46 || - code === 58 || - code === 95 || - asciiAlphanumeric$1(code) - ) { + function open(code) { + if (asciiAlpha(code)) { effects.consume(code); - return tagOpenAttributeName + return schemeOrEmailAtext } - return tagOpenAttributeNameAfter(code) + return asciiAtext(code) ? emailAtext(code) : nok(code) } + /** @type {State} */ - function tagOpenAttributeNameAfter(code) { - if (code === 61) { - effects.consume(code); - return tagOpenAttributeValueBefore - } + function schemeOrEmailAtext(code) { + return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code) + ? schemeInsideOrEmailAtext(code) + : emailAtext(code) + } + /** @type {State} */ - if (markdownLineEnding$3(code)) { - returnState = tagOpenAttributeNameAfter; - return atLineEnding(code) + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code); + return urlInside } - if (markdownSpace$3(code)) { + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { effects.consume(code); - return tagOpenAttributeNameAfter + return schemeInsideOrEmailAtext } - return tagOpenBetween(code) + return emailAtext(code) } + /** @type {State} */ - function tagOpenAttributeValueBefore(code) { - if ( - code === null || - code === 60 || - code === 61 || - code === 62 || - code === 96 - ) { - return nok(code) + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol'); + return end(code) } - if (code === 34 || code === 39) { - effects.consume(code); - marker = code; - return tagOpenAttributeValueQuoted + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) } - if (markdownLineEnding$3(code)) { - returnState = tagOpenAttributeValueBefore; - return atLineEnding(code) + effects.consume(code); + return urlInside + } + /** @type {State} */ + + function emailAtext(code) { + if (code === 64) { + effects.consume(code); + size = 0; + return emailAtSignOrDot } - if (markdownSpace$3(code)) { + if (asciiAtext(code)) { effects.consume(code); - return tagOpenAttributeValueBefore + return emailAtext } - effects.consume(code); - marker = undefined; - return tagOpenAttributeValueUnquoted + return nok(code) } + /** @type {State} */ - function tagOpenAttributeValueQuoted(code) { - if (code === marker) { - effects.consume(code); - return tagOpenAttributeValueQuotedAfter - } + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + /** @type {State} */ - if (code === null) { - return nok(code) + function emailLabel(code) { + if (code === 46) { + effects.consume(code); + size = 0; + return emailAtSignOrDot } - if (markdownLineEnding$3(code)) { - returnState = tagOpenAttributeValueQuoted; - return atLineEnding(code) + if (code === 62) { + // Exit, then change the type. + effects.exit('autolinkProtocol').type = 'autolinkEmail'; + return end(code) } - effects.consume(code); - return tagOpenAttributeValueQuoted + return emailValue(code) } + /** @type {State} */ - function tagOpenAttributeValueQuotedAfter(code) { - if (code === 62 || code === 47 || markdownLineEndingOrSpace$2(code)) { - return tagOpenBetween(code) + function emailValue(code) { + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + effects.consume(code); + return code === 45 ? emailValue : emailLabel } return nok(code) } - - function tagOpenAttributeValueUnquoted(code) { - if ( - code === null || - code === 34 || - code === 39 || - code === 60 || - code === 61 || - code === 96 - ) { - return nok(code) - } - - if (code === 62 || markdownLineEndingOrSpace$2(code)) { - return tagOpenBetween(code) - } - - effects.consume(code); - return tagOpenAttributeValueUnquoted - } // We can’t have blank lines in content, so no need to worry about empty - // tokens. - - function atLineEnding(code) { - effects.exit('htmlTextData'); - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$5( - effects, - afterPrefix, - 'linePrefix', - self.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 - ) - } - - function afterPrefix(code) { - effects.enter('htmlTextData'); - return returnState(code) - } + /** @type {State} */ function end(code) { - if (code === 62) { - effects.consume(code); - effects.exit('htmlTextData'); - effects.exit('htmlText'); - return ok - } - - return nok(code) + effects.enter('autolinkMarker'); + effects.consume(code); + effects.exit('autolinkMarker'); + effects.exit('autolink'); + return ok } } -var htmlText_1 = htmlText$1; - -var markdownLineEndingOrSpace$1 = markdownLineEndingOrSpace_1; -var chunkedPush = chunkedPush_1; -var chunkedSplice = chunkedSplice_1; -var normalizeIdentifier$2 = normalizeIdentifier_1; -var resolveAll$1 = resolveAll_1; -var shallow$1 = shallow_1; -var factoryDestination = factoryDestination$2; -var factoryLabel = factoryLabel$2; -var factoryTitle = factoryTitle$2; -var factoryWhitespace = factoryWhitespace$2; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + */ -var labelEnd$3 = { - name: 'labelEnd', - tokenize: tokenizeLabelEnd, - resolveTo: resolveToLabelEnd, - resolveAll: resolveAllLabelEnd -}; -var resourceConstruct = { - tokenize: tokenizeResource -}; -var fullReferenceConstruct = { - tokenize: tokenizeFullReference -}; -var collapsedReferenceConstruct = { - tokenize: tokenizeCollapsedReference +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true }; +/** @type {Tokenizer} */ -function resolveAllLabelEnd(events) { - var index = -1; - var token; - - while (++index < events.length) { - token = events[index][1]; - - if ( - !token._used && - (token.type === 'labelImage' || - token.type === 'labelLink' || - token.type === 'labelEnd') - ) { - // Remove the marker. - events.splice(index + 1, token.type === 'labelImage' ? 4 : 2); - token.type = 'data'; - index++; - } - } - - return events -} - -function resolveToLabelEnd(events, context) { - var index = events.length; - var offset = 0; - var group; - var label; - var text; - var token; - var open; - var close; - var media; // Find an opening. - - while (index--) { - token = events[index][1]; - - if (open) { - // If we see another link, or inactive link label, we’ve been here before. - if ( - token.type === 'link' || - (token.type === 'labelLink' && token._inactive) - ) { - break - } // Mark other link openings as inactive, as we can’t have links in - // links. - - if (events[index][0] === 'enter' && token.type === 'labelLink') { - token._inactive = true; - } - } else if (close) { - if ( - events[index][0] === 'enter' && - (token.type === 'labelImage' || token.type === 'labelLink') && - !token._balanced - ) { - open = index; +function tokenizeBlankLine(effects, ok, nok) { + return factorySpace(effects, afterWhitespace, 'linePrefix') + /** @type {State} */ - if (token.type !== 'labelLink') { - offset = 2; - break - } - } - } else if (token.type === 'labelEnd') { - close = index; - } + function afterWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) } - - group = { - type: events[open][1].type === 'labelLink' ? 'link' : 'image', - start: shallow$1(events[open][1].start), - end: shallow$1(events[events.length - 1][1].end) - }; - label = { - type: 'label', - start: shallow$1(events[open][1].start), - end: shallow$1(events[close][1].end) - }; - text = { - type: 'labelText', - start: shallow$1(events[open + offset + 2][1].end), - end: shallow$1(events[close - 2][1].start) - }; - media = [ - ['enter', group, context], - ['enter', label, context] - ]; // Opening marker. - - media = chunkedPush(media, events.slice(open + 1, open + offset + 3)); // Text open. - - media = chunkedPush(media, [['enter', text, context]]); // Between. - - media = chunkedPush( - media, - resolveAll$1( - context.parser.constructs.insideSpan.null, - events.slice(open + offset + 4, close - 3), - context - ) - ); // Text close, marker close, label close. - - media = chunkedPush(media, [ - ['exit', text, context], - events[close - 2], - events[close - 1], - ['exit', label, context] - ]); // Reference, resource, or so. - - media = chunkedPush(media, events.slice(close + 1)); // Media close. - - media = chunkedPush(media, [['exit', group, context]]); - chunkedSplice(events, open, events.length, media); - return events } -function tokenizeLabelEnd(effects, ok, nok) { - var self = this; - var index = self.events.length; - var labelStart; - var defined; // Find an opening. - - while (index--) { - if ( - (self.events[index][1].type === 'labelImage' || - self.events[index][1].type === 'labelLink') && - !self.events[index][1]._balanced - ) { - labelStart = self.events[index][1]; - break - } - } - - return start - - function start(code) { - if (!labelStart) { - return nok(code) - } // It’s a balanced bracket, but contains a link. - - if (labelStart._inactive) return balanced(code) - defined = - self.parser.defined.indexOf( - normalizeIdentifier$2( - self.sliceSerialize({ - start: labelStart.end, - end: self.now() - }) - ) - ) > -1; - effects.enter('labelEnd'); - effects.enter('labelMarker'); - effects.consume(code); - effects.exit('labelMarker'); - effects.exit('labelEnd'); - return afterLabelEnd - } - - function afterLabelEnd(code) { - // Resource: `[asd](fgh)`. - if (code === 40) { - return effects.attempt( - resourceConstruct, - ok, - defined ? ok : balanced - )(code) - } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference? - - if (code === 91) { - return effects.attempt( - fullReferenceConstruct, - ok, - defined - ? effects.attempt(collapsedReferenceConstruct, ok, balanced) - : balanced - )(code) - } // Shortcut reference: `[asd]`? - - return defined ? ok(code) : balanced(code) - } +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + */ - function balanced(code) { - labelStart._balanced = true; - return nok(code) - } -} +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit: exit$1 +}; +/** @type {Tokenizer} */ -function tokenizeResource(effects, ok, nok) { +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this; return start + /** @type {State} */ function start(code) { - effects.enter('resource'); - effects.enter('resourceMarker'); - effects.consume(code); - effects.exit('resourceMarker'); - return factoryWhitespace(effects, open) - } - - function open(code) { - if (code === 41) { - return end(code) - } - - return factoryDestination( - effects, - destinationAfter, - nok, - 'resourceDestination', - 'resourceDestinationLiteral', - 'resourceDestinationLiteralMarker', - 'resourceDestinationRaw', - 'resourceDestinationString', - 3 - )(code) - } + if (code === 62) { + const state = self.containerState; - function destinationAfter(code) { - return markdownLineEndingOrSpace$1(code) - ? factoryWhitespace(effects, between)(code) - : end(code) - } + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }); + state.open = true; + } - function between(code) { - if (code === 34 || code === 39 || code === 40) { - return factoryTitle( - effects, - factoryWhitespace(effects, end), - nok, - 'resourceTitle', - 'resourceTitleMarker', - 'resourceTitleString' - )(code) + effects.enter('blockQuotePrefix'); + effects.enter('blockQuoteMarker'); + effects.consume(code); + effects.exit('blockQuoteMarker'); + return after } - return end(code) + return nok(code) } + /** @type {State} */ - function end(code) { - if (code === 41) { - effects.enter('resourceMarker'); + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace'); effects.consume(code); - effects.exit('resourceMarker'); - effects.exit('resource'); + effects.exit('blockQuotePrefixWhitespace'); + effects.exit('blockQuotePrefix'); return ok } - return nok(code) + effects.exit('blockQuotePrefix'); + return ok(code) } } +/** @type {Tokenizer} */ -function tokenizeFullReference(effects, ok, nok) { - var self = this; - return start - - function start(code) { - return factoryLabel.call( - self, - effects, - afterLabel, - nok, - 'reference', - 'referenceMarker', - 'referenceString' - )(code) - } +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + return factorySpace( + effects, + effects.attempt(blockQuote, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} +/** @type {Exiter} */ - function afterLabel(code) { - return self.parser.defined.indexOf( - normalizeIdentifier$2( - self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) - ) - ) < 0 - ? nok(code) - : ok(code) - } +function exit$1(effects) { + effects.exit('blockQuote'); } -function tokenizeCollapsedReference(effects, ok, nok) { +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + */ + +/** @type {Construct} */ +const characterEscape$1 = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +}; +/** @type {Tokenizer} */ + +function tokenizeCharacterEscape(effects, ok, nok) { return start + /** @type {State} */ function start(code) { - effects.enter('reference'); - effects.enter('referenceMarker'); + effects.enter('characterEscape'); + effects.enter('escapeMarker'); effects.consume(code); - effects.exit('referenceMarker'); + effects.exit('escapeMarker'); return open } + /** @type {State} */ function open(code) { - if (code === 93) { - effects.enter('referenceMarker'); + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue'); effects.consume(code); - effects.exit('referenceMarker'); - effects.exit('reference'); + effects.exit('characterEscapeValue'); + effects.exit('characterEscape'); return ok } @@ -37460,17099 +35213,13046 @@ function tokenizeCollapsedReference(effects, ok, nok) { } } -var labelEnd_1 = labelEnd$3; +var characterEntities = { + AEli: 'Æ', + AElig: 'Æ', + AM: '&', + AMP: '&', + Aacut: 'Á', + Aacute: 'Á', + Abreve: 'Ă', + Acir: 'Â', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrav: 'À', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Arin: 'Å', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atild: 'Ã', + Atilde: 'Ã', + Aum: 'Ä', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COP: '©', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedi: 'Ç', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ET: 'Ð', + ETH: 'Ð', + Eacut: 'É', + Eacute: 'É', + Ecaron: 'Ě', + Ecir: 'Ê', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrav: 'È', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Eum: 'Ë', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + G: '>', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacut: 'Í', + Iacute: 'Í', + Icir: 'Î', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrav: 'Ì', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Ium: 'Ï', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + L: '<', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntild: 'Ñ', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacut: 'Ó', + Oacute: 'Ó', + Ocir: 'Ô', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograv: 'Ò', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslas: 'Ø', + Oslash: 'Ø', + Otild: 'Õ', + Otilde: 'Õ', + Otimes: '⨷', + Oum: 'Ö', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUO: '"', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + RE: '®', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THOR: 'Þ', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacut: 'Ú', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucir: 'Û', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrav: 'Ù', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uum: 'Ü', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacut: 'Ý', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacut: 'á', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acir: 'â', + acirc: 'â', + acut: '´', + acute: '´', + acy: 'а', + aeli: 'æ', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrav: 'à', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + am: '&', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + arin: 'å', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atild: 'ã', + atilde: 'ã', + aum: 'ä', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvba: '¦', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedi: 'ç', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedi: '¸', + cedil: '¸', + cemptyv: '⦲', + cen: '¢', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + cop: '©', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curre: '¤', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + de: '°', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divid: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacut: 'é', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: 'ê', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrav: 'è', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + et: 'ð', + eth: 'ð', + eum: 'ë', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac1: '¼', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac3: '¾', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + g: '>', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacut: 'í', + iacute: 'í', + ic: '⁣', + icir: 'î', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexc: '¡', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrav: 'ì', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iques: '¿', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + ium: 'ï', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laqu: '«', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + l: '<', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + mac: '¯', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micr: 'µ', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middo: '·', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbs: ' ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + no: '¬', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntild: 'ñ', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacut: 'ó', + oacute: 'ó', + oast: '⊛', + ocir: 'ô', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograv: 'ò', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: 'º', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslas: 'ø', + oslash: 'ø', + osol: '⊘', + otild: 'õ', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + oum: 'ö', + ouml: 'ö', + ovbar: '⌽', + par: '¶', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusm: '±', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + poun: '£', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quo: '"', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raqu: '»', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + re: '®', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sec: '§', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + sh: '­', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup: '⊃', + sup1: '¹', + sup2: '²', + sup3: '³', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szli: 'ß', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thor: 'þ', + thorn: 'þ', + tilde: '˜', + time: '×', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacut: 'ú', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucir: 'û', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrav: 'ù', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + um: '¨', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uum: 'ü', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacut: 'ý', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + ye: '¥', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yum: 'ÿ', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +}; -var labelEnd$2 = labelEnd_1; +var own$5 = {}.hasOwnProperty; -var labelStartImage$1 = { - name: 'labelStartImage', - tokenize: tokenizeLabelStartImage, - resolveAll: labelEnd$2.resolveAll +/** + * @param {string} characters + * @returns {string|false} + */ +function decodeEntity(characters) { + return own$5.call(characterEntities, characters) + ? characterEntities[characters] + : false +} + +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ + +/** @type {Construct} */ +const characterReference$1 = { + name: 'characterReference', + tokenize: tokenizeCharacterReference }; +/** @type {Tokenizer} */ -function tokenizeLabelStartImage(effects, ok, nok) { - var self = this; +function tokenizeCharacterReference(effects, ok, nok) { + const self = this; + let size = 0; + /** @type {number} */ + + let max; + /** @type {(code: Code) => code is number} */ + + let test; return start + /** @type {State} */ function start(code) { - effects.enter('labelImage'); - effects.enter('labelImageMarker'); + effects.enter('characterReference'); + effects.enter('characterReferenceMarker'); effects.consume(code); - effects.exit('labelImageMarker'); + effects.exit('characterReferenceMarker'); return open } + /** @type {State} */ function open(code) { - if (code === 91) { - effects.enter('labelMarker'); + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric'); effects.consume(code); - effects.exit('labelMarker'); - effects.exit('labelImage'); - return after + effects.exit('characterReferenceMarkerNumeric'); + return numeric } - return nok(code) + effects.enter('characterReferenceValue'); + max = 31; + test = asciiAlphanumeric; + return value(code) } + /** @type {State} */ - function after(code) { - /* c8 ignore next */ - return code === 94 && - /* c8 ignore next */ - '_hiddenFootnoteSupport' in self.parser.constructs - ? /* c8 ignore next */ - nok(code) - : ok(code) + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal'); + effects.consume(code); + effects.exit('characterReferenceMarkerHexadecimal'); + effects.enter('characterReferenceValue'); + max = 6; + test = asciiHexDigit; + return value + } + + effects.enter('characterReferenceValue'); + max = 7; + test = asciiDigit; + return value(code) } -} + /** @type {State} */ -var labelStartImage_1 = labelStartImage$1; + function value(code) { + /** @type {Token} */ + let token; -var labelEnd$1 = labelEnd_1; + if (code === 59 && size) { + token = effects.exit('characterReferenceValue'); -var labelStartLink$1 = { - name: 'labelStartLink', - tokenize: tokenizeLabelStartLink, - resolveAll: labelEnd$1.resolveAll -}; + if ( + test === asciiAlphanumeric && + !decodeEntity(self.sliceSerialize(token)) + ) { + return nok(code) + } -function tokenizeLabelStartLink(effects, ok, nok) { - var self = this; - return start + effects.enter('characterReferenceMarker'); + effects.consume(code); + effects.exit('characterReferenceMarker'); + effects.exit('characterReference'); + return ok + } - function start(code) { - effects.enter('labelLink'); - effects.enter('labelMarker'); - effects.consume(code); - effects.exit('labelMarker'); - effects.exit('labelLink'); - return after - } + if (test(code) && size++ < max) { + effects.consume(code); + return value + } - function after(code) { - /* c8 ignore next */ - return code === 94 && - /* c8 ignore next */ - '_hiddenFootnoteSupport' in self.parser.constructs - ? /* c8 ignore next */ - nok(code) - : ok(code) + return nok(code) } } -var labelStartLink_1 = labelStartLink$1; - -var factorySpace$4 = factorySpace$i; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ -var lineEnding$1 = { - name: 'lineEnding', - tokenize: tokenizeLineEnding +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true }; +/** @type {Tokenizer} */ -function tokenizeLineEnding(effects, ok) { - return start - - function start(code) { - effects.enter('lineEnding'); - effects.consume(code); - effects.exit('lineEnding'); - return factorySpace$4(effects, ok, 'linePrefix') - } -} - -var lineEnding_1 = lineEnding$1; - -var markdownLineEnding$2 = markdownLineEnding_1; -var markdownSpace$2 = markdownSpace_1; -var factorySpace$3 = factorySpace$i; +function tokenizeCodeFenced(effects, ok, nok) { + const self = this; + /** @type {Construct} */ -var thematicBreak$3 = { - name: 'thematicBreak', - tokenize: tokenizeThematicBreak -}; + const closingFenceConstruct = { + tokenize: tokenizeClosingFence, + partial: true + }; + /** @type {Construct} */ -function tokenizeThematicBreak(effects, ok, nok) { - var size = 0; - var marker; + const nonLazyLine = { + tokenize: tokenizeNonLazyLine, + partial: true + }; + const tail = this.events[this.events.length - 1]; + const initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0; + let sizeOpen = 0; + /** @type {NonNullable} */ + + let marker; return start + /** @type {State} */ function start(code) { - effects.enter('thematicBreak'); + effects.enter('codeFenced'); + effects.enter('codeFencedFence'); + effects.enter('codeFencedFenceSequence'); marker = code; - return atBreak(code) + return sequenceOpen(code) } + /** @type {State} */ - function atBreak(code) { + function sequenceOpen(code) { if (code === marker) { - effects.enter('thematicBreakSequence'); - return sequence(code) + effects.consume(code); + sizeOpen++; + return sequenceOpen } - if (markdownSpace$2(code)) { - return factorySpace$3(effects, atBreak, 'whitespace')(code) - } + effects.exit('codeFencedFenceSequence'); + return sizeOpen < 3 + ? nok(code) + : factorySpace(effects, infoOpen, 'whitespace')(code) + } + /** @type {State} */ - if (size < 3 || (code !== null && !markdownLineEnding$2(code))) { - return nok(code) + function infoOpen(code) { + if (code === null || markdownLineEnding(code)) { + return openAfter(code) } - effects.exit('thematicBreak'); - return ok(code) - } + effects.enter('codeFencedFenceInfo'); + effects.enter('chunkString', { + contentType: 'string' + }); + return info(code) + } + /** @type {State} */ - function sequence(code) { - if (code === marker) { - effects.consume(code); - size++; - return sequence + function info(code) { + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('chunkString'); + effects.exit('codeFencedFenceInfo'); + return factorySpace(effects, infoAfter, 'whitespace')(code) } - effects.exit('thematicBreakSequence'); - return atBreak(code) + if (code === 96 && code === marker) return nok(code) + effects.consume(code); + return info } -} - -var thematicBreak_1$1 = thematicBreak$3; - -var asciiDigit$1 = asciiDigit_1; -var markdownSpace$1 = markdownSpace_1; -var prefixSize = prefixSize_1; -var sizeChunks = sizeChunks_1; -var factorySpace$2 = factorySpace$i; -var partialBlankLine = partialBlankLine_1; -var thematicBreak$2 = thematicBreak_1$1; - -var list$2 = { - name: 'list', - tokenize: tokenizeListStart, - continuation: { - tokenize: tokenizeListContinuation - }, - exit: tokenizeListEnd -}; -var listItemPrefixWhitespaceConstruct = { - tokenize: tokenizeListItemPrefixWhitespace, - partial: true -}; -var indentConstruct = { - tokenize: tokenizeIndent, - partial: true -}; - -function tokenizeListStart(effects, ok, nok) { - var self = this; - var initialSize = prefixSize(self.events, 'linePrefix'); - var size = 0; - return start - - function start(code) { - var kind = - self.containerState.type || - (code === 42 || code === 43 || code === 45 - ? 'listUnordered' - : 'listOrdered'); - - if ( - kind === 'listUnordered' - ? !self.containerState.marker || code === self.containerState.marker - : asciiDigit$1(code) - ) { - if (!self.containerState.type) { - self.containerState.type = kind; - effects.enter(kind, { - _container: true - }); - } - - if (kind === 'listUnordered') { - effects.enter('listItemPrefix'); - return code === 42 || code === 45 - ? effects.check(thematicBreak$2, nok, atMarker)(code) - : atMarker(code) - } + /** @type {State} */ - if (!self.interrupt || code === 49) { - effects.enter('listItemPrefix'); - effects.enter('listItemValue'); - return inside(code) - } + function infoAfter(code) { + if (code === null || markdownLineEnding(code)) { + return openAfter(code) } - return nok(code) + effects.enter('codeFencedFenceMeta'); + effects.enter('chunkString', { + contentType: 'string' + }); + return meta(code) } + /** @type {State} */ - function inside(code) { - if (asciiDigit$1(code) && ++size < 10) { - effects.consume(code); - return inside - } - - if ( - (!self.interrupt || size < 2) && - (self.containerState.marker - ? code === self.containerState.marker - : code === 41 || code === 46) - ) { - effects.exit('listItemValue'); - return atMarker(code) + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString'); + effects.exit('codeFencedFenceMeta'); + return openAfter(code) } - return nok(code) - } - - function atMarker(code) { - effects.enter('listItemMarker'); + if (code === 96 && code === marker) return nok(code) effects.consume(code); - effects.exit('listItemMarker'); - self.containerState.marker = self.containerState.marker || code; - return effects.check( - partialBlankLine, // Can’t be empty when interrupting. - self.interrupt ? nok : onBlank, - effects.attempt( - listItemPrefixWhitespaceConstruct, - endOfPrefix, - otherPrefix - ) - ) + return meta } + /** @type {State} */ - function onBlank(code) { - self.containerState.initialBlankLine = true; - initialSize++; - return endOfPrefix(code) + function openAfter(code) { + effects.exit('codeFencedFence'); + return self.interrupt ? ok(code) : contentStart(code) } + /** @type {State} */ - function otherPrefix(code) { - if (markdownSpace$1(code)) { - effects.enter('listItemPrefixWhitespace'); - effects.consume(code); - effects.exit('listItemPrefixWhitespace'); - return endOfPrefix + function contentStart(code) { + if (code === null) { + return after(code) } - return nok(code) - } + if (markdownLineEnding(code)) { + return effects.attempt( + nonLazyLine, + effects.attempt( + closingFenceConstruct, + after, + initialPrefix + ? factorySpace( + effects, + contentStart, + 'linePrefix', + initialPrefix + 1 + ) + : contentStart + ), + after + )(code) + } - function endOfPrefix(code) { - self.containerState.size = - initialSize + sizeChunks(self.sliceStream(effects.exit('listItemPrefix'))); - return ok(code) + effects.enter('codeFlowValue'); + return contentContinue(code) } -} + /** @type {State} */ -function tokenizeListContinuation(effects, ok, nok) { - var self = this; - self.containerState._closeFlow = undefined; - return effects.check(partialBlankLine, onBlank, notBlank) + function contentContinue(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue'); + return contentStart(code) + } - function onBlank(code) { - self.containerState.furtherBlankLines = - self.containerState.furtherBlankLines || - self.containerState.initialBlankLine; // We have a blank line. - // Still, try to consume at most the items size. + effects.consume(code); + return contentContinue + } + /** @type {State} */ - return factorySpace$2( - effects, - ok, - 'listItemIndent', - self.containerState.size + 1 - )(code) + function after(code) { + effects.exit('codeFenced'); + return ok(code) } + /** @type {Tokenizer} */ - function notBlank(code) { - if (self.containerState.furtherBlankLines || !markdownSpace$1(code)) { - self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined; - return notInCurrentItem(code) + function tokenizeNonLazyLine(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ + + function start(code) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return lineStart } + /** @type {State} */ - self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined; - return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } } + /** @type {Tokenizer} */ - function notInCurrentItem(code) { - // While we do continue, we signal that the flow should be closed. - self.containerState._closeFlow = true; // As we’re closing flow, we’re no longer interrupting. - - self.interrupt = undefined; - return factorySpace$2( + function tokenizeClosingFence(effects, ok, nok) { + let size = 0; + return factorySpace( effects, - effects.attempt(list$2, ok, nok), + closingSequenceStart, 'linePrefix', - self.parser.constructs.disable.null.indexOf('codeIndented') > -1 + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 - )(code) - } -} + ) + /** @type {State} */ -function tokenizeIndent(effects, ok, nok) { - var self = this; - return factorySpace$2( - effects, - afterPrefix, - 'listItemIndent', - self.containerState.size + 1 - ) + function closingSequenceStart(code) { + effects.enter('codeFencedFence'); + effects.enter('codeFencedFenceSequence'); + return closingSequence(code) + } + /** @type {State} */ - function afterPrefix(code) { - return prefixSize(self.events, 'listItemIndent') === - self.containerState.size - ? ok(code) - : nok(code) - } -} + function closingSequence(code) { + if (code === marker) { + effects.consume(code); + size++; + return closingSequence + } -function tokenizeListEnd(effects) { - effects.exit(this.containerState.type); -} + if (size < sizeOpen) return nok(code) + effects.exit('codeFencedFenceSequence'); + return factorySpace(effects, closingSequenceEnd, 'whitespace')(code) + } + /** @type {State} */ -function tokenizeListItemPrefixWhitespace(effects, ok, nok) { - var self = this; - return factorySpace$2( - effects, - afterPrefix, - 'listItemPrefixWhitespace', - self.parser.constructs.disable.null.indexOf('codeIndented') > -1 - ? undefined - : 4 + 1 - ) + function closingSequenceEnd(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence'); + return ok(code) + } - function afterPrefix(code) { - return markdownSpace$1(code) || - !prefixSize(self.events, 'listItemPrefixWhitespace') - ? nok(code) - : ok(code) + return nok(code) + } } } -var list_1$1 = list$2; - -var markdownLineEnding$1 = markdownLineEnding_1; -var shallow = shallow_1; -var factorySpace$1 = factorySpace$i; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + */ -var setextUnderline$1 = { - name: 'setextUnderline', - tokenize: tokenizeSetextUnderline, - resolveTo: resolveToSetextUnderline +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented }; +/** @type {Construct} */ -function resolveToSetextUnderline(events, context) { - var index = events.length; - var content; - var text; - var definition; - var heading; // Find the opening of the content. - // It’ll always exist: we don’t tokenize if it isn’t there. +const indentedContent = { + tokenize: tokenizeIndentedContent, + partial: true +}; +/** @type {Tokenizer} */ - while (index--) { - if (events[index][0] === 'enter') { - if (events[index][1].type === 'content') { - content = index; - break - } +function tokenizeCodeIndented(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ - if (events[index][1].type === 'paragraph') { - text = index; - } - } // Exit - else { - if (events[index][1].type === 'content') { - // Remove the content end (if needed we’ll add it later) - events.splice(index, 1); - } + function start(code) { + effects.enter('codeIndented'); + return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code) + } + /** @type {State} */ - if (!definition && events[index][1].type === 'definition') { - definition = index; - } - } + function afterStartPrefix(code) { + const tail = self.events[self.events.length - 1]; + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? afterPrefix(code) + : nok(code) } + /** @type {State} */ - heading = { - type: 'setextHeading', - start: shallow(events[text][1].start), - end: shallow(events[events.length - 1][1].end) - }; // Change the paragraph to setext heading text. + function afterPrefix(code) { + if (code === null) { + return after(code) + } - events[text][1].type = 'setextHeadingText'; // If we have definitions in the content, we’ll keep on having content, - // but we need move it. + if (markdownLineEnding(code)) { + return effects.attempt(indentedContent, afterPrefix, after)(code) + } - if (definition) { - events.splice(text, 0, ['enter', heading, context]); - events.splice(definition + 1, 0, ['exit', events[content][1], context]); - events[content][1].end = shallow(events[definition][1].end); - } else { - events[content][1] = heading; - } // Add the heading exit at the end. + effects.enter('codeFlowValue'); + return content(code) + } + /** @type {State} */ - events.push(['exit', heading, context]); - return events -} + function content(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue'); + return afterPrefix(code) + } -function tokenizeSetextUnderline(effects, ok, nok) { - var self = this; - var index = self.events.length; - var marker; - var paragraph; // Find an opening. + effects.consume(code); + return content + } + /** @type {State} */ - while (index--) { - // Skip enter/exit of line ending, line prefix, and content. - // We can now either have a definition or a paragraph. - if ( - self.events[index][1].type !== 'lineEnding' && - self.events[index][1].type !== 'linePrefix' && - self.events[index][1].type !== 'content' - ) { - paragraph = self.events[index][1].type === 'paragraph'; - break - } + function after(code) { + effects.exit('codeIndented'); + return ok(code) } +} +/** @type {Tokenizer} */ +function tokenizeIndentedContent(effects, ok, nok) { + const self = this; return start + /** @type {State} */ function start(code) { - if (!self.lazy && (self.interrupt || paragraph)) { - effects.enter('setextHeadingLine'); - effects.enter('setextHeadingLineSequence'); - marker = code; - return closingSequence(code) + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) } - return nok(code) - } - - function closingSequence(code) { - if (code === marker) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding'); effects.consume(code); - return closingSequence + effects.exit('lineEnding'); + return start } - effects.exit('setextHeadingLineSequence'); - return factorySpace$1(effects, closingSequenceEnd, 'lineSuffix')(code) + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) } + /** @type {State} */ - function closingSequenceEnd(code) { - if (code === null || markdownLineEnding$1(code)) { - effects.exit('setextHeadingLine'); - return ok(code) - } - - return nok(code) + function afterPrefix(code) { + const tail = self.events[self.events.length - 1]; + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? start(code) + : nok(code) } } -var setextUnderline_1 = setextUnderline$1; - -Object.defineProperty(constructs$2, '__esModule', {value: true}); - -var text$1$1 = text$5; -var attention = attention_1; -var autolink = autolink_1; -var blockQuote = blockQuote_1; -var characterEscape$1 = characterEscape_1; -var characterReference$1 = characterReference_1; -var codeFenced = codeFenced_1; -var codeIndented = codeIndented_1; -var codeText = codeText_1; -var definition$1 = definition_1$1; -var hardBreakEscape = hardBreakEscape_1; -var headingAtx = headingAtx_1; -var htmlFlow = htmlFlow_1; -var htmlText = htmlText_1; -var labelEnd = labelEnd_1; -var labelStartImage = labelStartImage_1; -var labelStartLink = labelStartLink_1; -var lineEnding = lineEnding_1; -var list$1 = list_1$1; -var setextUnderline = setextUnderline_1; -var thematicBreak$1 = thematicBreak_1$1; - -var document$2 = { - 42: list$1, - // Asterisk - 43: list$1, - // Plus sign - 45: list$1, - // Dash - 48: list$1, - // 0 - 49: list$1, - // 1 - 50: list$1, - // 2 - 51: list$1, - // 3 - 52: list$1, - // 4 - 53: list$1, - // 5 - 54: list$1, - // 6 - 55: list$1, - // 7 - 56: list$1, - // 8 - 57: list$1, - // 9 - 62: blockQuote // Greater than -}; -var contentInitial = { - 91: definition$1 // Left square bracket -}; -var flowInitial = { - '-2': codeIndented, - // Horizontal tab - '-1': codeIndented, - // Virtual space - 32: codeIndented // Space -}; -var flow$6 = { - 35: headingAtx, - // Number sign - 42: thematicBreak$1, - // Asterisk - 45: [setextUnderline, thematicBreak$1], - // Dash - 60: htmlFlow, - // Less than - 61: setextUnderline, - // Equals to - 95: thematicBreak$1, - // Underscore - 96: codeFenced, - // Grave accent - 126: codeFenced // Tilde -}; -var string = { - 38: characterReference$1, - // Ampersand - 92: characterEscape$1 // Backslash -}; -var text$3 = { - '-5': lineEnding, - // Carriage return - '-4': lineEnding, - // Line feed - '-3': lineEnding, - // Carriage return + line feed - 33: labelStartImage, - // Exclamation mark - 38: characterReference$1, - // Ampersand - 42: attention, - // Asterisk - 60: [autolink, htmlText], - // Less than - 91: labelStartLink, - // Left square bracket - 92: [hardBreakEscape, characterEscape$1], - // Backslash - 93: labelEnd, - // Right square bracket - 95: attention, - // Underscore - 96: codeText // Grave accent -}; -var insideSpan = { - null: [attention, text$1$1.resolver] -}; -var disable = { - null: [] -}; - -constructs$2.contentInitial = contentInitial; -constructs$2.disable = disable; -constructs$2.document = document$2; -constructs$2.flow = flow$6; -constructs$2.flowInitial = flowInitial; -constructs$2.insideSpan = insideSpan; -constructs$2.string = string; -constructs$2.text = text$3; - -var content = content$3; -var document$1 = document$3; -var flow$5 = flow$7; -var text$2 = text$5; -var combineExtensions$1 = combineExtensions_1; -var createTokenizer = createTokenizer_1; -var miniflat = miniflat_1; -var constructs$1 = constructs$2; - -function parse$3(options) { - var settings = options || {}; - var parser = { - defined: [], - constructs: combineExtensions$1( - [constructs$1].concat(miniflat(settings.extensions)) - ), - content: create(content), - document: create(document$1), - flow: create(flow$5), - string: create(text$2.string), - text: create(text$2.text) - }; - return parser - - function create(initializer) { - return creator +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + */ - function creator(from) { - return createTokenizer(parser, initializer, from) - } - } -} +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous: previous$1 +}; +/** @type {Resolver} */ -var parse_1$1 = parse$3; +function resolveCodeText(events) { + let tailExitIndex = events.length - 4; + let headEnterIndex = 3; + /** @type {number} */ -var search = /[\0\t\n\r]/g; + let index; + /** @type {number|undefined} */ -function preprocess() { - var start = true; - var column = 1; - var buffer = ''; - var atCarriageReturn; - return preprocessor + let enter; // If we start and end with an EOL or a space. - function preprocessor(value, encoding, end) { - var chunks = []; - var match; - var next; - var startPosition; - var endPosition; - var code; - value = buffer + value.toString(encoding); - startPosition = 0; - buffer = ''; + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex; // And we have data. - if (start) { - if (value.charCodeAt(0) === 65279) { - startPosition++; + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding'; + events[tailExitIndex][1].type = 'codeTextPadding'; + headEnterIndex += 2; + tailExitIndex -= 2; + break } - - start = undefined; } + } // Merge adjacent spaces and data. - while (startPosition < value.length) { - search.lastIndex = startPosition; - match = search.exec(value); - endPosition = match ? match.index : value.length; - code = value.charCodeAt(endPosition); + index = headEnterIndex - 1; + tailExitIndex++; - if (!match) { - buffer = value.slice(startPosition); - break + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index; } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData'; - if (code === 10 && startPosition === endPosition && atCarriageReturn) { - chunks.push(-3); - atCarriageReturn = undefined; - } else { - if (atCarriageReturn) { - chunks.push(-5); - atCarriageReturn = undefined; - } - - if (startPosition < endPosition) { - chunks.push(value.slice(startPosition, endPosition)); - column += endPosition - startPosition; - } - - if (code === 0) { - chunks.push(65533); - column++; - } else if (code === 9) { - next = Math.ceil(column / 4) * 4; - chunks.push(-2); - - while (column++ < next) chunks.push(-1); - } else if (code === 10) { - chunks.push(-4); - column = 1; - } // Must be carriage return. - else { - atCarriageReturn = true; - column = 1; - } + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end; + events.splice(enter + 2, index - enter - 2); + tailExitIndex -= index - enter - 2; + index = enter + 2; } - startPosition = endPosition + 1; - } - - if (end) { - if (atCarriageReturn) chunks.push(-5); - if (buffer) chunks.push(buffer); - chunks.push(null); + enter = undefined; } - - return chunks - } -} - -var preprocess_1 = preprocess; - -var subtokenize = subtokenize_1; - -function postprocess$1(events) { - while (!subtokenize(events)) { - // Empty } return events } +/** @type {Previous} */ -var postprocess_1 = postprocess$1; - -const AEli$1 = "Æ"; -const AElig$1 = "Æ"; -const AM$1 = "&"; -const AMP$1 = "&"; -const Aacut$1 = "Á"; -const Aacute$1 = "Á"; -const Abreve$1 = "Ă"; -const Acir$1 = "Â"; -const Acirc$1 = "Â"; -const Acy$1 = "А"; -const Afr$1 = "𝔄"; -const Agrav$1 = "À"; -const Agrave$1 = "À"; -const Alpha$1 = "Α"; -const Amacr$1 = "Ā"; -const And$1 = "⩓"; -const Aogon$1 = "Ą"; -const Aopf$1 = "𝔸"; -const ApplyFunction$1 = "⁡"; -const Arin$1 = "Å"; -const Aring$1 = "Å"; -const Ascr$1 = "𝒜"; -const Assign$1 = "≔"; -const Atild$1 = "Ã"; -const Atilde$1 = "Ã"; -const Aum$1 = "Ä"; -const Auml$1 = "Ä"; -const Backslash$1 = "∖"; -const Barv$1 = "⫧"; -const Barwed$1 = "⌆"; -const Bcy$1 = "Б"; -const Because$1 = "∵"; -const Bernoullis$1 = "ℬ"; -const Beta$1 = "Β"; -const Bfr$1 = "𝔅"; -const Bopf$1 = "𝔹"; -const Breve$1 = "˘"; -const Bscr$1 = "ℬ"; -const Bumpeq$1 = "≎"; -const CHcy$1 = "Ч"; -const COP$1 = "©"; -const COPY$1 = "©"; -const Cacute$1 = "Ć"; -const Cap$1 = "⋒"; -const CapitalDifferentialD$1 = "ⅅ"; -const Cayleys$1 = "ℭ"; -const Ccaron$1 = "Č"; -const Ccedi$1 = "Ç"; -const Ccedil$1 = "Ç"; -const Ccirc$1 = "Ĉ"; -const Cconint$1 = "∰"; -const Cdot$1 = "Ċ"; -const Cedilla$1 = "¸"; -const CenterDot$1 = "·"; -const Cfr$1 = "ℭ"; -const Chi$1 = "Χ"; -const CircleDot$1 = "⊙"; -const CircleMinus$1 = "⊖"; -const CirclePlus$1 = "⊕"; -const CircleTimes$1 = "⊗"; -const ClockwiseContourIntegral$1 = "∲"; -const CloseCurlyDoubleQuote$1 = "”"; -const CloseCurlyQuote$1 = "’"; -const Colon$1 = "∷"; -const Colone$1 = "⩴"; -const Congruent$1 = "≡"; -const Conint$1 = "∯"; -const ContourIntegral$1 = "∮"; -const Copf$1 = "ℂ"; -const Coproduct$1 = "∐"; -const CounterClockwiseContourIntegral$1 = "∳"; -const Cross$1 = "⨯"; -const Cscr$1 = "𝒞"; -const Cup$1 = "⋓"; -const CupCap$1 = "≍"; -const DD$1 = "ⅅ"; -const DDotrahd$1 = "⤑"; -const DJcy$1 = "Ђ"; -const DScy$1 = "Ѕ"; -const DZcy$1 = "Џ"; -const Dagger$1 = "‡"; -const Darr$1 = "↡"; -const Dashv$1 = "⫤"; -const Dcaron$1 = "Ď"; -const Dcy$1 = "Д"; -const Del$1 = "∇"; -const Delta$1 = "Δ"; -const Dfr$1 = "𝔇"; -const DiacriticalAcute$1 = "´"; -const DiacriticalDot$1 = "˙"; -const DiacriticalDoubleAcute$1 = "˝"; -const DiacriticalGrave$1 = "`"; -const DiacriticalTilde$1 = "˜"; -const Diamond$1 = "⋄"; -const DifferentialD$1 = "ⅆ"; -const Dopf$1 = "𝔻"; -const Dot$1 = "¨"; -const DotDot$1 = "⃜"; -const DotEqual$1 = "≐"; -const DoubleContourIntegral$1 = "∯"; -const DoubleDot$1 = "¨"; -const DoubleDownArrow$1 = "⇓"; -const DoubleLeftArrow$1 = "⇐"; -const DoubleLeftRightArrow$1 = "⇔"; -const DoubleLeftTee$1 = "⫤"; -const DoubleLongLeftArrow$1 = "⟸"; -const DoubleLongLeftRightArrow$1 = "⟺"; -const DoubleLongRightArrow$1 = "⟹"; -const DoubleRightArrow$1 = "⇒"; -const DoubleRightTee$1 = "⊨"; -const DoubleUpArrow$1 = "⇑"; -const DoubleUpDownArrow$1 = "⇕"; -const DoubleVerticalBar$1 = "∥"; -const DownArrow$1 = "↓"; -const DownArrowBar$1 = "⤓"; -const DownArrowUpArrow$1 = "⇵"; -const DownBreve$1 = "̑"; -const DownLeftRightVector$1 = "⥐"; -const DownLeftTeeVector$1 = "⥞"; -const DownLeftVector$1 = "↽"; -const DownLeftVectorBar$1 = "⥖"; -const DownRightTeeVector$1 = "⥟"; -const DownRightVector$1 = "⇁"; -const DownRightVectorBar$1 = "⥗"; -const DownTee$1 = "⊤"; -const DownTeeArrow$1 = "↧"; -const Downarrow$1 = "⇓"; -const Dscr$1 = "𝒟"; -const Dstrok$1 = "Đ"; -const ENG$1 = "Ŋ"; -const ET$1 = "Ð"; -const ETH$1 = "Ð"; -const Eacut$1 = "É"; -const Eacute$1 = "É"; -const Ecaron$1 = "Ě"; -const Ecir$1 = "Ê"; -const Ecirc$1 = "Ê"; -const Ecy$1 = "Э"; -const Edot$1 = "Ė"; -const Efr$1 = "𝔈"; -const Egrav$1 = "È"; -const Egrave$1 = "È"; -const Element$1 = "∈"; -const Emacr$1 = "Ē"; -const EmptySmallSquare$1 = "◻"; -const EmptyVerySmallSquare$1 = "▫"; -const Eogon$1 = "Ę"; -const Eopf$1 = "𝔼"; -const Epsilon$1 = "Ε"; -const Equal$1 = "⩵"; -const EqualTilde$1 = "≂"; -const Equilibrium$1 = "⇌"; -const Escr$1 = "ℰ"; -const Esim$1 = "⩳"; -const Eta$1 = "Η"; -const Eum$1 = "Ë"; -const Euml$1 = "Ë"; -const Exists$1 = "∃"; -const ExponentialE$1 = "ⅇ"; -const Fcy$1 = "Ф"; -const Ffr$1 = "𝔉"; -const FilledSmallSquare$1 = "◼"; -const FilledVerySmallSquare$1 = "▪"; -const Fopf$1 = "𝔽"; -const ForAll$1 = "∀"; -const Fouriertrf$1 = "ℱ"; -const Fscr$1 = "ℱ"; -const GJcy$1 = "Ѓ"; -const G$1 = ">"; -const GT$1 = ">"; -const Gamma$1 = "Γ"; -const Gammad$1 = "Ϝ"; -const Gbreve$1 = "Ğ"; -const Gcedil$1 = "Ģ"; -const Gcirc$1 = "Ĝ"; -const Gcy$1 = "Г"; -const Gdot$1 = "Ġ"; -const Gfr$1 = "𝔊"; -const Gg$1 = "⋙"; -const Gopf$1 = "𝔾"; -const GreaterEqual$1 = "≥"; -const GreaterEqualLess$1 = "⋛"; -const GreaterFullEqual$1 = "≧"; -const GreaterGreater$1 = "⪢"; -const GreaterLess$1 = "≷"; -const GreaterSlantEqual$1 = "⩾"; -const GreaterTilde$1 = "≳"; -const Gscr$1 = "𝒢"; -const Gt$1 = "≫"; -const HARDcy$1 = "Ъ"; -const Hacek$1 = "ˇ"; -const Hat$1 = "^"; -const Hcirc$1 = "Ĥ"; -const Hfr$1 = "ℌ"; -const HilbertSpace$1 = "ℋ"; -const Hopf$1 = "ℍ"; -const HorizontalLine$1 = "─"; -const Hscr$1 = "ℋ"; -const Hstrok$1 = "Ħ"; -const HumpDownHump$1 = "≎"; -const HumpEqual$1 = "≏"; -const IEcy$1 = "Е"; -const IJlig$1 = "IJ"; -const IOcy$1 = "Ё"; -const Iacut$1 = "Í"; -const Iacute$1 = "Í"; -const Icir$1 = "Î"; -const Icirc$1 = "Î"; -const Icy$1 = "И"; -const Idot$1 = "İ"; -const Ifr$1 = "ℑ"; -const Igrav$1 = "Ì"; -const Igrave$1 = "Ì"; -const Im$1 = "ℑ"; -const Imacr$1 = "Ī"; -const ImaginaryI$1 = "ⅈ"; -const Implies$1 = "⇒"; -const Int$1 = "∬"; -const Integral$1 = "∫"; -const Intersection$1 = "⋂"; -const InvisibleComma$1 = "⁣"; -const InvisibleTimes$1 = "⁢"; -const Iogon$1 = "Į"; -const Iopf$1 = "𝕀"; -const Iota$1 = "Ι"; -const Iscr$1 = "ℐ"; -const Itilde$1 = "Ĩ"; -const Iukcy$1 = "І"; -const Ium$1 = "Ï"; -const Iuml$1 = "Ï"; -const Jcirc$1 = "Ĵ"; -const Jcy$1 = "Й"; -const Jfr$1 = "𝔍"; -const Jopf$1 = "𝕁"; -const Jscr$1 = "𝒥"; -const Jsercy$1 = "Ј"; -const Jukcy$1 = "Є"; -const KHcy$1 = "Х"; -const KJcy$1 = "Ќ"; -const Kappa$1 = "Κ"; -const Kcedil$1 = "Ķ"; -const Kcy$1 = "К"; -const Kfr$1 = "𝔎"; -const Kopf$1 = "𝕂"; -const Kscr$1 = "𝒦"; -const LJcy$1 = "Љ"; -const L$1 = "<"; -const LT$1 = "<"; -const Lacute$1 = "Ĺ"; -const Lambda$1 = "Λ"; -const Lang$1 = "⟪"; -const Laplacetrf$1 = "ℒ"; -const Larr$1 = "↞"; -const Lcaron$1 = "Ľ"; -const Lcedil$1 = "Ļ"; -const Lcy$1 = "Л"; -const LeftAngleBracket$1 = "⟨"; -const LeftArrow$1 = "←"; -const LeftArrowBar$1 = "⇤"; -const LeftArrowRightArrow$1 = "⇆"; -const LeftCeiling$1 = "⌈"; -const LeftDoubleBracket$1 = "⟦"; -const LeftDownTeeVector$1 = "⥡"; -const LeftDownVector$1 = "⇃"; -const LeftDownVectorBar$1 = "⥙"; -const LeftFloor$1 = "⌊"; -const LeftRightArrow$1 = "↔"; -const LeftRightVector$1 = "⥎"; -const LeftTee$1 = "⊣"; -const LeftTeeArrow$1 = "↤"; -const LeftTeeVector$1 = "⥚"; -const LeftTriangle$1 = "⊲"; -const LeftTriangleBar$1 = "⧏"; -const LeftTriangleEqual$1 = "⊴"; -const LeftUpDownVector$1 = "⥑"; -const LeftUpTeeVector$1 = "⥠"; -const LeftUpVector$1 = "↿"; -const LeftUpVectorBar$1 = "⥘"; -const LeftVector$1 = "↼"; -const LeftVectorBar$1 = "⥒"; -const Leftarrow$1 = "⇐"; -const Leftrightarrow$1 = "⇔"; -const LessEqualGreater$1 = "⋚"; -const LessFullEqual$1 = "≦"; -const LessGreater$1 = "≶"; -const LessLess$1 = "⪡"; -const LessSlantEqual$1 = "⩽"; -const LessTilde$1 = "≲"; -const Lfr$1 = "𝔏"; -const Ll$1 = "⋘"; -const Lleftarrow$1 = "⇚"; -const Lmidot$1 = "Ŀ"; -const LongLeftArrow$1 = "⟵"; -const LongLeftRightArrow$1 = "⟷"; -const LongRightArrow$1 = "⟶"; -const Longleftarrow$1 = "⟸"; -const Longleftrightarrow$1 = "⟺"; -const Longrightarrow$1 = "⟹"; -const Lopf$1 = "𝕃"; -const LowerLeftArrow$1 = "↙"; -const LowerRightArrow$1 = "↘"; -const Lscr$1 = "ℒ"; -const Lsh$1 = "↰"; -const Lstrok$1 = "Ł"; -const Lt$1 = "≪"; -const Mcy$1 = "М"; -const MediumSpace$1 = " "; -const Mellintrf$1 = "ℳ"; -const Mfr$1 = "𝔐"; -const MinusPlus$1 = "∓"; -const Mopf$1 = "𝕄"; -const Mscr$1 = "ℳ"; -const Mu$1 = "Μ"; -const NJcy$1 = "Њ"; -const Nacute$1 = "Ń"; -const Ncaron$1 = "Ň"; -const Ncedil$1 = "Ņ"; -const Ncy$1 = "Н"; -const NegativeMediumSpace$1 = "​"; -const NegativeThickSpace$1 = "​"; -const NegativeThinSpace$1 = "​"; -const NegativeVeryThinSpace$1 = "​"; -const NestedGreaterGreater$1 = "≫"; -const NestedLessLess$1 = "≪"; -const NewLine$1 = "\n"; -const Nfr$1 = "𝔑"; -const NoBreak$1 = "⁠"; -const NonBreakingSpace$1 = " "; -const Nopf$1 = "ℕ"; -const Not$1 = "⫬"; -const NotCongruent$1 = "≢"; -const NotCupCap$1 = "≭"; -const NotDoubleVerticalBar$1 = "∦"; -const NotElement$1 = "∉"; -const NotEqual$1 = "≠"; -const NotEqualTilde$1 = "≂̸"; -const NotExists$1 = "∄"; -const NotGreater$1 = "≯"; -const NotGreaterEqual$1 = "≱"; -const NotGreaterFullEqual$1 = "≧̸"; -const NotGreaterGreater$1 = "≫̸"; -const NotGreaterLess$1 = "≹"; -const NotGreaterSlantEqual$1 = "⩾̸"; -const NotGreaterTilde$1 = "≵"; -const NotHumpDownHump$1 = "≎̸"; -const NotHumpEqual$1 = "≏̸"; -const NotLeftTriangle$1 = "⋪"; -const NotLeftTriangleBar$1 = "⧏̸"; -const NotLeftTriangleEqual$1 = "⋬"; -const NotLess$1 = "≮"; -const NotLessEqual$1 = "≰"; -const NotLessGreater$1 = "≸"; -const NotLessLess$1 = "≪̸"; -const NotLessSlantEqual$1 = "⩽̸"; -const NotLessTilde$1 = "≴"; -const NotNestedGreaterGreater$1 = "⪢̸"; -const NotNestedLessLess$1 = "⪡̸"; -const NotPrecedes$1 = "⊀"; -const NotPrecedesEqual$1 = "⪯̸"; -const NotPrecedesSlantEqual$1 = "⋠"; -const NotReverseElement$1 = "∌"; -const NotRightTriangle$1 = "⋫"; -const NotRightTriangleBar$1 = "⧐̸"; -const NotRightTriangleEqual$1 = "⋭"; -const NotSquareSubset$1 = "⊏̸"; -const NotSquareSubsetEqual$1 = "⋢"; -const NotSquareSuperset$1 = "⊐̸"; -const NotSquareSupersetEqual$1 = "⋣"; -const NotSubset$1 = "⊂⃒"; -const NotSubsetEqual$1 = "⊈"; -const NotSucceeds$1 = "⊁"; -const NotSucceedsEqual$1 = "⪰̸"; -const NotSucceedsSlantEqual$1 = "⋡"; -const NotSucceedsTilde$1 = "≿̸"; -const NotSuperset$1 = "⊃⃒"; -const NotSupersetEqual$1 = "⊉"; -const NotTilde$1 = "≁"; -const NotTildeEqual$1 = "≄"; -const NotTildeFullEqual$1 = "≇"; -const NotTildeTilde$1 = "≉"; -const NotVerticalBar$1 = "∤"; -const Nscr$1 = "𝒩"; -const Ntild$1 = "Ñ"; -const Ntilde$1 = "Ñ"; -const Nu$1 = "Ν"; -const OElig$1 = "Œ"; -const Oacut$1 = "Ó"; -const Oacute$1 = "Ó"; -const Ocir$1 = "Ô"; -const Ocirc$1 = "Ô"; -const Ocy$1 = "О"; -const Odblac$1 = "Ő"; -const Ofr$1 = "𝔒"; -const Ograv$1 = "Ò"; -const Ograve$1 = "Ò"; -const Omacr$1 = "Ō"; -const Omega$1 = "Ω"; -const Omicron$1 = "Ο"; -const Oopf$1 = "𝕆"; -const OpenCurlyDoubleQuote$1 = "“"; -const OpenCurlyQuote$1 = "‘"; -const Or$1 = "⩔"; -const Oscr$1 = "𝒪"; -const Oslas$1 = "Ø"; -const Oslash$1 = "Ø"; -const Otild$1 = "Õ"; -const Otilde$1 = "Õ"; -const Otimes$1 = "⨷"; -const Oum$1 = "Ö"; -const Ouml$1 = "Ö"; -const OverBar$1 = "‾"; -const OverBrace$1 = "⏞"; -const OverBracket$1 = "⎴"; -const OverParenthesis$1 = "⏜"; -const PartialD$1 = "∂"; -const Pcy$1 = "П"; -const Pfr$1 = "𝔓"; -const Phi$1 = "Φ"; -const Pi$1 = "Π"; -const PlusMinus$1 = "±"; -const Poincareplane$1 = "ℌ"; -const Popf$1 = "ℙ"; -const Pr$1 = "⪻"; -const Precedes$1 = "≺"; -const PrecedesEqual$1 = "⪯"; -const PrecedesSlantEqual$1 = "≼"; -const PrecedesTilde$1 = "≾"; -const Prime$1 = "″"; -const Product$1 = "∏"; -const Proportion$1 = "∷"; -const Proportional$1 = "∝"; -const Pscr$1 = "𝒫"; -const Psi$1 = "Ψ"; -const QUO$1 = "\""; -const QUOT$1 = "\""; -const Qfr$1 = "𝔔"; -const Qopf$1 = "ℚ"; -const Qscr$1 = "𝒬"; -const RBarr$1 = "⤐"; -const RE$1 = "®"; -const REG$1 = "®"; -const Racute$1 = "Ŕ"; -const Rang$1 = "⟫"; -const Rarr$1 = "↠"; -const Rarrtl$1 = "⤖"; -const Rcaron$1 = "Ř"; -const Rcedil$1 = "Ŗ"; -const Rcy$1 = "Р"; -const Re$1 = "ℜ"; -const ReverseElement$1 = "∋"; -const ReverseEquilibrium$1 = "⇋"; -const ReverseUpEquilibrium$1 = "⥯"; -const Rfr$1 = "ℜ"; -const Rho$1 = "Ρ"; -const RightAngleBracket$1 = "⟩"; -const RightArrow$1 = "→"; -const RightArrowBar$1 = "⇥"; -const RightArrowLeftArrow$1 = "⇄"; -const RightCeiling$1 = "⌉"; -const RightDoubleBracket$1 = "⟧"; -const RightDownTeeVector$1 = "⥝"; -const RightDownVector$1 = "⇂"; -const RightDownVectorBar$1 = "⥕"; -const RightFloor$1 = "⌋"; -const RightTee$1 = "⊢"; -const RightTeeArrow$1 = "↦"; -const RightTeeVector$1 = "⥛"; -const RightTriangle$1 = "⊳"; -const RightTriangleBar$1 = "⧐"; -const RightTriangleEqual$1 = "⊵"; -const RightUpDownVector$1 = "⥏"; -const RightUpTeeVector$1 = "⥜"; -const RightUpVector$1 = "↾"; -const RightUpVectorBar$1 = "⥔"; -const RightVector$1 = "⇀"; -const RightVectorBar$1 = "⥓"; -const Rightarrow$1 = "⇒"; -const Ropf$1 = "ℝ"; -const RoundImplies$1 = "⥰"; -const Rrightarrow$1 = "⇛"; -const Rscr$1 = "ℛ"; -const Rsh$1 = "↱"; -const RuleDelayed$1 = "⧴"; -const SHCHcy$1 = "Щ"; -const SHcy$1 = "Ш"; -const SOFTcy$1 = "Ь"; -const Sacute$1 = "Ś"; -const Sc$1 = "⪼"; -const Scaron$1 = "Š"; -const Scedil$1 = "Ş"; -const Scirc$1 = "Ŝ"; -const Scy$1 = "С"; -const Sfr$1 = "𝔖"; -const ShortDownArrow$1 = "↓"; -const ShortLeftArrow$1 = "←"; -const ShortRightArrow$1 = "→"; -const ShortUpArrow$1 = "↑"; -const Sigma$1 = "Σ"; -const SmallCircle$1 = "∘"; -const Sopf$1 = "𝕊"; -const Sqrt$1 = "√"; -const Square$1 = "□"; -const SquareIntersection$1 = "⊓"; -const SquareSubset$1 = "⊏"; -const SquareSubsetEqual$1 = "⊑"; -const SquareSuperset$1 = "⊐"; -const SquareSupersetEqual$1 = "⊒"; -const SquareUnion$1 = "⊔"; -const Sscr$1 = "𝒮"; -const Star$1 = "⋆"; -const Sub$1 = "⋐"; -const Subset$1 = "⋐"; -const SubsetEqual$1 = "⊆"; -const Succeeds$1 = "≻"; -const SucceedsEqual$1 = "⪰"; -const SucceedsSlantEqual$1 = "≽"; -const SucceedsTilde$1 = "≿"; -const SuchThat$1 = "∋"; -const Sum$1 = "∑"; -const Sup$1 = "⋑"; -const Superset$1 = "⊃"; -const SupersetEqual$1 = "⊇"; -const Supset$1 = "⋑"; -const THOR$1 = "Þ"; -const THORN$1 = "Þ"; -const TRADE$1 = "™"; -const TSHcy$1 = "Ћ"; -const TScy$1 = "Ц"; -const Tab$1 = "\t"; -const Tau$1 = "Τ"; -const Tcaron$1 = "Ť"; -const Tcedil$1 = "Ţ"; -const Tcy$1 = "Т"; -const Tfr$1 = "𝔗"; -const Therefore$1 = "∴"; -const Theta$1 = "Θ"; -const ThickSpace$1 = "  "; -const ThinSpace$1 = " "; -const Tilde$1 = "∼"; -const TildeEqual$1 = "≃"; -const TildeFullEqual$1 = "≅"; -const TildeTilde$1 = "≈"; -const Topf$1 = "𝕋"; -const TripleDot$1 = "⃛"; -const Tscr$1 = "𝒯"; -const Tstrok$1 = "Ŧ"; -const Uacut$1 = "Ú"; -const Uacute$1 = "Ú"; -const Uarr$1 = "↟"; -const Uarrocir$1 = "⥉"; -const Ubrcy$1 = "Ў"; -const Ubreve$1 = "Ŭ"; -const Ucir$1 = "Û"; -const Ucirc$1 = "Û"; -const Ucy$1 = "У"; -const Udblac$1 = "Ű"; -const Ufr$1 = "𝔘"; -const Ugrav$1 = "Ù"; -const Ugrave$1 = "Ù"; -const Umacr$1 = "Ū"; -const UnderBar$1 = "_"; -const UnderBrace$1 = "⏟"; -const UnderBracket$1 = "⎵"; -const UnderParenthesis$1 = "⏝"; -const Union$1 = "⋃"; -const UnionPlus$1 = "⊎"; -const Uogon$1 = "Ų"; -const Uopf$1 = "𝕌"; -const UpArrow$1 = "↑"; -const UpArrowBar$1 = "⤒"; -const UpArrowDownArrow$1 = "⇅"; -const UpDownArrow$1 = "↕"; -const UpEquilibrium$1 = "⥮"; -const UpTee$1 = "⊥"; -const UpTeeArrow$1 = "↥"; -const Uparrow$1 = "⇑"; -const Updownarrow$1 = "⇕"; -const UpperLeftArrow$1 = "↖"; -const UpperRightArrow$1 = "↗"; -const Upsi$1 = "ϒ"; -const Upsilon$1 = "Υ"; -const Uring$1 = "Ů"; -const Uscr$1 = "𝒰"; -const Utilde$1 = "Ũ"; -const Uum$1 = "Ü"; -const Uuml$1 = "Ü"; -const VDash$1 = "⊫"; -const Vbar$1 = "⫫"; -const Vcy$1 = "В"; -const Vdash$1 = "⊩"; -const Vdashl$1 = "⫦"; -const Vee$1 = "⋁"; -const Verbar$1 = "‖"; -const Vert$1 = "‖"; -const VerticalBar$1 = "∣"; -const VerticalLine$1 = "|"; -const VerticalSeparator$1 = "❘"; -const VerticalTilde$1 = "≀"; -const VeryThinSpace$1 = " "; -const Vfr$1 = "𝔙"; -const Vopf$1 = "𝕍"; -const Vscr$1 = "𝒱"; -const Vvdash$1 = "⊪"; -const Wcirc$1 = "Ŵ"; -const Wedge$1 = "⋀"; -const Wfr$1 = "𝔚"; -const Wopf$1 = "𝕎"; -const Wscr$1 = "𝒲"; -const Xfr$1 = "𝔛"; -const Xi$1 = "Ξ"; -const Xopf$1 = "𝕏"; -const Xscr$1 = "𝒳"; -const YAcy$1 = "Я"; -const YIcy$1 = "Ї"; -const YUcy$1 = "Ю"; -const Yacut$1 = "Ý"; -const Yacute$1 = "Ý"; -const Ycirc$1 = "Ŷ"; -const Ycy$1 = "Ы"; -const Yfr$1 = "𝔜"; -const Yopf$1 = "𝕐"; -const Yscr$1 = "𝒴"; -const Yuml$1 = "Ÿ"; -const ZHcy$1 = "Ж"; -const Zacute$1 = "Ź"; -const Zcaron$1 = "Ž"; -const Zcy$1 = "З"; -const Zdot$1 = "Ż"; -const ZeroWidthSpace$1 = "​"; -const Zeta$1 = "Ζ"; -const Zfr$1 = "ℨ"; -const Zopf$1 = "ℤ"; -const Zscr$1 = "𝒵"; -const aacut$1 = "á"; -const aacute$1 = "á"; -const abreve$1 = "ă"; -const ac$1 = "∾"; -const acE$1 = "∾̳"; -const acd$1 = "∿"; -const acir$1 = "â"; -const acirc$1 = "â"; -const acut$1 = "´"; -const acute$1 = "´"; -const acy$1 = "а"; -const aeli$1 = "æ"; -const aelig$1 = "æ"; -const af$1 = "⁡"; -const afr$1 = "𝔞"; -const agrav$1 = "à"; -const agrave$1 = "à"; -const alefsym$1 = "ℵ"; -const aleph$1 = "ℵ"; -const alpha$1 = "α"; -const amacr$1 = "ā"; -const amalg$1 = "⨿"; -const am$1 = "&"; -const amp$1 = "&"; -const and$1 = "∧"; -const andand$1 = "⩕"; -const andd$1 = "⩜"; -const andslope$1 = "⩘"; -const andv$1 = "⩚"; -const ang$1 = "∠"; -const ange$1 = "⦤"; -const angle$1 = "∠"; -const angmsd$1 = "∡"; -const angmsdaa$1 = "⦨"; -const angmsdab$1 = "⦩"; -const angmsdac$1 = "⦪"; -const angmsdad$1 = "⦫"; -const angmsdae$1 = "⦬"; -const angmsdaf$1 = "⦭"; -const angmsdag$1 = "⦮"; -const angmsdah$1 = "⦯"; -const angrt$1 = "∟"; -const angrtvb$1 = "⊾"; -const angrtvbd$1 = "⦝"; -const angsph$1 = "∢"; -const angst$1 = "Å"; -const angzarr$1 = "⍼"; -const aogon$1 = "ą"; -const aopf$1 = "𝕒"; -const ap$1 = "≈"; -const apE$1 = "⩰"; -const apacir$1 = "⩯"; -const ape$1 = "≊"; -const apid$1 = "≋"; -const apos$1 = "'"; -const approx$1 = "≈"; -const approxeq$1 = "≊"; -const arin$1 = "å"; -const aring$1 = "å"; -const ascr$1 = "𝒶"; -const ast$1 = "*"; -const asymp$1 = "≈"; -const asympeq$1 = "≍"; -const atild$1 = "ã"; -const atilde$1 = "ã"; -const aum$1 = "ä"; -const auml$1 = "ä"; -const awconint$1 = "∳"; -const awint$1 = "⨑"; -const bNot$1 = "⫭"; -const backcong$1 = "≌"; -const backepsilon$1 = "϶"; -const backprime$1 = "‵"; -const backsim$1 = "∽"; -const backsimeq$1 = "⋍"; -const barvee$1 = "⊽"; -const barwed$1 = "⌅"; -const barwedge$1 = "⌅"; -const bbrk$1 = "⎵"; -const bbrktbrk$1 = "⎶"; -const bcong$1 = "≌"; -const bcy$1 = "б"; -const bdquo$1 = "„"; -const becaus$1 = "∵"; -const because$1 = "∵"; -const bemptyv$1 = "⦰"; -const bepsi$1 = "϶"; -const bernou$1 = "ℬ"; -const beta$1 = "β"; -const beth$1 = "ℶ"; -const between$1 = "≬"; -const bfr$1 = "𝔟"; -const bigcap$1 = "⋂"; -const bigcirc$1 = "◯"; -const bigcup$1 = "⋃"; -const bigodot$1 = "⨀"; -const bigoplus$1 = "⨁"; -const bigotimes$1 = "⨂"; -const bigsqcup$1 = "⨆"; -const bigstar$1 = "★"; -const bigtriangledown$1 = "▽"; -const bigtriangleup$1 = "△"; -const biguplus$1 = "⨄"; -const bigvee$1 = "⋁"; -const bigwedge$1 = "⋀"; -const bkarow$1 = "⤍"; -const blacklozenge$1 = "⧫"; -const blacksquare$1 = "▪"; -const blacktriangle$1 = "▴"; -const blacktriangledown$1 = "▾"; -const blacktriangleleft$1 = "◂"; -const blacktriangleright$1 = "▸"; -const blank$1 = "␣"; -const blk12$1 = "▒"; -const blk14$1 = "░"; -const blk34$1 = "▓"; -const block$1 = "█"; -const bne$1 = "=⃥"; -const bnequiv$1 = "≡⃥"; -const bnot$1 = "⌐"; -const bopf$1 = "𝕓"; -const bot$1 = "⊥"; -const bottom$1 = "⊥"; -const bowtie$1 = "⋈"; -const boxDL$1 = "╗"; -const boxDR$1 = "╔"; -const boxDl$1 = "╖"; -const boxDr$1 = "╓"; -const boxH$1 = "═"; -const boxHD$1 = "╦"; -const boxHU$1 = "╩"; -const boxHd$1 = "╤"; -const boxHu$1 = "╧"; -const boxUL$1 = "╝"; -const boxUR$1 = "╚"; -const boxUl$1 = "╜"; -const boxUr$1 = "╙"; -const boxV$1 = "║"; -const boxVH$1 = "╬"; -const boxVL$1 = "╣"; -const boxVR$1 = "╠"; -const boxVh$1 = "╫"; -const boxVl$1 = "╢"; -const boxVr$1 = "╟"; -const boxbox$1 = "⧉"; -const boxdL$1 = "╕"; -const boxdR$1 = "╒"; -const boxdl$1 = "┐"; -const boxdr$1 = "┌"; -const boxh$1 = "─"; -const boxhD$1 = "╥"; -const boxhU$1 = "╨"; -const boxhd$1 = "┬"; -const boxhu$1 = "┴"; -const boxminus$1 = "⊟"; -const boxplus$1 = "⊞"; -const boxtimes$1 = "⊠"; -const boxuL$1 = "╛"; -const boxuR$1 = "╘"; -const boxul$1 = "┘"; -const boxur$1 = "└"; -const boxv$1 = "│"; -const boxvH$1 = "╪"; -const boxvL$1 = "╡"; -const boxvR$1 = "╞"; -const boxvh$1 = "┼"; -const boxvl$1 = "┤"; -const boxvr$1 = "├"; -const bprime$1 = "‵"; -const breve$1 = "˘"; -const brvba$1 = "¦"; -const brvbar$1 = "¦"; -const bscr$1 = "𝒷"; -const bsemi$1 = "⁏"; -const bsim$1 = "∽"; -const bsime$1 = "⋍"; -const bsol$1 = "\\"; -const bsolb$1 = "⧅"; -const bsolhsub$1 = "⟈"; -const bull$1 = "•"; -const bullet$1 = "•"; -const bump$1 = "≎"; -const bumpE$1 = "⪮"; -const bumpe$1 = "≏"; -const bumpeq$1 = "≏"; -const cacute$1 = "ć"; -const cap$1 = "∩"; -const capand$1 = "⩄"; -const capbrcup$1 = "⩉"; -const capcap$1 = "⩋"; -const capcup$1 = "⩇"; -const capdot$1 = "⩀"; -const caps$1 = "∩︀"; -const caret$1 = "⁁"; -const caron$1 = "ˇ"; -const ccaps$1 = "⩍"; -const ccaron$1 = "č"; -const ccedi$1 = "ç"; -const ccedil$1 = "ç"; -const ccirc$1 = "ĉ"; -const ccups$1 = "⩌"; -const ccupssm$1 = "⩐"; -const cdot$1 = "ċ"; -const cedi$1 = "¸"; -const cedil$1 = "¸"; -const cemptyv$1 = "⦲"; -const cen$1 = "¢"; -const cent$1 = "¢"; -const centerdot$1 = "·"; -const cfr$1 = "𝔠"; -const chcy$1 = "ч"; -const check$2 = "✓"; -const checkmark$1 = "✓"; -const chi$1 = "χ"; -const cir$1 = "○"; -const cirE$1 = "⧃"; -const circ$1 = "ˆ"; -const circeq$1 = "≗"; -const circlearrowleft$1 = "↺"; -const circlearrowright$1 = "↻"; -const circledR$1 = "®"; -const circledS$1 = "Ⓢ"; -const circledast$1 = "⊛"; -const circledcirc$1 = "⊚"; -const circleddash$1 = "⊝"; -const cire$1 = "≗"; -const cirfnint$1 = "⨐"; -const cirmid$1 = "⫯"; -const cirscir$1 = "⧂"; -const clubs$1 = "♣"; -const clubsuit$1 = "♣"; -const colon$1 = ":"; -const colone$1 = "≔"; -const coloneq$1 = "≔"; -const comma$1 = ","; -const commat$1 = "@"; -const comp$1 = "∁"; -const compfn$1 = "∘"; -const complement$1 = "∁"; -const complexes$1 = "ℂ"; -const cong$1 = "≅"; -const congdot$1 = "⩭"; -const conint$1 = "∮"; -const copf$1 = "𝕔"; -const coprod$1 = "∐"; -const cop$1 = "©"; -const copy$1 = "©"; -const copysr$1 = "℗"; -const crarr$1 = "↵"; -const cross$1 = "✗"; -const cscr$1 = "𝒸"; -const csub$1 = "⫏"; -const csube$1 = "⫑"; -const csup$1 = "⫐"; -const csupe$1 = "⫒"; -const ctdot$1 = "⋯"; -const cudarrl$1 = "⤸"; -const cudarrr$1 = "⤵"; -const cuepr$1 = "⋞"; -const cuesc$1 = "⋟"; -const cularr$1 = "↶"; -const cularrp$1 = "⤽"; -const cup$1 = "∪"; -const cupbrcap$1 = "⩈"; -const cupcap$1 = "⩆"; -const cupcup$1 = "⩊"; -const cupdot$1 = "⊍"; -const cupor$1 = "⩅"; -const cups$1 = "∪︀"; -const curarr$1 = "↷"; -const curarrm$1 = "⤼"; -const curlyeqprec$1 = "⋞"; -const curlyeqsucc$1 = "⋟"; -const curlyvee$1 = "⋎"; -const curlywedge$1 = "⋏"; -const curre$1 = "¤"; -const curren$1 = "¤"; -const curvearrowleft$1 = "↶"; -const curvearrowright$1 = "↷"; -const cuvee$1 = "⋎"; -const cuwed$1 = "⋏"; -const cwconint$1 = "∲"; -const cwint$1 = "∱"; -const cylcty$1 = "⌭"; -const dArr$1 = "⇓"; -const dHar$1 = "⥥"; -const dagger$1 = "†"; -const daleth$1 = "ℸ"; -const darr$1 = "↓"; -const dash$1 = "‐"; -const dashv$1 = "⊣"; -const dbkarow$1 = "⤏"; -const dblac$1 = "˝"; -const dcaron$1 = "ď"; -const dcy$1 = "д"; -const dd$1 = "ⅆ"; -const ddagger$1 = "‡"; -const ddarr$1 = "⇊"; -const ddotseq$1 = "⩷"; -const de$1 = "°"; -const deg$1 = "°"; -const delta$1 = "δ"; -const demptyv$1 = "⦱"; -const dfisht$1 = "⥿"; -const dfr$1 = "𝔡"; -const dharl$1 = "⇃"; -const dharr$1 = "⇂"; -const diam$1 = "⋄"; -const diamond$1 = "⋄"; -const diamondsuit$1 = "♦"; -const diams$1 = "♦"; -const die$1 = "¨"; -const digamma$1 = "ϝ"; -const disin$1 = "⋲"; -const div$1 = "÷"; -const divid$1 = "÷"; -const divide$1 = "÷"; -const divideontimes$1 = "⋇"; -const divonx$1 = "⋇"; -const djcy$1 = "ђ"; -const dlcorn$1 = "⌞"; -const dlcrop$1 = "⌍"; -const dollar$1 = "$"; -const dopf$1 = "𝕕"; -const dot$1 = "˙"; -const doteq$1 = "≐"; -const doteqdot$1 = "≑"; -const dotminus$1 = "∸"; -const dotplus$1 = "∔"; -const dotsquare$1 = "⊡"; -const doublebarwedge$1 = "⌆"; -const downarrow$1 = "↓"; -const downdownarrows$1 = "⇊"; -const downharpoonleft$1 = "⇃"; -const downharpoonright$1 = "⇂"; -const drbkarow$1 = "⤐"; -const drcorn$1 = "⌟"; -const drcrop$1 = "⌌"; -const dscr$1 = "𝒹"; -const dscy$1 = "ѕ"; -const dsol$1 = "⧶"; -const dstrok$1 = "đ"; -const dtdot$1 = "⋱"; -const dtri$1 = "▿"; -const dtrif$1 = "▾"; -const duarr$1 = "⇵"; -const duhar$1 = "⥯"; -const dwangle$1 = "⦦"; -const dzcy$1 = "џ"; -const dzigrarr$1 = "⟿"; -const eDDot$1 = "⩷"; -const eDot$1 = "≑"; -const eacut$1 = "é"; -const eacute$1 = "é"; -const easter$1 = "⩮"; -const ecaron$1 = "ě"; -const ecir$1 = "ê"; -const ecirc$1 = "ê"; -const ecolon$1 = "≕"; -const ecy$1 = "э"; -const edot$1 = "ė"; -const ee$1 = "ⅇ"; -const efDot$1 = "≒"; -const efr$1 = "𝔢"; -const eg$1 = "⪚"; -const egrav$1 = "è"; -const egrave$1 = "è"; -const egs$1 = "⪖"; -const egsdot$1 = "⪘"; -const el$1 = "⪙"; -const elinters$1 = "⏧"; -const ell$1 = "ℓ"; -const els$1 = "⪕"; -const elsdot$1 = "⪗"; -const emacr$1 = "ē"; -const empty$1 = "∅"; -const emptyset$1 = "∅"; -const emptyv$1 = "∅"; -const emsp13$1 = " "; -const emsp14$1 = " "; -const emsp$1 = " "; -const eng$1 = "ŋ"; -const ensp$1 = " "; -const eogon$1 = "ę"; -const eopf$1 = "𝕖"; -const epar$1 = "⋕"; -const eparsl$1 = "⧣"; -const eplus$1 = "⩱"; -const epsi$1 = "ε"; -const epsilon$1 = "ε"; -const epsiv$1 = "ϵ"; -const eqcirc$1 = "≖"; -const eqcolon$1 = "≕"; -const eqsim$1 = "≂"; -const eqslantgtr$1 = "⪖"; -const eqslantless$1 = "⪕"; -const equals$1 = "="; -const equest$1 = "≟"; -const equiv$1 = "≡"; -const equivDD$1 = "⩸"; -const eqvparsl$1 = "⧥"; -const erDot$1 = "≓"; -const erarr$1 = "⥱"; -const escr$1 = "ℯ"; -const esdot$1 = "≐"; -const esim$1 = "≂"; -const eta$1 = "η"; -const et$1 = "ð"; -const eth$1 = "ð"; -const eum$1 = "ë"; -const euml$1 = "ë"; -const euro$1 = "€"; -const excl$1 = "!"; -const exist$1 = "∃"; -const expectation$1 = "ℰ"; -const exponentiale$1 = "ⅇ"; -const fallingdotseq$1 = "≒"; -const fcy$1 = "ф"; -const female$1 = "♀"; -const ffilig$1 = "ffi"; -const fflig$1 = "ff"; -const ffllig$1 = "ffl"; -const ffr$1 = "𝔣"; -const filig$1 = "fi"; -const fjlig$1 = "fj"; -const flat$1 = "♭"; -const fllig$1 = "fl"; -const fltns$1 = "▱"; -const fnof$1 = "ƒ"; -const fopf$1 = "𝕗"; -const forall$1 = "∀"; -const fork$1 = "⋔"; -const forkv$1 = "⫙"; -const fpartint$1 = "⨍"; -const frac1$1 = "¼"; -const frac12$1 = "½"; -const frac13$1 = "⅓"; -const frac14$1 = "¼"; -const frac15$1 = "⅕"; -const frac16$1 = "⅙"; -const frac18$1 = "⅛"; -const frac23$1 = "⅔"; -const frac25$1 = "⅖"; -const frac3$1 = "¾"; -const frac34$1 = "¾"; -const frac35$1 = "⅗"; -const frac38$1 = "⅜"; -const frac45$1 = "⅘"; -const frac56$1 = "⅚"; -const frac58$1 = "⅝"; -const frac78$1 = "⅞"; -const frasl$1 = "⁄"; -const frown$1 = "⌢"; -const fscr$1 = "𝒻"; -const gE$1 = "≧"; -const gEl$1 = "⪌"; -const gacute$1 = "ǵ"; -const gamma$1 = "γ"; -const gammad$1 = "ϝ"; -const gap$1 = "⪆"; -const gbreve$1 = "ğ"; -const gcirc$1 = "ĝ"; -const gcy$1 = "г"; -const gdot$1 = "ġ"; -const ge$1 = "≥"; -const gel$1 = "⋛"; -const geq$1 = "≥"; -const geqq$1 = "≧"; -const geqslant$1 = "⩾"; -const ges$1 = "⩾"; -const gescc$1 = "⪩"; -const gesdot$1 = "⪀"; -const gesdoto$1 = "⪂"; -const gesdotol$1 = "⪄"; -const gesl$1 = "⋛︀"; -const gesles$1 = "⪔"; -const gfr$1 = "𝔤"; -const gg$1 = "≫"; -const ggg$1 = "⋙"; -const gimel$1 = "ℷ"; -const gjcy$1 = "ѓ"; -const gl$1 = "≷"; -const glE$1 = "⪒"; -const gla$1 = "⪥"; -const glj$1 = "⪤"; -const gnE$1 = "≩"; -const gnap$1 = "⪊"; -const gnapprox$1 = "⪊"; -const gne$1 = "⪈"; -const gneq$1 = "⪈"; -const gneqq$1 = "≩"; -const gnsim$1 = "⋧"; -const gopf$1 = "𝕘"; -const grave$1 = "`"; -const gscr$1 = "ℊ"; -const gsim$1 = "≳"; -const gsime$1 = "⪎"; -const gsiml$1 = "⪐"; -const g$1 = ">"; -const gt$1 = ">"; -const gtcc$1 = "⪧"; -const gtcir$1 = "⩺"; -const gtdot$1 = "⋗"; -const gtlPar$1 = "⦕"; -const gtquest$1 = "⩼"; -const gtrapprox$1 = "⪆"; -const gtrarr$1 = "⥸"; -const gtrdot$1 = "⋗"; -const gtreqless$1 = "⋛"; -const gtreqqless$1 = "⪌"; -const gtrless$1 = "≷"; -const gtrsim$1 = "≳"; -const gvertneqq$1 = "≩︀"; -const gvnE$1 = "≩︀"; -const hArr$1 = "⇔"; -const hairsp$1 = " "; -const half$1 = "½"; -const hamilt$1 = "ℋ"; -const hardcy$1 = "ъ"; -const harr$1 = "↔"; -const harrcir$1 = "⥈"; -const harrw$1 = "↭"; -const hbar$1 = "ℏ"; -const hcirc$1 = "ĥ"; -const hearts$1 = "♥"; -const heartsuit$1 = "♥"; -const hellip$1 = "…"; -const hercon$1 = "⊹"; -const hfr$1 = "𝔥"; -const hksearow$1 = "⤥"; -const hkswarow$1 = "⤦"; -const hoarr$1 = "⇿"; -const homtht$1 = "∻"; -const hookleftarrow$1 = "↩"; -const hookrightarrow$1 = "↪"; -const hopf$1 = "𝕙"; -const horbar$1 = "―"; -const hscr$1 = "𝒽"; -const hslash$1 = "ℏ"; -const hstrok$1 = "ħ"; -const hybull$1 = "⁃"; -const hyphen$1 = "‐"; -const iacut$1 = "í"; -const iacute$1 = "í"; -const ic$1 = "⁣"; -const icir$1 = "î"; -const icirc$1 = "î"; -const icy$1 = "и"; -const iecy$1 = "е"; -const iexc$1 = "¡"; -const iexcl$1 = "¡"; -const iff$1 = "⇔"; -const ifr$1 = "𝔦"; -const igrav$1 = "ì"; -const igrave$1 = "ì"; -const ii$1 = "ⅈ"; -const iiiint$1 = "⨌"; -const iiint$1 = "∭"; -const iinfin$1 = "⧜"; -const iiota$1 = "℩"; -const ijlig$1 = "ij"; -const imacr$1 = "ī"; -const image$2 = "ℑ"; -const imagline$1 = "ℐ"; -const imagpart$1 = "ℑ"; -const imath$1 = "ı"; -const imof$1 = "⊷"; -const imped$1 = "Ƶ"; -const incare$1 = "℅"; -const infin$1 = "∞"; -const infintie$1 = "⧝"; -const inodot$1 = "ı"; -const int$2 = "∫"; -const intcal$1 = "⊺"; -const integers$1 = "ℤ"; -const intercal$1 = "⊺"; -const intlarhk$1 = "⨗"; -const intprod$1 = "⨼"; -const iocy$1 = "ё"; -const iogon$1 = "į"; -const iopf$1 = "𝕚"; -const iota$1 = "ι"; -const iprod$1 = "⨼"; -const iques$1 = "¿"; -const iquest$1 = "¿"; -const iscr$1 = "𝒾"; -const isin$1 = "∈"; -const isinE$1 = "⋹"; -const isindot$1 = "⋵"; -const isins$1 = "⋴"; -const isinsv$1 = "⋳"; -const isinv$1 = "∈"; -const it$1 = "⁢"; -const itilde$1 = "ĩ"; -const iukcy$1 = "і"; -const ium$1 = "ï"; -const iuml$1 = "ï"; -const jcirc$1 = "ĵ"; -const jcy$1 = "й"; -const jfr$1 = "𝔧"; -const jmath$1 = "ȷ"; -const jopf$1 = "𝕛"; -const jscr$1 = "𝒿"; -const jsercy$1 = "ј"; -const jukcy$1 = "є"; -const kappa$1 = "κ"; -const kappav$1 = "ϰ"; -const kcedil$1 = "ķ"; -const kcy$1 = "к"; -const kfr$1 = "𝔨"; -const kgreen$1 = "ĸ"; -const khcy$1 = "х"; -const kjcy$1 = "ќ"; -const kopf$1 = "𝕜"; -const kscr$1 = "𝓀"; -const lAarr$1 = "⇚"; -const lArr$1 = "⇐"; -const lAtail$1 = "⤛"; -const lBarr$1 = "⤎"; -const lE$1 = "≦"; -const lEg$1 = "⪋"; -const lHar$1 = "⥢"; -const lacute$1 = "ĺ"; -const laemptyv$1 = "⦴"; -const lagran$1 = "ℒ"; -const lambda$1 = "λ"; -const lang$1 = "⟨"; -const langd$1 = "⦑"; -const langle$1 = "⟨"; -const lap$1 = "⪅"; -const laqu$1 = "«"; -const laquo$1 = "«"; -const larr$1 = "←"; -const larrb$1 = "⇤"; -const larrbfs$1 = "⤟"; -const larrfs$1 = "⤝"; -const larrhk$1 = "↩"; -const larrlp$1 = "↫"; -const larrpl$1 = "⤹"; -const larrsim$1 = "⥳"; -const larrtl$1 = "↢"; -const lat$1 = "⪫"; -const latail$1 = "⤙"; -const late$1 = "⪭"; -const lates$1 = "⪭︀"; -const lbarr$1 = "⤌"; -const lbbrk$1 = "❲"; -const lbrace$1 = "{"; -const lbrack$1 = "["; -const lbrke$1 = "⦋"; -const lbrksld$1 = "⦏"; -const lbrkslu$1 = "⦍"; -const lcaron$1 = "ľ"; -const lcedil$1 = "ļ"; -const lceil$1 = "⌈"; -const lcub$1 = "{"; -const lcy$1 = "л"; -const ldca$1 = "⤶"; -const ldquo$1 = "“"; -const ldquor$1 = "„"; -const ldrdhar$1 = "⥧"; -const ldrushar$1 = "⥋"; -const ldsh$1 = "↲"; -const le$1 = "≤"; -const leftarrow$1 = "←"; -const leftarrowtail$1 = "↢"; -const leftharpoondown$1 = "↽"; -const leftharpoonup$1 = "↼"; -const leftleftarrows$1 = "⇇"; -const leftrightarrow$1 = "↔"; -const leftrightarrows$1 = "⇆"; -const leftrightharpoons$1 = "⇋"; -const leftrightsquigarrow$1 = "↭"; -const leftthreetimes$1 = "⋋"; -const leg$1 = "⋚"; -const leq$1 = "≤"; -const leqq$1 = "≦"; -const leqslant$1 = "⩽"; -const les$1 = "⩽"; -const lescc$1 = "⪨"; -const lesdot$1 = "⩿"; -const lesdoto$1 = "⪁"; -const lesdotor$1 = "⪃"; -const lesg$1 = "⋚︀"; -const lesges$1 = "⪓"; -const lessapprox$1 = "⪅"; -const lessdot$1 = "⋖"; -const lesseqgtr$1 = "⋚"; -const lesseqqgtr$1 = "⪋"; -const lessgtr$1 = "≶"; -const lesssim$1 = "≲"; -const lfisht$1 = "⥼"; -const lfloor$1 = "⌊"; -const lfr$1 = "𝔩"; -const lg$1 = "≶"; -const lgE$1 = "⪑"; -const lhard$1 = "↽"; -const lharu$1 = "↼"; -const lharul$1 = "⥪"; -const lhblk$1 = "▄"; -const ljcy$1 = "љ"; -const ll$1 = "≪"; -const llarr$1 = "⇇"; -const llcorner$1 = "⌞"; -const llhard$1 = "⥫"; -const lltri$1 = "◺"; -const lmidot$1 = "ŀ"; -const lmoust$1 = "⎰"; -const lmoustache$1 = "⎰"; -const lnE$1 = "≨"; -const lnap$1 = "⪉"; -const lnapprox$1 = "⪉"; -const lne$1 = "⪇"; -const lneq$1 = "⪇"; -const lneqq$1 = "≨"; -const lnsim$1 = "⋦"; -const loang$1 = "⟬"; -const loarr$1 = "⇽"; -const lobrk$1 = "⟦"; -const longleftarrow$1 = "⟵"; -const longleftrightarrow$1 = "⟷"; -const longmapsto$1 = "⟼"; -const longrightarrow$1 = "⟶"; -const looparrowleft$1 = "↫"; -const looparrowright$1 = "↬"; -const lopar$1 = "⦅"; -const lopf$1 = "𝕝"; -const loplus$1 = "⨭"; -const lotimes$1 = "⨴"; -const lowast$1 = "∗"; -const lowbar$1 = "_"; -const loz$1 = "◊"; -const lozenge$1 = "◊"; -const lozf$1 = "⧫"; -const lpar$1 = "("; -const lparlt$1 = "⦓"; -const lrarr$1 = "⇆"; -const lrcorner$1 = "⌟"; -const lrhar$1 = "⇋"; -const lrhard$1 = "⥭"; -const lrm$1 = "‎"; -const lrtri$1 = "⊿"; -const lsaquo$1 = "‹"; -const lscr$1 = "𝓁"; -const lsh$1 = "↰"; -const lsim$1 = "≲"; -const lsime$1 = "⪍"; -const lsimg$1 = "⪏"; -const lsqb$1 = "["; -const lsquo$1 = "‘"; -const lsquor$1 = "‚"; -const lstrok$1 = "ł"; -const l$1 = "<"; -const lt$2 = "<"; -const ltcc$1 = "⪦"; -const ltcir$1 = "⩹"; -const ltdot$1 = "⋖"; -const lthree$1 = "⋋"; -const ltimes$1 = "⋉"; -const ltlarr$1 = "⥶"; -const ltquest$1 = "⩻"; -const ltrPar$1 = "⦖"; -const ltri$1 = "◃"; -const ltrie$1 = "⊴"; -const ltrif$1 = "◂"; -const lurdshar$1 = "⥊"; -const luruhar$1 = "⥦"; -const lvertneqq$1 = "≨︀"; -const lvnE$1 = "≨︀"; -const mDDot$1 = "∺"; -const mac$1 = "¯"; -const macr$1 = "¯"; -const male$1 = "♂"; -const malt$1 = "✠"; -const maltese$1 = "✠"; -const map$4 = "↦"; -const mapsto$1 = "↦"; -const mapstodown$1 = "↧"; -const mapstoleft$1 = "↤"; -const mapstoup$1 = "↥"; -const marker$1 = "▮"; -const mcomma$1 = "⨩"; -const mcy$1 = "м"; -const mdash$1 = "—"; -const measuredangle$1 = "∡"; -const mfr$1 = "𝔪"; -const mho$1 = "℧"; -const micr$1 = "µ"; -const micro$1 = "µ"; -const mid$1 = "∣"; -const midast$1 = "*"; -const midcir$1 = "⫰"; -const middo$1 = "·"; -const middot$1 = "·"; -const minus$1 = "−"; -const minusb$1 = "⊟"; -const minusd$1 = "∸"; -const minusdu$1 = "⨪"; -const mlcp$1 = "⫛"; -const mldr$1 = "…"; -const mnplus$1 = "∓"; -const models$1 = "⊧"; -const mopf$1 = "𝕞"; -const mp$1 = "∓"; -const mscr$1 = "𝓂"; -const mstpos$1 = "∾"; -const mu$1 = "μ"; -const multimap$1 = "⊸"; -const mumap$1 = "⊸"; -const nGg$1 = "⋙̸"; -const nGt$1 = "≫⃒"; -const nGtv$1 = "≫̸"; -const nLeftarrow$1 = "⇍"; -const nLeftrightarrow$1 = "⇎"; -const nLl$1 = "⋘̸"; -const nLt$1 = "≪⃒"; -const nLtv$1 = "≪̸"; -const nRightarrow$1 = "⇏"; -const nVDash$1 = "⊯"; -const nVdash$1 = "⊮"; -const nabla$1 = "∇"; -const nacute$1 = "ń"; -const nang$1 = "∠⃒"; -const nap$1 = "≉"; -const napE$1 = "⩰̸"; -const napid$1 = "≋̸"; -const napos$1 = "ʼn"; -const napprox$1 = "≉"; -const natur$1 = "♮"; -const natural$1 = "♮"; -const naturals$1 = "ℕ"; -const nbs$1 = " "; -const nbsp$1 = " "; -const nbump$1 = "≎̸"; -const nbumpe$1 = "≏̸"; -const ncap$1 = "⩃"; -const ncaron$1 = "ň"; -const ncedil$1 = "ņ"; -const ncong$1 = "≇"; -const ncongdot$1 = "⩭̸"; -const ncup$1 = "⩂"; -const ncy$1 = "н"; -const ndash$1 = "–"; -const ne$1 = "≠"; -const neArr$1 = "⇗"; -const nearhk$1 = "⤤"; -const nearr$1 = "↗"; -const nearrow$1 = "↗"; -const nedot$1 = "≐̸"; -const nequiv$1 = "≢"; -const nesear$1 = "⤨"; -const nesim$1 = "≂̸"; -const nexist$1 = "∄"; -const nexists$1 = "∄"; -const nfr$1 = "𝔫"; -const ngE$1 = "≧̸"; -const nge$1 = "≱"; -const ngeq$1 = "≱"; -const ngeqq$1 = "≧̸"; -const ngeqslant$1 = "⩾̸"; -const nges$1 = "⩾̸"; -const ngsim$1 = "≵"; -const ngt$1 = "≯"; -const ngtr$1 = "≯"; -const nhArr$1 = "⇎"; -const nharr$1 = "↮"; -const nhpar$1 = "⫲"; -const ni$1 = "∋"; -const nis$1 = "⋼"; -const nisd$1 = "⋺"; -const niv$1 = "∋"; -const njcy$1 = "њ"; -const nlArr$1 = "⇍"; -const nlE$1 = "≦̸"; -const nlarr$1 = "↚"; -const nldr$1 = "‥"; -const nle$1 = "≰"; -const nleftarrow$1 = "↚"; -const nleftrightarrow$1 = "↮"; -const nleq$1 = "≰"; -const nleqq$1 = "≦̸"; -const nleqslant$1 = "⩽̸"; -const nles$1 = "⩽̸"; -const nless$1 = "≮"; -const nlsim$1 = "≴"; -const nlt$1 = "≮"; -const nltri$1 = "⋪"; -const nltrie$1 = "⋬"; -const nmid$1 = "∤"; -const nopf$1 = "𝕟"; -const no$1 = "¬"; -const not$1 = "¬"; -const notin$1 = "∉"; -const notinE$1 = "⋹̸"; -const notindot$1 = "⋵̸"; -const notinva$1 = "∉"; -const notinvb$1 = "⋷"; -const notinvc$1 = "⋶"; -const notni$1 = "∌"; -const notniva$1 = "∌"; -const notnivb$1 = "⋾"; -const notnivc$1 = "⋽"; -const npar$1 = "∦"; -const nparallel$1 = "∦"; -const nparsl$1 = "⫽⃥"; -const npart$1 = "∂̸"; -const npolint$1 = "⨔"; -const npr$1 = "⊀"; -const nprcue$1 = "⋠"; -const npre$1 = "⪯̸"; -const nprec$1 = "⊀"; -const npreceq$1 = "⪯̸"; -const nrArr$1 = "⇏"; -const nrarr$1 = "↛"; -const nrarrc$1 = "⤳̸"; -const nrarrw$1 = "↝̸"; -const nrightarrow$1 = "↛"; -const nrtri$1 = "⋫"; -const nrtrie$1 = "⋭"; -const nsc$1 = "⊁"; -const nsccue$1 = "⋡"; -const nsce$1 = "⪰̸"; -const nscr$1 = "𝓃"; -const nshortmid$1 = "∤"; -const nshortparallel$1 = "∦"; -const nsim$1 = "≁"; -const nsime$1 = "≄"; -const nsimeq$1 = "≄"; -const nsmid$1 = "∤"; -const nspar$1 = "∦"; -const nsqsube$1 = "⋢"; -const nsqsupe$1 = "⋣"; -const nsub$1 = "⊄"; -const nsubE$1 = "⫅̸"; -const nsube$1 = "⊈"; -const nsubset$1 = "⊂⃒"; -const nsubseteq$1 = "⊈"; -const nsubseteqq$1 = "⫅̸"; -const nsucc$1 = "⊁"; -const nsucceq$1 = "⪰̸"; -const nsup$1 = "⊅"; -const nsupE$1 = "⫆̸"; -const nsupe$1 = "⊉"; -const nsupset$1 = "⊃⃒"; -const nsupseteq$1 = "⊉"; -const nsupseteqq$1 = "⫆̸"; -const ntgl$1 = "≹"; -const ntild$1 = "ñ"; -const ntilde$1 = "ñ"; -const ntlg$1 = "≸"; -const ntriangleleft$1 = "⋪"; -const ntrianglelefteq$1 = "⋬"; -const ntriangleright$1 = "⋫"; -const ntrianglerighteq$1 = "⋭"; -const nu$1 = "ν"; -const num$1 = "#"; -const numero$1 = "№"; -const numsp$1 = " "; -const nvDash$1 = "⊭"; -const nvHarr$1 = "⤄"; -const nvap$1 = "≍⃒"; -const nvdash$1 = "⊬"; -const nvge$1 = "≥⃒"; -const nvgt$1 = ">⃒"; -const nvinfin$1 = "⧞"; -const nvlArr$1 = "⤂"; -const nvle$1 = "≤⃒"; -const nvlt$1 = "<⃒"; -const nvltrie$1 = "⊴⃒"; -const nvrArr$1 = "⤃"; -const nvrtrie$1 = "⊵⃒"; -const nvsim$1 = "∼⃒"; -const nwArr$1 = "⇖"; -const nwarhk$1 = "⤣"; -const nwarr$1 = "↖"; -const nwarrow$1 = "↖"; -const nwnear$1 = "⤧"; -const oS$1 = "Ⓢ"; -const oacut$1 = "ó"; -const oacute$1 = "ó"; -const oast$1 = "⊛"; -const ocir$1 = "ô"; -const ocirc$1 = "ô"; -const ocy$1 = "о"; -const odash$1 = "⊝"; -const odblac$1 = "ő"; -const odiv$1 = "⨸"; -const odot$1 = "⊙"; -const odsold$1 = "⦼"; -const oelig$1 = "œ"; -const ofcir$1 = "⦿"; -const ofr$1 = "𝔬"; -const ogon$1 = "˛"; -const ograv$1 = "ò"; -const ograve$1 = "ò"; -const ogt$1 = "⧁"; -const ohbar$1 = "⦵"; -const ohm$1 = "Ω"; -const oint$1 = "∮"; -const olarr$1 = "↺"; -const olcir$1 = "⦾"; -const olcross$1 = "⦻"; -const oline$1 = "‾"; -const olt$1 = "⧀"; -const omacr$1 = "ō"; -const omega$1 = "ω"; -const omicron$1 = "ο"; -const omid$1 = "⦶"; -const ominus$1 = "⊖"; -const oopf$1 = "𝕠"; -const opar$1 = "⦷"; -const operp$1 = "⦹"; -const oplus$1 = "⊕"; -const or$1 = "∨"; -const orarr$1 = "↻"; -const ord$1 = "º"; -const order$1 = "ℴ"; -const orderof$1 = "ℴ"; -const ordf$1 = "ª"; -const ordm$1 = "º"; -const origof$1 = "⊶"; -const oror$1 = "⩖"; -const orslope$1 = "⩗"; -const orv$1 = "⩛"; -const oscr$1 = "ℴ"; -const oslas$1 = "ø"; -const oslash$1 = "ø"; -const osol$1 = "⊘"; -const otild$1 = "õ"; -const otilde$1 = "õ"; -const otimes$1 = "⊗"; -const otimesas$1 = "⨶"; -const oum$1 = "ö"; -const ouml$1 = "ö"; -const ovbar$1 = "⌽"; -const par$1 = "¶"; -const para$1 = "¶"; -const parallel$1 = "∥"; -const parsim$1 = "⫳"; -const parsl$1 = "⫽"; -const part$1 = "∂"; -const pcy$1 = "п"; -const percnt$1 = "%"; -const period$1 = "."; -const permil$1 = "‰"; -const perp$1 = "⊥"; -const pertenk$1 = "‱"; -const pfr$1 = "𝔭"; -const phi$1 = "φ"; -const phiv$1 = "ϕ"; -const phmmat$1 = "ℳ"; -const phone$1 = "☎"; -const pi$1 = "π"; -const pitchfork$1 = "⋔"; -const piv$1 = "ϖ"; -const planck$1 = "ℏ"; -const planckh$1 = "ℎ"; -const plankv$1 = "ℏ"; -const plus$1 = "+"; -const plusacir$1 = "⨣"; -const plusb$1 = "⊞"; -const pluscir$1 = "⨢"; -const plusdo$1 = "∔"; -const plusdu$1 = "⨥"; -const pluse$1 = "⩲"; -const plusm$1 = "±"; -const plusmn$1 = "±"; -const plussim$1 = "⨦"; -const plustwo$1 = "⨧"; -const pm$1 = "±"; -const pointint$1 = "⨕"; -const popf$1 = "𝕡"; -const poun$1 = "£"; -const pound$1 = "£"; -const pr$1 = "≺"; -const prE$1 = "⪳"; -const prap$1 = "⪷"; -const prcue$1 = "≼"; -const pre$1 = "⪯"; -const prec$1 = "≺"; -const precapprox$1 = "⪷"; -const preccurlyeq$1 = "≼"; -const preceq$1 = "⪯"; -const precnapprox$1 = "⪹"; -const precneqq$1 = "⪵"; -const precnsim$1 = "⋨"; -const precsim$1 = "≾"; -const prime$1 = "′"; -const primes$1 = "ℙ"; -const prnE$1 = "⪵"; -const prnap$1 = "⪹"; -const prnsim$1 = "⋨"; -const prod$1 = "∏"; -const profalar$1 = "⌮"; -const profline$1 = "⌒"; -const profsurf$1 = "⌓"; -const prop$1 = "∝"; -const propto$1 = "∝"; -const prsim$1 = "≾"; -const prurel$1 = "⊰"; -const pscr$1 = "𝓅"; -const psi$1 = "ψ"; -const puncsp$1 = " "; -const qfr$1 = "𝔮"; -const qint$1 = "⨌"; -const qopf$1 = "𝕢"; -const qprime$1 = "⁗"; -const qscr$1 = "𝓆"; -const quaternions$1 = "ℍ"; -const quatint$1 = "⨖"; -const quest$1 = "?"; -const questeq$1 = "≟"; -const quo$1 = "\""; -const quot$1 = "\""; -const rAarr$1 = "⇛"; -const rArr$1 = "⇒"; -const rAtail$1 = "⤜"; -const rBarr$1 = "⤏"; -const rHar$1 = "⥤"; -const race$1 = "∽̱"; -const racute$1 = "ŕ"; -const radic$1 = "√"; -const raemptyv$1 = "⦳"; -const rang$1 = "⟩"; -const rangd$1 = "⦒"; -const range$1 = "⦥"; -const rangle$1 = "⟩"; -const raqu$1 = "»"; -const raquo$1 = "»"; -const rarr$1 = "→"; -const rarrap$1 = "⥵"; -const rarrb$1 = "⇥"; -const rarrbfs$1 = "⤠"; -const rarrc$1 = "⤳"; -const rarrfs$1 = "⤞"; -const rarrhk$1 = "↪"; -const rarrlp$1 = "↬"; -const rarrpl$1 = "⥅"; -const rarrsim$1 = "⥴"; -const rarrtl$1 = "↣"; -const rarrw$1 = "↝"; -const ratail$1 = "⤚"; -const ratio$1 = "∶"; -const rationals$1 = "ℚ"; -const rbarr$1 = "⤍"; -const rbbrk$1 = "❳"; -const rbrace$1 = "}"; -const rbrack$1 = "]"; -const rbrke$1 = "⦌"; -const rbrksld$1 = "⦎"; -const rbrkslu$1 = "⦐"; -const rcaron$1 = "ř"; -const rcedil$1 = "ŗ"; -const rceil$1 = "⌉"; -const rcub$1 = "}"; -const rcy$1 = "р"; -const rdca$1 = "⤷"; -const rdldhar$1 = "⥩"; -const rdquo$1 = "”"; -const rdquor$1 = "”"; -const rdsh$1 = "↳"; -const real$1 = "ℜ"; -const realine$1 = "ℛ"; -const realpart$1 = "ℜ"; -const reals$1 = "ℝ"; -const rect$1 = "▭"; -const re$5 = "®"; -const reg$1 = "®"; -const rfisht$1 = "⥽"; -const rfloor$1 = "⌋"; -const rfr$1 = "𝔯"; -const rhard$1 = "⇁"; -const rharu$1 = "⇀"; -const rharul$1 = "⥬"; -const rho$1 = "ρ"; -const rhov$1 = "ϱ"; -const rightarrow$1 = "→"; -const rightarrowtail$1 = "↣"; -const rightharpoondown$1 = "⇁"; -const rightharpoonup$1 = "⇀"; -const rightleftarrows$1 = "⇄"; -const rightleftharpoons$1 = "⇌"; -const rightrightarrows$1 = "⇉"; -const rightsquigarrow$1 = "↝"; -const rightthreetimes$1 = "⋌"; -const ring$1 = "˚"; -const risingdotseq$1 = "≓"; -const rlarr$1 = "⇄"; -const rlhar$1 = "⇌"; -const rlm$1 = "‏"; -const rmoust$1 = "⎱"; -const rmoustache$1 = "⎱"; -const rnmid$1 = "⫮"; -const roang$1 = "⟭"; -const roarr$1 = "⇾"; -const robrk$1 = "⟧"; -const ropar$1 = "⦆"; -const ropf$1 = "𝕣"; -const roplus$1 = "⨮"; -const rotimes$1 = "⨵"; -const rpar$1 = ")"; -const rpargt$1 = "⦔"; -const rppolint$1 = "⨒"; -const rrarr$1 = "⇉"; -const rsaquo$1 = "›"; -const rscr$1 = "𝓇"; -const rsh$1 = "↱"; -const rsqb$1 = "]"; -const rsquo$1 = "’"; -const rsquor$1 = "’"; -const rthree$1 = "⋌"; -const rtimes$1 = "⋊"; -const rtri$1 = "▹"; -const rtrie$1 = "⊵"; -const rtrif$1 = "▸"; -const rtriltri$1 = "⧎"; -const ruluhar$1 = "⥨"; -const rx$1 = "℞"; -const sacute$1 = "ś"; -const sbquo$1 = "‚"; -const sc$1 = "≻"; -const scE$1 = "⪴"; -const scap$1 = "⪸"; -const scaron$1 = "š"; -const sccue$1 = "≽"; -const sce$1 = "⪰"; -const scedil$1 = "ş"; -const scirc$1 = "ŝ"; -const scnE$1 = "⪶"; -const scnap$1 = "⪺"; -const scnsim$1 = "⋩"; -const scpolint$1 = "⨓"; -const scsim$1 = "≿"; -const scy$1 = "с"; -const sdot$1 = "⋅"; -const sdotb$1 = "⊡"; -const sdote$1 = "⩦"; -const seArr$1 = "⇘"; -const searhk$1 = "⤥"; -const searr$1 = "↘"; -const searrow$1 = "↘"; -const sec$1 = "§"; -const sect$1 = "§"; -const semi$1 = ";"; -const seswar$1 = "⤩"; -const setminus$1 = "∖"; -const setmn$1 = "∖"; -const sext$1 = "✶"; -const sfr$1 = "𝔰"; -const sfrown$1 = "⌢"; -const sharp$1 = "♯"; -const shchcy$1 = "щ"; -const shcy$1 = "ш"; -const shortmid$1 = "∣"; -const shortparallel$1 = "∥"; -const sh$1 = "­"; -const shy$1 = "­"; -const sigma$1 = "σ"; -const sigmaf$1 = "ς"; -const sigmav$1 = "ς"; -const sim$1 = "∼"; -const simdot$1 = "⩪"; -const sime$1 = "≃"; -const simeq$1 = "≃"; -const simg$1 = "⪞"; -const simgE$1 = "⪠"; -const siml$1 = "⪝"; -const simlE$1 = "⪟"; -const simne$1 = "≆"; -const simplus$1 = "⨤"; -const simrarr$1 = "⥲"; -const slarr$1 = "←"; -const smallsetminus$1 = "∖"; -const smashp$1 = "⨳"; -const smeparsl$1 = "⧤"; -const smid$1 = "∣"; -const smile$1 = "⌣"; -const smt$1 = "⪪"; -const smte$1 = "⪬"; -const smtes$1 = "⪬︀"; -const softcy$1 = "ь"; -const sol$1 = "/"; -const solb$1 = "⧄"; -const solbar$1 = "⌿"; -const sopf$1 = "𝕤"; -const spades$1 = "♠"; -const spadesuit$1 = "♠"; -const spar$1 = "∥"; -const sqcap$1 = "⊓"; -const sqcaps$1 = "⊓︀"; -const sqcup$1 = "⊔"; -const sqcups$1 = "⊔︀"; -const sqsub$1 = "⊏"; -const sqsube$1 = "⊑"; -const sqsubset$1 = "⊏"; -const sqsubseteq$1 = "⊑"; -const sqsup$1 = "⊐"; -const sqsupe$1 = "⊒"; -const sqsupset$1 = "⊐"; -const sqsupseteq$1 = "⊒"; -const squ$1 = "□"; -const square$1 = "□"; -const squarf$1 = "▪"; -const squf$1 = "▪"; -const srarr$1 = "→"; -const sscr$1 = "𝓈"; -const ssetmn$1 = "∖"; -const ssmile$1 = "⌣"; -const sstarf$1 = "⋆"; -const star$1 = "☆"; -const starf$1 = "★"; -const straightepsilon$1 = "ϵ"; -const straightphi$1 = "ϕ"; -const strns$1 = "¯"; -const sub$1 = "⊂"; -const subE$1 = "⫅"; -const subdot$1 = "⪽"; -const sube$1 = "⊆"; -const subedot$1 = "⫃"; -const submult$1 = "⫁"; -const subnE$1 = "⫋"; -const subne$1 = "⊊"; -const subplus$1 = "⪿"; -const subrarr$1 = "⥹"; -const subset$1 = "⊂"; -const subseteq$1 = "⊆"; -const subseteqq$1 = "⫅"; -const subsetneq$1 = "⊊"; -const subsetneqq$1 = "⫋"; -const subsim$1 = "⫇"; -const subsub$1 = "⫕"; -const subsup$1 = "⫓"; -const succ$1 = "≻"; -const succapprox$1 = "⪸"; -const succcurlyeq$1 = "≽"; -const succeq$1 = "⪰"; -const succnapprox$1 = "⪺"; -const succneqq$1 = "⪶"; -const succnsim$1 = "⋩"; -const succsim$1 = "≿"; -const sum$1 = "∑"; -const sung$1 = "♪"; -const sup$1 = "⊃"; -const sup1$1 = "¹"; -const sup2$1 = "²"; -const sup3$1 = "³"; -const supE$1 = "⫆"; -const supdot$1 = "⪾"; -const supdsub$1 = "⫘"; -const supe$1 = "⊇"; -const supedot$1 = "⫄"; -const suphsol$1 = "⟉"; -const suphsub$1 = "⫗"; -const suplarr$1 = "⥻"; -const supmult$1 = "⫂"; -const supnE$1 = "⫌"; -const supne$1 = "⊋"; -const supplus$1 = "⫀"; -const supset$1 = "⊃"; -const supseteq$1 = "⊇"; -const supseteqq$1 = "⫆"; -const supsetneq$1 = "⊋"; -const supsetneqq$1 = "⫌"; -const supsim$1 = "⫈"; -const supsub$1 = "⫔"; -const supsup$1 = "⫖"; -const swArr$1 = "⇙"; -const swarhk$1 = "⤦"; -const swarr$1 = "↙"; -const swarrow$1 = "↙"; -const swnwar$1 = "⤪"; -const szli$1 = "ß"; -const szlig$1 = "ß"; -const target$1 = "⌖"; -const tau$1 = "τ"; -const tbrk$1 = "⎴"; -const tcaron$1 = "ť"; -const tcedil$1 = "ţ"; -const tcy$1 = "т"; -const tdot$1 = "⃛"; -const telrec$1 = "⌕"; -const tfr$1 = "𝔱"; -const there4$1 = "∴"; -const therefore$1 = "∴"; -const theta$1 = "θ"; -const thetasym$1 = "ϑ"; -const thetav$1 = "ϑ"; -const thickapprox$1 = "≈"; -const thicksim$1 = "∼"; -const thinsp$1 = " "; -const thkap$1 = "≈"; -const thksim$1 = "∼"; -const thor$1 = "þ"; -const thorn$1 = "þ"; -const tilde$1 = "˜"; -const time$1 = "×"; -const times$1 = "×"; -const timesb$1 = "⊠"; -const timesbar$1 = "⨱"; -const timesd$1 = "⨰"; -const tint$1 = "∭"; -const toea$1 = "⤨"; -const top$1 = "⊤"; -const topbot$1 = "⌶"; -const topcir$1 = "⫱"; -const topf$1 = "𝕥"; -const topfork$1 = "⫚"; -const tosa$1 = "⤩"; -const tprime$1 = "‴"; -const trade$1 = "™"; -const triangle$1 = "▵"; -const triangledown$1 = "▿"; -const triangleleft$1 = "◃"; -const trianglelefteq$1 = "⊴"; -const triangleq$1 = "≜"; -const triangleright$1 = "▹"; -const trianglerighteq$1 = "⊵"; -const tridot$1 = "◬"; -const trie$1 = "≜"; -const triminus$1 = "⨺"; -const triplus$1 = "⨹"; -const trisb$1 = "⧍"; -const tritime$1 = "⨻"; -const trpezium$1 = "⏢"; -const tscr$1 = "𝓉"; -const tscy$1 = "ц"; -const tshcy$1 = "ћ"; -const tstrok$1 = "ŧ"; -const twixt$1 = "≬"; -const twoheadleftarrow$1 = "↞"; -const twoheadrightarrow$1 = "↠"; -const uArr$1 = "⇑"; -const uHar$1 = "⥣"; -const uacut$1 = "ú"; -const uacute$1 = "ú"; -const uarr$1 = "↑"; -const ubrcy$1 = "ў"; -const ubreve$1 = "ŭ"; -const ucir$1 = "û"; -const ucirc$1 = "û"; -const ucy$1 = "у"; -const udarr$1 = "⇅"; -const udblac$1 = "ű"; -const udhar$1 = "⥮"; -const ufisht$1 = "⥾"; -const ufr$1 = "𝔲"; -const ugrav$1 = "ù"; -const ugrave$1 = "ù"; -const uharl$1 = "↿"; -const uharr$1 = "↾"; -const uhblk$1 = "▀"; -const ulcorn$1 = "⌜"; -const ulcorner$1 = "⌜"; -const ulcrop$1 = "⌏"; -const ultri$1 = "◸"; -const umacr$1 = "ū"; -const um$1 = "¨"; -const uml$1 = "¨"; -const uogon$1 = "ų"; -const uopf$1 = "𝕦"; -const uparrow$1 = "↑"; -const updownarrow$1 = "↕"; -const upharpoonleft$1 = "↿"; -const upharpoonright$1 = "↾"; -const uplus$1 = "⊎"; -const upsi$1 = "υ"; -const upsih$1 = "ϒ"; -const upsilon$1 = "υ"; -const upuparrows$1 = "⇈"; -const urcorn$1 = "⌝"; -const urcorner$1 = "⌝"; -const urcrop$1 = "⌎"; -const uring$1 = "ů"; -const urtri$1 = "◹"; -const uscr$1 = "𝓊"; -const utdot$1 = "⋰"; -const utilde$1 = "ũ"; -const utri$1 = "▵"; -const utrif$1 = "▴"; -const uuarr$1 = "⇈"; -const uum$1 = "ü"; -const uuml$1 = "ü"; -const uwangle$1 = "⦧"; -const vArr$1 = "⇕"; -const vBar$1 = "⫨"; -const vBarv$1 = "⫩"; -const vDash$1 = "⊨"; -const vangrt$1 = "⦜"; -const varepsilon$1 = "ϵ"; -const varkappa$1 = "ϰ"; -const varnothing$1 = "∅"; -const varphi$1 = "ϕ"; -const varpi$1 = "ϖ"; -const varpropto$1 = "∝"; -const varr$1 = "↕"; -const varrho$1 = "ϱ"; -const varsigma$1 = "ς"; -const varsubsetneq$1 = "⊊︀"; -const varsubsetneqq$1 = "⫋︀"; -const varsupsetneq$1 = "⊋︀"; -const varsupsetneqq$1 = "⫌︀"; -const vartheta$1 = "ϑ"; -const vartriangleleft$1 = "⊲"; -const vartriangleright$1 = "⊳"; -const vcy$1 = "в"; -const vdash$1 = "⊢"; -const vee$1 = "∨"; -const veebar$1 = "⊻"; -const veeeq$1 = "≚"; -const vellip$1 = "⋮"; -const verbar$1 = "|"; -const vert$1 = "|"; -const vfr$1 = "𝔳"; -const vltri$1 = "⊲"; -const vnsub$1 = "⊂⃒"; -const vnsup$1 = "⊃⃒"; -const vopf$1 = "𝕧"; -const vprop$1 = "∝"; -const vrtri$1 = "⊳"; -const vscr$1 = "𝓋"; -const vsubnE$1 = "⫋︀"; -const vsubne$1 = "⊊︀"; -const vsupnE$1 = "⫌︀"; -const vsupne$1 = "⊋︀"; -const vzigzag$1 = "⦚"; -const wcirc$1 = "ŵ"; -const wedbar$1 = "⩟"; -const wedge$1 = "∧"; -const wedgeq$1 = "≙"; -const weierp$1 = "℘"; -const wfr$1 = "𝔴"; -const wopf$1 = "𝕨"; -const wp$1 = "℘"; -const wr$1 = "≀"; -const wreath$1 = "≀"; -const wscr$1 = "𝓌"; -const xcap$1 = "⋂"; -const xcirc$1 = "◯"; -const xcup$1 = "⋃"; -const xdtri$1 = "▽"; -const xfr$1 = "𝔵"; -const xhArr$1 = "⟺"; -const xharr$1 = "⟷"; -const xi$1 = "ξ"; -const xlArr$1 = "⟸"; -const xlarr$1 = "⟵"; -const xmap$1 = "⟼"; -const xnis$1 = "⋻"; -const xodot$1 = "⨀"; -const xopf$1 = "𝕩"; -const xoplus$1 = "⨁"; -const xotime$1 = "⨂"; -const xrArr$1 = "⟹"; -const xrarr$1 = "⟶"; -const xscr$1 = "𝓍"; -const xsqcup$1 = "⨆"; -const xuplus$1 = "⨄"; -const xutri$1 = "△"; -const xvee$1 = "⋁"; -const xwedge$1 = "⋀"; -const yacut$1 = "ý"; -const yacute$1 = "ý"; -const yacy$1 = "я"; -const ycirc$1 = "ŷ"; -const ycy$1 = "ы"; -const ye$1 = "¥"; -const yen$1 = "¥"; -const yfr$1 = "𝔶"; -const yicy$1 = "ї"; -const yopf$1 = "𝕪"; -const yscr$1 = "𝓎"; -const yucy$1 = "ю"; -const yum$1 = "ÿ"; -const yuml$1 = "ÿ"; -const zacute$1 = "ź"; -const zcaron$1 = "ž"; -const zcy$1 = "з"; -const zdot$1 = "ż"; -const zeetrf$1 = "ℨ"; -const zeta$1 = "ζ"; -const zfr$1 = "𝔷"; -const zhcy$1 = "ж"; -const zigrarr$1 = "⇝"; -const zopf$1 = "𝕫"; -const zscr$1 = "𝓏"; -const zwj$1 = "‍"; -const zwnj$1 = "‌"; -var require$$0$1 = { - AEli: AEli$1, - AElig: AElig$1, - AM: AM$1, - AMP: AMP$1, - Aacut: Aacut$1, - Aacute: Aacute$1, - Abreve: Abreve$1, - Acir: Acir$1, - Acirc: Acirc$1, - Acy: Acy$1, - Afr: Afr$1, - Agrav: Agrav$1, - Agrave: Agrave$1, - Alpha: Alpha$1, - Amacr: Amacr$1, - And: And$1, - Aogon: Aogon$1, - Aopf: Aopf$1, - ApplyFunction: ApplyFunction$1, - Arin: Arin$1, - Aring: Aring$1, - Ascr: Ascr$1, - Assign: Assign$1, - Atild: Atild$1, - Atilde: Atilde$1, - Aum: Aum$1, - Auml: Auml$1, - Backslash: Backslash$1, - Barv: Barv$1, - Barwed: Barwed$1, - Bcy: Bcy$1, - Because: Because$1, - Bernoullis: Bernoullis$1, - Beta: Beta$1, - Bfr: Bfr$1, - Bopf: Bopf$1, - Breve: Breve$1, - Bscr: Bscr$1, - Bumpeq: Bumpeq$1, - CHcy: CHcy$1, - COP: COP$1, - COPY: COPY$1, - Cacute: Cacute$1, - Cap: Cap$1, - CapitalDifferentialD: CapitalDifferentialD$1, - Cayleys: Cayleys$1, - Ccaron: Ccaron$1, - Ccedi: Ccedi$1, - Ccedil: Ccedil$1, - Ccirc: Ccirc$1, - Cconint: Cconint$1, - Cdot: Cdot$1, - Cedilla: Cedilla$1, - CenterDot: CenterDot$1, - Cfr: Cfr$1, - Chi: Chi$1, - CircleDot: CircleDot$1, - CircleMinus: CircleMinus$1, - CirclePlus: CirclePlus$1, - CircleTimes: CircleTimes$1, - ClockwiseContourIntegral: ClockwiseContourIntegral$1, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote$1, - CloseCurlyQuote: CloseCurlyQuote$1, - Colon: Colon$1, - Colone: Colone$1, - Congruent: Congruent$1, - Conint: Conint$1, - ContourIntegral: ContourIntegral$1, - Copf: Copf$1, - Coproduct: Coproduct$1, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral$1, - Cross: Cross$1, - Cscr: Cscr$1, - Cup: Cup$1, - CupCap: CupCap$1, - DD: DD$1, - DDotrahd: DDotrahd$1, - DJcy: DJcy$1, - DScy: DScy$1, - DZcy: DZcy$1, - Dagger: Dagger$1, - Darr: Darr$1, - Dashv: Dashv$1, - Dcaron: Dcaron$1, - Dcy: Dcy$1, - Del: Del$1, - Delta: Delta$1, - Dfr: Dfr$1, - DiacriticalAcute: DiacriticalAcute$1, - DiacriticalDot: DiacriticalDot$1, - DiacriticalDoubleAcute: DiacriticalDoubleAcute$1, - DiacriticalGrave: DiacriticalGrave$1, - DiacriticalTilde: DiacriticalTilde$1, - Diamond: Diamond$1, - DifferentialD: DifferentialD$1, - Dopf: Dopf$1, - Dot: Dot$1, - DotDot: DotDot$1, - DotEqual: DotEqual$1, - DoubleContourIntegral: DoubleContourIntegral$1, - DoubleDot: DoubleDot$1, - DoubleDownArrow: DoubleDownArrow$1, - DoubleLeftArrow: DoubleLeftArrow$1, - DoubleLeftRightArrow: DoubleLeftRightArrow$1, - DoubleLeftTee: DoubleLeftTee$1, - DoubleLongLeftArrow: DoubleLongLeftArrow$1, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow$1, - DoubleLongRightArrow: DoubleLongRightArrow$1, - DoubleRightArrow: DoubleRightArrow$1, - DoubleRightTee: DoubleRightTee$1, - DoubleUpArrow: DoubleUpArrow$1, - DoubleUpDownArrow: DoubleUpDownArrow$1, - DoubleVerticalBar: DoubleVerticalBar$1, - DownArrow: DownArrow$1, - DownArrowBar: DownArrowBar$1, - DownArrowUpArrow: DownArrowUpArrow$1, - DownBreve: DownBreve$1, - DownLeftRightVector: DownLeftRightVector$1, - DownLeftTeeVector: DownLeftTeeVector$1, - DownLeftVector: DownLeftVector$1, - DownLeftVectorBar: DownLeftVectorBar$1, - DownRightTeeVector: DownRightTeeVector$1, - DownRightVector: DownRightVector$1, - DownRightVectorBar: DownRightVectorBar$1, - DownTee: DownTee$1, - DownTeeArrow: DownTeeArrow$1, - Downarrow: Downarrow$1, - Dscr: Dscr$1, - Dstrok: Dstrok$1, - ENG: ENG$1, - ET: ET$1, - ETH: ETH$1, - Eacut: Eacut$1, - Eacute: Eacute$1, - Ecaron: Ecaron$1, - Ecir: Ecir$1, - Ecirc: Ecirc$1, - Ecy: Ecy$1, - Edot: Edot$1, - Efr: Efr$1, - Egrav: Egrav$1, - Egrave: Egrave$1, - Element: Element$1, - Emacr: Emacr$1, - EmptySmallSquare: EmptySmallSquare$1, - EmptyVerySmallSquare: EmptyVerySmallSquare$1, - Eogon: Eogon$1, - Eopf: Eopf$1, - Epsilon: Epsilon$1, - Equal: Equal$1, - EqualTilde: EqualTilde$1, - Equilibrium: Equilibrium$1, - Escr: Escr$1, - Esim: Esim$1, - Eta: Eta$1, - Eum: Eum$1, - Euml: Euml$1, - Exists: Exists$1, - ExponentialE: ExponentialE$1, - Fcy: Fcy$1, - Ffr: Ffr$1, - FilledSmallSquare: FilledSmallSquare$1, - FilledVerySmallSquare: FilledVerySmallSquare$1, - Fopf: Fopf$1, - ForAll: ForAll$1, - Fouriertrf: Fouriertrf$1, - Fscr: Fscr$1, - GJcy: GJcy$1, - G: G$1, - GT: GT$1, - Gamma: Gamma$1, - Gammad: Gammad$1, - Gbreve: Gbreve$1, - Gcedil: Gcedil$1, - Gcirc: Gcirc$1, - Gcy: Gcy$1, - Gdot: Gdot$1, - Gfr: Gfr$1, - Gg: Gg$1, - Gopf: Gopf$1, - GreaterEqual: GreaterEqual$1, - GreaterEqualLess: GreaterEqualLess$1, - GreaterFullEqual: GreaterFullEqual$1, - GreaterGreater: GreaterGreater$1, - GreaterLess: GreaterLess$1, - GreaterSlantEqual: GreaterSlantEqual$1, - GreaterTilde: GreaterTilde$1, - Gscr: Gscr$1, - Gt: Gt$1, - HARDcy: HARDcy$1, - Hacek: Hacek$1, - Hat: Hat$1, - Hcirc: Hcirc$1, - Hfr: Hfr$1, - HilbertSpace: HilbertSpace$1, - Hopf: Hopf$1, - HorizontalLine: HorizontalLine$1, - Hscr: Hscr$1, - Hstrok: Hstrok$1, - HumpDownHump: HumpDownHump$1, - HumpEqual: HumpEqual$1, - IEcy: IEcy$1, - IJlig: IJlig$1, - IOcy: IOcy$1, - Iacut: Iacut$1, - Iacute: Iacute$1, - Icir: Icir$1, - Icirc: Icirc$1, - Icy: Icy$1, - Idot: Idot$1, - Ifr: Ifr$1, - Igrav: Igrav$1, - Igrave: Igrave$1, - Im: Im$1, - Imacr: Imacr$1, - ImaginaryI: ImaginaryI$1, - Implies: Implies$1, - Int: Int$1, - Integral: Integral$1, - Intersection: Intersection$1, - InvisibleComma: InvisibleComma$1, - InvisibleTimes: InvisibleTimes$1, - Iogon: Iogon$1, - Iopf: Iopf$1, - Iota: Iota$1, - Iscr: Iscr$1, - Itilde: Itilde$1, - Iukcy: Iukcy$1, - Ium: Ium$1, - Iuml: Iuml$1, - Jcirc: Jcirc$1, - Jcy: Jcy$1, - Jfr: Jfr$1, - Jopf: Jopf$1, - Jscr: Jscr$1, - Jsercy: Jsercy$1, - Jukcy: Jukcy$1, - KHcy: KHcy$1, - KJcy: KJcy$1, - Kappa: Kappa$1, - Kcedil: Kcedil$1, - Kcy: Kcy$1, - Kfr: Kfr$1, - Kopf: Kopf$1, - Kscr: Kscr$1, - LJcy: LJcy$1, - L: L$1, - LT: LT$1, - Lacute: Lacute$1, - Lambda: Lambda$1, - Lang: Lang$1, - Laplacetrf: Laplacetrf$1, - Larr: Larr$1, - Lcaron: Lcaron$1, - Lcedil: Lcedil$1, - Lcy: Lcy$1, - LeftAngleBracket: LeftAngleBracket$1, - LeftArrow: LeftArrow$1, - LeftArrowBar: LeftArrowBar$1, - LeftArrowRightArrow: LeftArrowRightArrow$1, - LeftCeiling: LeftCeiling$1, - LeftDoubleBracket: LeftDoubleBracket$1, - LeftDownTeeVector: LeftDownTeeVector$1, - LeftDownVector: LeftDownVector$1, - LeftDownVectorBar: LeftDownVectorBar$1, - LeftFloor: LeftFloor$1, - LeftRightArrow: LeftRightArrow$1, - LeftRightVector: LeftRightVector$1, - LeftTee: LeftTee$1, - LeftTeeArrow: LeftTeeArrow$1, - LeftTeeVector: LeftTeeVector$1, - LeftTriangle: LeftTriangle$1, - LeftTriangleBar: LeftTriangleBar$1, - LeftTriangleEqual: LeftTriangleEqual$1, - LeftUpDownVector: LeftUpDownVector$1, - LeftUpTeeVector: LeftUpTeeVector$1, - LeftUpVector: LeftUpVector$1, - LeftUpVectorBar: LeftUpVectorBar$1, - LeftVector: LeftVector$1, - LeftVectorBar: LeftVectorBar$1, - Leftarrow: Leftarrow$1, - Leftrightarrow: Leftrightarrow$1, - LessEqualGreater: LessEqualGreater$1, - LessFullEqual: LessFullEqual$1, - LessGreater: LessGreater$1, - LessLess: LessLess$1, - LessSlantEqual: LessSlantEqual$1, - LessTilde: LessTilde$1, - Lfr: Lfr$1, - Ll: Ll$1, - Lleftarrow: Lleftarrow$1, - Lmidot: Lmidot$1, - LongLeftArrow: LongLeftArrow$1, - LongLeftRightArrow: LongLeftRightArrow$1, - LongRightArrow: LongRightArrow$1, - Longleftarrow: Longleftarrow$1, - Longleftrightarrow: Longleftrightarrow$1, - Longrightarrow: Longrightarrow$1, - Lopf: Lopf$1, - LowerLeftArrow: LowerLeftArrow$1, - LowerRightArrow: LowerRightArrow$1, - Lscr: Lscr$1, - Lsh: Lsh$1, - Lstrok: Lstrok$1, - Lt: Lt$1, - "Map": "⤅", - Mcy: Mcy$1, - MediumSpace: MediumSpace$1, - Mellintrf: Mellintrf$1, - Mfr: Mfr$1, - MinusPlus: MinusPlus$1, - Mopf: Mopf$1, - Mscr: Mscr$1, - Mu: Mu$1, - NJcy: NJcy$1, - Nacute: Nacute$1, - Ncaron: Ncaron$1, - Ncedil: Ncedil$1, - Ncy: Ncy$1, - NegativeMediumSpace: NegativeMediumSpace$1, - NegativeThickSpace: NegativeThickSpace$1, - NegativeThinSpace: NegativeThinSpace$1, - NegativeVeryThinSpace: NegativeVeryThinSpace$1, - NestedGreaterGreater: NestedGreaterGreater$1, - NestedLessLess: NestedLessLess$1, - NewLine: NewLine$1, - Nfr: Nfr$1, - NoBreak: NoBreak$1, - NonBreakingSpace: NonBreakingSpace$1, - Nopf: Nopf$1, - Not: Not$1, - NotCongruent: NotCongruent$1, - NotCupCap: NotCupCap$1, - NotDoubleVerticalBar: NotDoubleVerticalBar$1, - NotElement: NotElement$1, - NotEqual: NotEqual$1, - NotEqualTilde: NotEqualTilde$1, - NotExists: NotExists$1, - NotGreater: NotGreater$1, - NotGreaterEqual: NotGreaterEqual$1, - NotGreaterFullEqual: NotGreaterFullEqual$1, - NotGreaterGreater: NotGreaterGreater$1, - NotGreaterLess: NotGreaterLess$1, - NotGreaterSlantEqual: NotGreaterSlantEqual$1, - NotGreaterTilde: NotGreaterTilde$1, - NotHumpDownHump: NotHumpDownHump$1, - NotHumpEqual: NotHumpEqual$1, - NotLeftTriangle: NotLeftTriangle$1, - NotLeftTriangleBar: NotLeftTriangleBar$1, - NotLeftTriangleEqual: NotLeftTriangleEqual$1, - NotLess: NotLess$1, - NotLessEqual: NotLessEqual$1, - NotLessGreater: NotLessGreater$1, - NotLessLess: NotLessLess$1, - NotLessSlantEqual: NotLessSlantEqual$1, - NotLessTilde: NotLessTilde$1, - NotNestedGreaterGreater: NotNestedGreaterGreater$1, - NotNestedLessLess: NotNestedLessLess$1, - NotPrecedes: NotPrecedes$1, - NotPrecedesEqual: NotPrecedesEqual$1, - NotPrecedesSlantEqual: NotPrecedesSlantEqual$1, - NotReverseElement: NotReverseElement$1, - NotRightTriangle: NotRightTriangle$1, - NotRightTriangleBar: NotRightTriangleBar$1, - NotRightTriangleEqual: NotRightTriangleEqual$1, - NotSquareSubset: NotSquareSubset$1, - NotSquareSubsetEqual: NotSquareSubsetEqual$1, - NotSquareSuperset: NotSquareSuperset$1, - NotSquareSupersetEqual: NotSquareSupersetEqual$1, - NotSubset: NotSubset$1, - NotSubsetEqual: NotSubsetEqual$1, - NotSucceeds: NotSucceeds$1, - NotSucceedsEqual: NotSucceedsEqual$1, - NotSucceedsSlantEqual: NotSucceedsSlantEqual$1, - NotSucceedsTilde: NotSucceedsTilde$1, - NotSuperset: NotSuperset$1, - NotSupersetEqual: NotSupersetEqual$1, - NotTilde: NotTilde$1, - NotTildeEqual: NotTildeEqual$1, - NotTildeFullEqual: NotTildeFullEqual$1, - NotTildeTilde: NotTildeTilde$1, - NotVerticalBar: NotVerticalBar$1, - Nscr: Nscr$1, - Ntild: Ntild$1, - Ntilde: Ntilde$1, - Nu: Nu$1, - OElig: OElig$1, - Oacut: Oacut$1, - Oacute: Oacute$1, - Ocir: Ocir$1, - Ocirc: Ocirc$1, - Ocy: Ocy$1, - Odblac: Odblac$1, - Ofr: Ofr$1, - Ograv: Ograv$1, - Ograve: Ograve$1, - Omacr: Omacr$1, - Omega: Omega$1, - Omicron: Omicron$1, - Oopf: Oopf$1, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote$1, - OpenCurlyQuote: OpenCurlyQuote$1, - Or: Or$1, - Oscr: Oscr$1, - Oslas: Oslas$1, - Oslash: Oslash$1, - Otild: Otild$1, - Otilde: Otilde$1, - Otimes: Otimes$1, - Oum: Oum$1, - Ouml: Ouml$1, - OverBar: OverBar$1, - OverBrace: OverBrace$1, - OverBracket: OverBracket$1, - OverParenthesis: OverParenthesis$1, - PartialD: PartialD$1, - Pcy: Pcy$1, - Pfr: Pfr$1, - Phi: Phi$1, - Pi: Pi$1, - PlusMinus: PlusMinus$1, - Poincareplane: Poincareplane$1, - Popf: Popf$1, - Pr: Pr$1, - Precedes: Precedes$1, - PrecedesEqual: PrecedesEqual$1, - PrecedesSlantEqual: PrecedesSlantEqual$1, - PrecedesTilde: PrecedesTilde$1, - Prime: Prime$1, - Product: Product$1, - Proportion: Proportion$1, - Proportional: Proportional$1, - Pscr: Pscr$1, - Psi: Psi$1, - QUO: QUO$1, - QUOT: QUOT$1, - Qfr: Qfr$1, - Qopf: Qopf$1, - Qscr: Qscr$1, - RBarr: RBarr$1, - RE: RE$1, - REG: REG$1, - Racute: Racute$1, - Rang: Rang$1, - Rarr: Rarr$1, - Rarrtl: Rarrtl$1, - Rcaron: Rcaron$1, - Rcedil: Rcedil$1, - Rcy: Rcy$1, - Re: Re$1, - ReverseElement: ReverseElement$1, - ReverseEquilibrium: ReverseEquilibrium$1, - ReverseUpEquilibrium: ReverseUpEquilibrium$1, - Rfr: Rfr$1, - Rho: Rho$1, - RightAngleBracket: RightAngleBracket$1, - RightArrow: RightArrow$1, - RightArrowBar: RightArrowBar$1, - RightArrowLeftArrow: RightArrowLeftArrow$1, - RightCeiling: RightCeiling$1, - RightDoubleBracket: RightDoubleBracket$1, - RightDownTeeVector: RightDownTeeVector$1, - RightDownVector: RightDownVector$1, - RightDownVectorBar: RightDownVectorBar$1, - RightFloor: RightFloor$1, - RightTee: RightTee$1, - RightTeeArrow: RightTeeArrow$1, - RightTeeVector: RightTeeVector$1, - RightTriangle: RightTriangle$1, - RightTriangleBar: RightTriangleBar$1, - RightTriangleEqual: RightTriangleEqual$1, - RightUpDownVector: RightUpDownVector$1, - RightUpTeeVector: RightUpTeeVector$1, - RightUpVector: RightUpVector$1, - RightUpVectorBar: RightUpVectorBar$1, - RightVector: RightVector$1, - RightVectorBar: RightVectorBar$1, - Rightarrow: Rightarrow$1, - Ropf: Ropf$1, - RoundImplies: RoundImplies$1, - Rrightarrow: Rrightarrow$1, - Rscr: Rscr$1, - Rsh: Rsh$1, - RuleDelayed: RuleDelayed$1, - SHCHcy: SHCHcy$1, - SHcy: SHcy$1, - SOFTcy: SOFTcy$1, - Sacute: Sacute$1, - Sc: Sc$1, - Scaron: Scaron$1, - Scedil: Scedil$1, - Scirc: Scirc$1, - Scy: Scy$1, - Sfr: Sfr$1, - ShortDownArrow: ShortDownArrow$1, - ShortLeftArrow: ShortLeftArrow$1, - ShortRightArrow: ShortRightArrow$1, - ShortUpArrow: ShortUpArrow$1, - Sigma: Sigma$1, - SmallCircle: SmallCircle$1, - Sopf: Sopf$1, - Sqrt: Sqrt$1, - Square: Square$1, - SquareIntersection: SquareIntersection$1, - SquareSubset: SquareSubset$1, - SquareSubsetEqual: SquareSubsetEqual$1, - SquareSuperset: SquareSuperset$1, - SquareSupersetEqual: SquareSupersetEqual$1, - SquareUnion: SquareUnion$1, - Sscr: Sscr$1, - Star: Star$1, - Sub: Sub$1, - Subset: Subset$1, - SubsetEqual: SubsetEqual$1, - Succeeds: Succeeds$1, - SucceedsEqual: SucceedsEqual$1, - SucceedsSlantEqual: SucceedsSlantEqual$1, - SucceedsTilde: SucceedsTilde$1, - SuchThat: SuchThat$1, - Sum: Sum$1, - Sup: Sup$1, - Superset: Superset$1, - SupersetEqual: SupersetEqual$1, - Supset: Supset$1, - THOR: THOR$1, - THORN: THORN$1, - TRADE: TRADE$1, - TSHcy: TSHcy$1, - TScy: TScy$1, - Tab: Tab$1, - Tau: Tau$1, - Tcaron: Tcaron$1, - Tcedil: Tcedil$1, - Tcy: Tcy$1, - Tfr: Tfr$1, - Therefore: Therefore$1, - Theta: Theta$1, - ThickSpace: ThickSpace$1, - ThinSpace: ThinSpace$1, - Tilde: Tilde$1, - TildeEqual: TildeEqual$1, - TildeFullEqual: TildeFullEqual$1, - TildeTilde: TildeTilde$1, - Topf: Topf$1, - TripleDot: TripleDot$1, - Tscr: Tscr$1, - Tstrok: Tstrok$1, - Uacut: Uacut$1, - Uacute: Uacute$1, - Uarr: Uarr$1, - Uarrocir: Uarrocir$1, - Ubrcy: Ubrcy$1, - Ubreve: Ubreve$1, - Ucir: Ucir$1, - Ucirc: Ucirc$1, - Ucy: Ucy$1, - Udblac: Udblac$1, - Ufr: Ufr$1, - Ugrav: Ugrav$1, - Ugrave: Ugrave$1, - Umacr: Umacr$1, - UnderBar: UnderBar$1, - UnderBrace: UnderBrace$1, - UnderBracket: UnderBracket$1, - UnderParenthesis: UnderParenthesis$1, - Union: Union$1, - UnionPlus: UnionPlus$1, - Uogon: Uogon$1, - Uopf: Uopf$1, - UpArrow: UpArrow$1, - UpArrowBar: UpArrowBar$1, - UpArrowDownArrow: UpArrowDownArrow$1, - UpDownArrow: UpDownArrow$1, - UpEquilibrium: UpEquilibrium$1, - UpTee: UpTee$1, - UpTeeArrow: UpTeeArrow$1, - Uparrow: Uparrow$1, - Updownarrow: Updownarrow$1, - UpperLeftArrow: UpperLeftArrow$1, - UpperRightArrow: UpperRightArrow$1, - Upsi: Upsi$1, - Upsilon: Upsilon$1, - Uring: Uring$1, - Uscr: Uscr$1, - Utilde: Utilde$1, - Uum: Uum$1, - Uuml: Uuml$1, - VDash: VDash$1, - Vbar: Vbar$1, - Vcy: Vcy$1, - Vdash: Vdash$1, - Vdashl: Vdashl$1, - Vee: Vee$1, - Verbar: Verbar$1, - Vert: Vert$1, - VerticalBar: VerticalBar$1, - VerticalLine: VerticalLine$1, - VerticalSeparator: VerticalSeparator$1, - VerticalTilde: VerticalTilde$1, - VeryThinSpace: VeryThinSpace$1, - Vfr: Vfr$1, - Vopf: Vopf$1, - Vscr: Vscr$1, - Vvdash: Vvdash$1, - Wcirc: Wcirc$1, - Wedge: Wedge$1, - Wfr: Wfr$1, - Wopf: Wopf$1, - Wscr: Wscr$1, - Xfr: Xfr$1, - Xi: Xi$1, - Xopf: Xopf$1, - Xscr: Xscr$1, - YAcy: YAcy$1, - YIcy: YIcy$1, - YUcy: YUcy$1, - Yacut: Yacut$1, - Yacute: Yacute$1, - Ycirc: Ycirc$1, - Ycy: Ycy$1, - Yfr: Yfr$1, - Yopf: Yopf$1, - Yscr: Yscr$1, - Yuml: Yuml$1, - ZHcy: ZHcy$1, - Zacute: Zacute$1, - Zcaron: Zcaron$1, - Zcy: Zcy$1, - Zdot: Zdot$1, - ZeroWidthSpace: ZeroWidthSpace$1, - Zeta: Zeta$1, - Zfr: Zfr$1, - Zopf: Zopf$1, - Zscr: Zscr$1, - aacut: aacut$1, - aacute: aacute$1, - abreve: abreve$1, - ac: ac$1, - acE: acE$1, - acd: acd$1, - acir: acir$1, - acirc: acirc$1, - acut: acut$1, - acute: acute$1, - acy: acy$1, - aeli: aeli$1, - aelig: aelig$1, - af: af$1, - afr: afr$1, - agrav: agrav$1, - agrave: agrave$1, - alefsym: alefsym$1, - aleph: aleph$1, - alpha: alpha$1, - amacr: amacr$1, - amalg: amalg$1, - am: am$1, - amp: amp$1, - and: and$1, - andand: andand$1, - andd: andd$1, - andslope: andslope$1, - andv: andv$1, - ang: ang$1, - ange: ange$1, - angle: angle$1, - angmsd: angmsd$1, - angmsdaa: angmsdaa$1, - angmsdab: angmsdab$1, - angmsdac: angmsdac$1, - angmsdad: angmsdad$1, - angmsdae: angmsdae$1, - angmsdaf: angmsdaf$1, - angmsdag: angmsdag$1, - angmsdah: angmsdah$1, - angrt: angrt$1, - angrtvb: angrtvb$1, - angrtvbd: angrtvbd$1, - angsph: angsph$1, - angst: angst$1, - angzarr: angzarr$1, - aogon: aogon$1, - aopf: aopf$1, - ap: ap$1, - apE: apE$1, - apacir: apacir$1, - ape: ape$1, - apid: apid$1, - apos: apos$1, - approx: approx$1, - approxeq: approxeq$1, - arin: arin$1, - aring: aring$1, - ascr: ascr$1, - ast: ast$1, - asymp: asymp$1, - asympeq: asympeq$1, - atild: atild$1, - atilde: atilde$1, - aum: aum$1, - auml: auml$1, - awconint: awconint$1, - awint: awint$1, - bNot: bNot$1, - backcong: backcong$1, - backepsilon: backepsilon$1, - backprime: backprime$1, - backsim: backsim$1, - backsimeq: backsimeq$1, - barvee: barvee$1, - barwed: barwed$1, - barwedge: barwedge$1, - bbrk: bbrk$1, - bbrktbrk: bbrktbrk$1, - bcong: bcong$1, - bcy: bcy$1, - bdquo: bdquo$1, - becaus: becaus$1, - because: because$1, - bemptyv: bemptyv$1, - bepsi: bepsi$1, - bernou: bernou$1, - beta: beta$1, - beth: beth$1, - between: between$1, - bfr: bfr$1, - bigcap: bigcap$1, - bigcirc: bigcirc$1, - bigcup: bigcup$1, - bigodot: bigodot$1, - bigoplus: bigoplus$1, - bigotimes: bigotimes$1, - bigsqcup: bigsqcup$1, - bigstar: bigstar$1, - bigtriangledown: bigtriangledown$1, - bigtriangleup: bigtriangleup$1, - biguplus: biguplus$1, - bigvee: bigvee$1, - bigwedge: bigwedge$1, - bkarow: bkarow$1, - blacklozenge: blacklozenge$1, - blacksquare: blacksquare$1, - blacktriangle: blacktriangle$1, - blacktriangledown: blacktriangledown$1, - blacktriangleleft: blacktriangleleft$1, - blacktriangleright: blacktriangleright$1, - blank: blank$1, - blk12: blk12$1, - blk14: blk14$1, - blk34: blk34$1, - block: block$1, - bne: bne$1, - bnequiv: bnequiv$1, - bnot: bnot$1, - bopf: bopf$1, - bot: bot$1, - bottom: bottom$1, - bowtie: bowtie$1, - boxDL: boxDL$1, - boxDR: boxDR$1, - boxDl: boxDl$1, - boxDr: boxDr$1, - boxH: boxH$1, - boxHD: boxHD$1, - boxHU: boxHU$1, - boxHd: boxHd$1, - boxHu: boxHu$1, - boxUL: boxUL$1, - boxUR: boxUR$1, - boxUl: boxUl$1, - boxUr: boxUr$1, - boxV: boxV$1, - boxVH: boxVH$1, - boxVL: boxVL$1, - boxVR: boxVR$1, - boxVh: boxVh$1, - boxVl: boxVl$1, - boxVr: boxVr$1, - boxbox: boxbox$1, - boxdL: boxdL$1, - boxdR: boxdR$1, - boxdl: boxdl$1, - boxdr: boxdr$1, - boxh: boxh$1, - boxhD: boxhD$1, - boxhU: boxhU$1, - boxhd: boxhd$1, - boxhu: boxhu$1, - boxminus: boxminus$1, - boxplus: boxplus$1, - boxtimes: boxtimes$1, - boxuL: boxuL$1, - boxuR: boxuR$1, - boxul: boxul$1, - boxur: boxur$1, - boxv: boxv$1, - boxvH: boxvH$1, - boxvL: boxvL$1, - boxvR: boxvR$1, - boxvh: boxvh$1, - boxvl: boxvl$1, - boxvr: boxvr$1, - bprime: bprime$1, - breve: breve$1, - brvba: brvba$1, - brvbar: brvbar$1, - bscr: bscr$1, - bsemi: bsemi$1, - bsim: bsim$1, - bsime: bsime$1, - bsol: bsol$1, - bsolb: bsolb$1, - bsolhsub: bsolhsub$1, - bull: bull$1, - bullet: bullet$1, - bump: bump$1, - bumpE: bumpE$1, - bumpe: bumpe$1, - bumpeq: bumpeq$1, - cacute: cacute$1, - cap: cap$1, - capand: capand$1, - capbrcup: capbrcup$1, - capcap: capcap$1, - capcup: capcup$1, - capdot: capdot$1, - caps: caps$1, - caret: caret$1, - caron: caron$1, - ccaps: ccaps$1, - ccaron: ccaron$1, - ccedi: ccedi$1, - ccedil: ccedil$1, - ccirc: ccirc$1, - ccups: ccups$1, - ccupssm: ccupssm$1, - cdot: cdot$1, - cedi: cedi$1, - cedil: cedil$1, - cemptyv: cemptyv$1, - cen: cen$1, - cent: cent$1, - centerdot: centerdot$1, - cfr: cfr$1, - chcy: chcy$1, - check: check$2, - checkmark: checkmark$1, - chi: chi$1, - cir: cir$1, - cirE: cirE$1, - circ: circ$1, - circeq: circeq$1, - circlearrowleft: circlearrowleft$1, - circlearrowright: circlearrowright$1, - circledR: circledR$1, - circledS: circledS$1, - circledast: circledast$1, - circledcirc: circledcirc$1, - circleddash: circleddash$1, - cire: cire$1, - cirfnint: cirfnint$1, - cirmid: cirmid$1, - cirscir: cirscir$1, - clubs: clubs$1, - clubsuit: clubsuit$1, - colon: colon$1, - colone: colone$1, - coloneq: coloneq$1, - comma: comma$1, - commat: commat$1, - comp: comp$1, - compfn: compfn$1, - complement: complement$1, - complexes: complexes$1, - cong: cong$1, - congdot: congdot$1, - conint: conint$1, - copf: copf$1, - coprod: coprod$1, - cop: cop$1, - copy: copy$1, - copysr: copysr$1, - crarr: crarr$1, - cross: cross$1, - cscr: cscr$1, - csub: csub$1, - csube: csube$1, - csup: csup$1, - csupe: csupe$1, - ctdot: ctdot$1, - cudarrl: cudarrl$1, - cudarrr: cudarrr$1, - cuepr: cuepr$1, - cuesc: cuesc$1, - cularr: cularr$1, - cularrp: cularrp$1, - cup: cup$1, - cupbrcap: cupbrcap$1, - cupcap: cupcap$1, - cupcup: cupcup$1, - cupdot: cupdot$1, - cupor: cupor$1, - cups: cups$1, - curarr: curarr$1, - curarrm: curarrm$1, - curlyeqprec: curlyeqprec$1, - curlyeqsucc: curlyeqsucc$1, - curlyvee: curlyvee$1, - curlywedge: curlywedge$1, - curre: curre$1, - curren: curren$1, - curvearrowleft: curvearrowleft$1, - curvearrowright: curvearrowright$1, - cuvee: cuvee$1, - cuwed: cuwed$1, - cwconint: cwconint$1, - cwint: cwint$1, - cylcty: cylcty$1, - dArr: dArr$1, - dHar: dHar$1, - dagger: dagger$1, - daleth: daleth$1, - darr: darr$1, - dash: dash$1, - dashv: dashv$1, - dbkarow: dbkarow$1, - dblac: dblac$1, - dcaron: dcaron$1, - dcy: dcy$1, - dd: dd$1, - ddagger: ddagger$1, - ddarr: ddarr$1, - ddotseq: ddotseq$1, - de: de$1, - deg: deg$1, - delta: delta$1, - demptyv: demptyv$1, - dfisht: dfisht$1, - dfr: dfr$1, - dharl: dharl$1, - dharr: dharr$1, - diam: diam$1, - diamond: diamond$1, - diamondsuit: diamondsuit$1, - diams: diams$1, - die: die$1, - digamma: digamma$1, - disin: disin$1, - div: div$1, - divid: divid$1, - divide: divide$1, - divideontimes: divideontimes$1, - divonx: divonx$1, - djcy: djcy$1, - dlcorn: dlcorn$1, - dlcrop: dlcrop$1, - dollar: dollar$1, - dopf: dopf$1, - dot: dot$1, - doteq: doteq$1, - doteqdot: doteqdot$1, - dotminus: dotminus$1, - dotplus: dotplus$1, - dotsquare: dotsquare$1, - doublebarwedge: doublebarwedge$1, - downarrow: downarrow$1, - downdownarrows: downdownarrows$1, - downharpoonleft: downharpoonleft$1, - downharpoonright: downharpoonright$1, - drbkarow: drbkarow$1, - drcorn: drcorn$1, - drcrop: drcrop$1, - dscr: dscr$1, - dscy: dscy$1, - dsol: dsol$1, - dstrok: dstrok$1, - dtdot: dtdot$1, - dtri: dtri$1, - dtrif: dtrif$1, - duarr: duarr$1, - duhar: duhar$1, - dwangle: dwangle$1, - dzcy: dzcy$1, - dzigrarr: dzigrarr$1, - eDDot: eDDot$1, - eDot: eDot$1, - eacut: eacut$1, - eacute: eacute$1, - easter: easter$1, - ecaron: ecaron$1, - ecir: ecir$1, - ecirc: ecirc$1, - ecolon: ecolon$1, - ecy: ecy$1, - edot: edot$1, - ee: ee$1, - efDot: efDot$1, - efr: efr$1, - eg: eg$1, - egrav: egrav$1, - egrave: egrave$1, - egs: egs$1, - egsdot: egsdot$1, - el: el$1, - elinters: elinters$1, - ell: ell$1, - els: els$1, - elsdot: elsdot$1, - emacr: emacr$1, - empty: empty$1, - emptyset: emptyset$1, - emptyv: emptyv$1, - emsp13: emsp13$1, - emsp14: emsp14$1, - emsp: emsp$1, - eng: eng$1, - ensp: ensp$1, - eogon: eogon$1, - eopf: eopf$1, - epar: epar$1, - eparsl: eparsl$1, - eplus: eplus$1, - epsi: epsi$1, - epsilon: epsilon$1, - epsiv: epsiv$1, - eqcirc: eqcirc$1, - eqcolon: eqcolon$1, - eqsim: eqsim$1, - eqslantgtr: eqslantgtr$1, - eqslantless: eqslantless$1, - equals: equals$1, - equest: equest$1, - equiv: equiv$1, - equivDD: equivDD$1, - eqvparsl: eqvparsl$1, - erDot: erDot$1, - erarr: erarr$1, - escr: escr$1, - esdot: esdot$1, - esim: esim$1, - eta: eta$1, - et: et$1, - eth: eth$1, - eum: eum$1, - euml: euml$1, - euro: euro$1, - excl: excl$1, - exist: exist$1, - expectation: expectation$1, - exponentiale: exponentiale$1, - fallingdotseq: fallingdotseq$1, - fcy: fcy$1, - female: female$1, - ffilig: ffilig$1, - fflig: fflig$1, - ffllig: ffllig$1, - ffr: ffr$1, - filig: filig$1, - fjlig: fjlig$1, - flat: flat$1, - fllig: fllig$1, - fltns: fltns$1, - fnof: fnof$1, - fopf: fopf$1, - forall: forall$1, - fork: fork$1, - forkv: forkv$1, - fpartint: fpartint$1, - frac1: frac1$1, - frac12: frac12$1, - frac13: frac13$1, - frac14: frac14$1, - frac15: frac15$1, - frac16: frac16$1, - frac18: frac18$1, - frac23: frac23$1, - frac25: frac25$1, - frac3: frac3$1, - frac34: frac34$1, - frac35: frac35$1, - frac38: frac38$1, - frac45: frac45$1, - frac56: frac56$1, - frac58: frac58$1, - frac78: frac78$1, - frasl: frasl$1, - frown: frown$1, - fscr: fscr$1, - gE: gE$1, - gEl: gEl$1, - gacute: gacute$1, - gamma: gamma$1, - gammad: gammad$1, - gap: gap$1, - gbreve: gbreve$1, - gcirc: gcirc$1, - gcy: gcy$1, - gdot: gdot$1, - ge: ge$1, - gel: gel$1, - geq: geq$1, - geqq: geqq$1, - geqslant: geqslant$1, - ges: ges$1, - gescc: gescc$1, - gesdot: gesdot$1, - gesdoto: gesdoto$1, - gesdotol: gesdotol$1, - gesl: gesl$1, - gesles: gesles$1, - gfr: gfr$1, - gg: gg$1, - ggg: ggg$1, - gimel: gimel$1, - gjcy: gjcy$1, - gl: gl$1, - glE: glE$1, - gla: gla$1, - glj: glj$1, - gnE: gnE$1, - gnap: gnap$1, - gnapprox: gnapprox$1, - gne: gne$1, - gneq: gneq$1, - gneqq: gneqq$1, - gnsim: gnsim$1, - gopf: gopf$1, - grave: grave$1, - gscr: gscr$1, - gsim: gsim$1, - gsime: gsime$1, - gsiml: gsiml$1, - g: g$1, - gt: gt$1, - gtcc: gtcc$1, - gtcir: gtcir$1, - gtdot: gtdot$1, - gtlPar: gtlPar$1, - gtquest: gtquest$1, - gtrapprox: gtrapprox$1, - gtrarr: gtrarr$1, - gtrdot: gtrdot$1, - gtreqless: gtreqless$1, - gtreqqless: gtreqqless$1, - gtrless: gtrless$1, - gtrsim: gtrsim$1, - gvertneqq: gvertneqq$1, - gvnE: gvnE$1, - hArr: hArr$1, - hairsp: hairsp$1, - half: half$1, - hamilt: hamilt$1, - hardcy: hardcy$1, - harr: harr$1, - harrcir: harrcir$1, - harrw: harrw$1, - hbar: hbar$1, - hcirc: hcirc$1, - hearts: hearts$1, - heartsuit: heartsuit$1, - hellip: hellip$1, - hercon: hercon$1, - hfr: hfr$1, - hksearow: hksearow$1, - hkswarow: hkswarow$1, - hoarr: hoarr$1, - homtht: homtht$1, - hookleftarrow: hookleftarrow$1, - hookrightarrow: hookrightarrow$1, - hopf: hopf$1, - horbar: horbar$1, - hscr: hscr$1, - hslash: hslash$1, - hstrok: hstrok$1, - hybull: hybull$1, - hyphen: hyphen$1, - iacut: iacut$1, - iacute: iacute$1, - ic: ic$1, - icir: icir$1, - icirc: icirc$1, - icy: icy$1, - iecy: iecy$1, - iexc: iexc$1, - iexcl: iexcl$1, - iff: iff$1, - ifr: ifr$1, - igrav: igrav$1, - igrave: igrave$1, - ii: ii$1, - iiiint: iiiint$1, - iiint: iiint$1, - iinfin: iinfin$1, - iiota: iiota$1, - ijlig: ijlig$1, - imacr: imacr$1, - image: image$2, - imagline: imagline$1, - imagpart: imagpart$1, - imath: imath$1, - imof: imof$1, - imped: imped$1, - "in": "∈", - incare: incare$1, - infin: infin$1, - infintie: infintie$1, - inodot: inodot$1, - int: int$2, - intcal: intcal$1, - integers: integers$1, - intercal: intercal$1, - intlarhk: intlarhk$1, - intprod: intprod$1, - iocy: iocy$1, - iogon: iogon$1, - iopf: iopf$1, - iota: iota$1, - iprod: iprod$1, - iques: iques$1, - iquest: iquest$1, - iscr: iscr$1, - isin: isin$1, - isinE: isinE$1, - isindot: isindot$1, - isins: isins$1, - isinsv: isinsv$1, - isinv: isinv$1, - it: it$1, - itilde: itilde$1, - iukcy: iukcy$1, - ium: ium$1, - iuml: iuml$1, - jcirc: jcirc$1, - jcy: jcy$1, - jfr: jfr$1, - jmath: jmath$1, - jopf: jopf$1, - jscr: jscr$1, - jsercy: jsercy$1, - jukcy: jukcy$1, - kappa: kappa$1, - kappav: kappav$1, - kcedil: kcedil$1, - kcy: kcy$1, - kfr: kfr$1, - kgreen: kgreen$1, - khcy: khcy$1, - kjcy: kjcy$1, - kopf: kopf$1, - kscr: kscr$1, - lAarr: lAarr$1, - lArr: lArr$1, - lAtail: lAtail$1, - lBarr: lBarr$1, - lE: lE$1, - lEg: lEg$1, - lHar: lHar$1, - lacute: lacute$1, - laemptyv: laemptyv$1, - lagran: lagran$1, - lambda: lambda$1, - lang: lang$1, - langd: langd$1, - langle: langle$1, - lap: lap$1, - laqu: laqu$1, - laquo: laquo$1, - larr: larr$1, - larrb: larrb$1, - larrbfs: larrbfs$1, - larrfs: larrfs$1, - larrhk: larrhk$1, - larrlp: larrlp$1, - larrpl: larrpl$1, - larrsim: larrsim$1, - larrtl: larrtl$1, - lat: lat$1, - latail: latail$1, - late: late$1, - lates: lates$1, - lbarr: lbarr$1, - lbbrk: lbbrk$1, - lbrace: lbrace$1, - lbrack: lbrack$1, - lbrke: lbrke$1, - lbrksld: lbrksld$1, - lbrkslu: lbrkslu$1, - lcaron: lcaron$1, - lcedil: lcedil$1, - lceil: lceil$1, - lcub: lcub$1, - lcy: lcy$1, - ldca: ldca$1, - ldquo: ldquo$1, - ldquor: ldquor$1, - ldrdhar: ldrdhar$1, - ldrushar: ldrushar$1, - ldsh: ldsh$1, - le: le$1, - leftarrow: leftarrow$1, - leftarrowtail: leftarrowtail$1, - leftharpoondown: leftharpoondown$1, - leftharpoonup: leftharpoonup$1, - leftleftarrows: leftleftarrows$1, - leftrightarrow: leftrightarrow$1, - leftrightarrows: leftrightarrows$1, - leftrightharpoons: leftrightharpoons$1, - leftrightsquigarrow: leftrightsquigarrow$1, - leftthreetimes: leftthreetimes$1, - leg: leg$1, - leq: leq$1, - leqq: leqq$1, - leqslant: leqslant$1, - les: les$1, - lescc: lescc$1, - lesdot: lesdot$1, - lesdoto: lesdoto$1, - lesdotor: lesdotor$1, - lesg: lesg$1, - lesges: lesges$1, - lessapprox: lessapprox$1, - lessdot: lessdot$1, - lesseqgtr: lesseqgtr$1, - lesseqqgtr: lesseqqgtr$1, - lessgtr: lessgtr$1, - lesssim: lesssim$1, - lfisht: lfisht$1, - lfloor: lfloor$1, - lfr: lfr$1, - lg: lg$1, - lgE: lgE$1, - lhard: lhard$1, - lharu: lharu$1, - lharul: lharul$1, - lhblk: lhblk$1, - ljcy: ljcy$1, - ll: ll$1, - llarr: llarr$1, - llcorner: llcorner$1, - llhard: llhard$1, - lltri: lltri$1, - lmidot: lmidot$1, - lmoust: lmoust$1, - lmoustache: lmoustache$1, - lnE: lnE$1, - lnap: lnap$1, - lnapprox: lnapprox$1, - lne: lne$1, - lneq: lneq$1, - lneqq: lneqq$1, - lnsim: lnsim$1, - loang: loang$1, - loarr: loarr$1, - lobrk: lobrk$1, - longleftarrow: longleftarrow$1, - longleftrightarrow: longleftrightarrow$1, - longmapsto: longmapsto$1, - longrightarrow: longrightarrow$1, - looparrowleft: looparrowleft$1, - looparrowright: looparrowright$1, - lopar: lopar$1, - lopf: lopf$1, - loplus: loplus$1, - lotimes: lotimes$1, - lowast: lowast$1, - lowbar: lowbar$1, - loz: loz$1, - lozenge: lozenge$1, - lozf: lozf$1, - lpar: lpar$1, - lparlt: lparlt$1, - lrarr: lrarr$1, - lrcorner: lrcorner$1, - lrhar: lrhar$1, - lrhard: lrhard$1, - lrm: lrm$1, - lrtri: lrtri$1, - lsaquo: lsaquo$1, - lscr: lscr$1, - lsh: lsh$1, - lsim: lsim$1, - lsime: lsime$1, - lsimg: lsimg$1, - lsqb: lsqb$1, - lsquo: lsquo$1, - lsquor: lsquor$1, - lstrok: lstrok$1, - l: l$1, - lt: lt$2, - ltcc: ltcc$1, - ltcir: ltcir$1, - ltdot: ltdot$1, - lthree: lthree$1, - ltimes: ltimes$1, - ltlarr: ltlarr$1, - ltquest: ltquest$1, - ltrPar: ltrPar$1, - ltri: ltri$1, - ltrie: ltrie$1, - ltrif: ltrif$1, - lurdshar: lurdshar$1, - luruhar: luruhar$1, - lvertneqq: lvertneqq$1, - lvnE: lvnE$1, - mDDot: mDDot$1, - mac: mac$1, - macr: macr$1, - male: male$1, - malt: malt$1, - maltese: maltese$1, - map: map$4, - mapsto: mapsto$1, - mapstodown: mapstodown$1, - mapstoleft: mapstoleft$1, - mapstoup: mapstoup$1, - marker: marker$1, - mcomma: mcomma$1, - mcy: mcy$1, - mdash: mdash$1, - measuredangle: measuredangle$1, - mfr: mfr$1, - mho: mho$1, - micr: micr$1, - micro: micro$1, - mid: mid$1, - midast: midast$1, - midcir: midcir$1, - middo: middo$1, - middot: middot$1, - minus: minus$1, - minusb: minusb$1, - minusd: minusd$1, - minusdu: minusdu$1, - mlcp: mlcp$1, - mldr: mldr$1, - mnplus: mnplus$1, - models: models$1, - mopf: mopf$1, - mp: mp$1, - mscr: mscr$1, - mstpos: mstpos$1, - mu: mu$1, - multimap: multimap$1, - mumap: mumap$1, - nGg: nGg$1, - nGt: nGt$1, - nGtv: nGtv$1, - nLeftarrow: nLeftarrow$1, - nLeftrightarrow: nLeftrightarrow$1, - nLl: nLl$1, - nLt: nLt$1, - nLtv: nLtv$1, - nRightarrow: nRightarrow$1, - nVDash: nVDash$1, - nVdash: nVdash$1, - nabla: nabla$1, - nacute: nacute$1, - nang: nang$1, - nap: nap$1, - napE: napE$1, - napid: napid$1, - napos: napos$1, - napprox: napprox$1, - natur: natur$1, - natural: natural$1, - naturals: naturals$1, - nbs: nbs$1, - nbsp: nbsp$1, - nbump: nbump$1, - nbumpe: nbumpe$1, - ncap: ncap$1, - ncaron: ncaron$1, - ncedil: ncedil$1, - ncong: ncong$1, - ncongdot: ncongdot$1, - ncup: ncup$1, - ncy: ncy$1, - ndash: ndash$1, - ne: ne$1, - neArr: neArr$1, - nearhk: nearhk$1, - nearr: nearr$1, - nearrow: nearrow$1, - nedot: nedot$1, - nequiv: nequiv$1, - nesear: nesear$1, - nesim: nesim$1, - nexist: nexist$1, - nexists: nexists$1, - nfr: nfr$1, - ngE: ngE$1, - nge: nge$1, - ngeq: ngeq$1, - ngeqq: ngeqq$1, - ngeqslant: ngeqslant$1, - nges: nges$1, - ngsim: ngsim$1, - ngt: ngt$1, - ngtr: ngtr$1, - nhArr: nhArr$1, - nharr: nharr$1, - nhpar: nhpar$1, - ni: ni$1, - nis: nis$1, - nisd: nisd$1, - niv: niv$1, - njcy: njcy$1, - nlArr: nlArr$1, - nlE: nlE$1, - nlarr: nlarr$1, - nldr: nldr$1, - nle: nle$1, - nleftarrow: nleftarrow$1, - nleftrightarrow: nleftrightarrow$1, - nleq: nleq$1, - nleqq: nleqq$1, - nleqslant: nleqslant$1, - nles: nles$1, - nless: nless$1, - nlsim: nlsim$1, - nlt: nlt$1, - nltri: nltri$1, - nltrie: nltrie$1, - nmid: nmid$1, - nopf: nopf$1, - no: no$1, - not: not$1, - notin: notin$1, - notinE: notinE$1, - notindot: notindot$1, - notinva: notinva$1, - notinvb: notinvb$1, - notinvc: notinvc$1, - notni: notni$1, - notniva: notniva$1, - notnivb: notnivb$1, - notnivc: notnivc$1, - npar: npar$1, - nparallel: nparallel$1, - nparsl: nparsl$1, - npart: npart$1, - npolint: npolint$1, - npr: npr$1, - nprcue: nprcue$1, - npre: npre$1, - nprec: nprec$1, - npreceq: npreceq$1, - nrArr: nrArr$1, - nrarr: nrarr$1, - nrarrc: nrarrc$1, - nrarrw: nrarrw$1, - nrightarrow: nrightarrow$1, - nrtri: nrtri$1, - nrtrie: nrtrie$1, - nsc: nsc$1, - nsccue: nsccue$1, - nsce: nsce$1, - nscr: nscr$1, - nshortmid: nshortmid$1, - nshortparallel: nshortparallel$1, - nsim: nsim$1, - nsime: nsime$1, - nsimeq: nsimeq$1, - nsmid: nsmid$1, - nspar: nspar$1, - nsqsube: nsqsube$1, - nsqsupe: nsqsupe$1, - nsub: nsub$1, - nsubE: nsubE$1, - nsube: nsube$1, - nsubset: nsubset$1, - nsubseteq: nsubseteq$1, - nsubseteqq: nsubseteqq$1, - nsucc: nsucc$1, - nsucceq: nsucceq$1, - nsup: nsup$1, - nsupE: nsupE$1, - nsupe: nsupe$1, - nsupset: nsupset$1, - nsupseteq: nsupseteq$1, - nsupseteqq: nsupseteqq$1, - ntgl: ntgl$1, - ntild: ntild$1, - ntilde: ntilde$1, - ntlg: ntlg$1, - ntriangleleft: ntriangleleft$1, - ntrianglelefteq: ntrianglelefteq$1, - ntriangleright: ntriangleright$1, - ntrianglerighteq: ntrianglerighteq$1, - nu: nu$1, - num: num$1, - numero: numero$1, - numsp: numsp$1, - nvDash: nvDash$1, - nvHarr: nvHarr$1, - nvap: nvap$1, - nvdash: nvdash$1, - nvge: nvge$1, - nvgt: nvgt$1, - nvinfin: nvinfin$1, - nvlArr: nvlArr$1, - nvle: nvle$1, - nvlt: nvlt$1, - nvltrie: nvltrie$1, - nvrArr: nvrArr$1, - nvrtrie: nvrtrie$1, - nvsim: nvsim$1, - nwArr: nwArr$1, - nwarhk: nwarhk$1, - nwarr: nwarr$1, - nwarrow: nwarrow$1, - nwnear: nwnear$1, - oS: oS$1, - oacut: oacut$1, - oacute: oacute$1, - oast: oast$1, - ocir: ocir$1, - ocirc: ocirc$1, - ocy: ocy$1, - odash: odash$1, - odblac: odblac$1, - odiv: odiv$1, - odot: odot$1, - odsold: odsold$1, - oelig: oelig$1, - ofcir: ofcir$1, - ofr: ofr$1, - ogon: ogon$1, - ograv: ograv$1, - ograve: ograve$1, - ogt: ogt$1, - ohbar: ohbar$1, - ohm: ohm$1, - oint: oint$1, - olarr: olarr$1, - olcir: olcir$1, - olcross: olcross$1, - oline: oline$1, - olt: olt$1, - omacr: omacr$1, - omega: omega$1, - omicron: omicron$1, - omid: omid$1, - ominus: ominus$1, - oopf: oopf$1, - opar: opar$1, - operp: operp$1, - oplus: oplus$1, - or: or$1, - orarr: orarr$1, - ord: ord$1, - order: order$1, - orderof: orderof$1, - ordf: ordf$1, - ordm: ordm$1, - origof: origof$1, - oror: oror$1, - orslope: orslope$1, - orv: orv$1, - oscr: oscr$1, - oslas: oslas$1, - oslash: oslash$1, - osol: osol$1, - otild: otild$1, - otilde: otilde$1, - otimes: otimes$1, - otimesas: otimesas$1, - oum: oum$1, - ouml: ouml$1, - ovbar: ovbar$1, - par: par$1, - para: para$1, - parallel: parallel$1, - parsim: parsim$1, - parsl: parsl$1, - part: part$1, - pcy: pcy$1, - percnt: percnt$1, - period: period$1, - permil: permil$1, - perp: perp$1, - pertenk: pertenk$1, - pfr: pfr$1, - phi: phi$1, - phiv: phiv$1, - phmmat: phmmat$1, - phone: phone$1, - pi: pi$1, - pitchfork: pitchfork$1, - piv: piv$1, - planck: planck$1, - planckh: planckh$1, - plankv: plankv$1, - plus: plus$1, - plusacir: plusacir$1, - plusb: plusb$1, - pluscir: pluscir$1, - plusdo: plusdo$1, - plusdu: plusdu$1, - pluse: pluse$1, - plusm: plusm$1, - plusmn: plusmn$1, - plussim: plussim$1, - plustwo: plustwo$1, - pm: pm$1, - pointint: pointint$1, - popf: popf$1, - poun: poun$1, - pound: pound$1, - pr: pr$1, - prE: prE$1, - prap: prap$1, - prcue: prcue$1, - pre: pre$1, - prec: prec$1, - precapprox: precapprox$1, - preccurlyeq: preccurlyeq$1, - preceq: preceq$1, - precnapprox: precnapprox$1, - precneqq: precneqq$1, - precnsim: precnsim$1, - precsim: precsim$1, - prime: prime$1, - primes: primes$1, - prnE: prnE$1, - prnap: prnap$1, - prnsim: prnsim$1, - prod: prod$1, - profalar: profalar$1, - profline: profline$1, - profsurf: profsurf$1, - prop: prop$1, - propto: propto$1, - prsim: prsim$1, - prurel: prurel$1, - pscr: pscr$1, - psi: psi$1, - puncsp: puncsp$1, - qfr: qfr$1, - qint: qint$1, - qopf: qopf$1, - qprime: qprime$1, - qscr: qscr$1, - quaternions: quaternions$1, - quatint: quatint$1, - quest: quest$1, - questeq: questeq$1, - quo: quo$1, - quot: quot$1, - rAarr: rAarr$1, - rArr: rArr$1, - rAtail: rAtail$1, - rBarr: rBarr$1, - rHar: rHar$1, - race: race$1, - racute: racute$1, - radic: radic$1, - raemptyv: raemptyv$1, - rang: rang$1, - rangd: rangd$1, - range: range$1, - rangle: rangle$1, - raqu: raqu$1, - raquo: raquo$1, - rarr: rarr$1, - rarrap: rarrap$1, - rarrb: rarrb$1, - rarrbfs: rarrbfs$1, - rarrc: rarrc$1, - rarrfs: rarrfs$1, - rarrhk: rarrhk$1, - rarrlp: rarrlp$1, - rarrpl: rarrpl$1, - rarrsim: rarrsim$1, - rarrtl: rarrtl$1, - rarrw: rarrw$1, - ratail: ratail$1, - ratio: ratio$1, - rationals: rationals$1, - rbarr: rbarr$1, - rbbrk: rbbrk$1, - rbrace: rbrace$1, - rbrack: rbrack$1, - rbrke: rbrke$1, - rbrksld: rbrksld$1, - rbrkslu: rbrkslu$1, - rcaron: rcaron$1, - rcedil: rcedil$1, - rceil: rceil$1, - rcub: rcub$1, - rcy: rcy$1, - rdca: rdca$1, - rdldhar: rdldhar$1, - rdquo: rdquo$1, - rdquor: rdquor$1, - rdsh: rdsh$1, - real: real$1, - realine: realine$1, - realpart: realpart$1, - reals: reals$1, - rect: rect$1, - re: re$5, - reg: reg$1, - rfisht: rfisht$1, - rfloor: rfloor$1, - rfr: rfr$1, - rhard: rhard$1, - rharu: rharu$1, - rharul: rharul$1, - rho: rho$1, - rhov: rhov$1, - rightarrow: rightarrow$1, - rightarrowtail: rightarrowtail$1, - rightharpoondown: rightharpoondown$1, - rightharpoonup: rightharpoonup$1, - rightleftarrows: rightleftarrows$1, - rightleftharpoons: rightleftharpoons$1, - rightrightarrows: rightrightarrows$1, - rightsquigarrow: rightsquigarrow$1, - rightthreetimes: rightthreetimes$1, - ring: ring$1, - risingdotseq: risingdotseq$1, - rlarr: rlarr$1, - rlhar: rlhar$1, - rlm: rlm$1, - rmoust: rmoust$1, - rmoustache: rmoustache$1, - rnmid: rnmid$1, - roang: roang$1, - roarr: roarr$1, - robrk: robrk$1, - ropar: ropar$1, - ropf: ropf$1, - roplus: roplus$1, - rotimes: rotimes$1, - rpar: rpar$1, - rpargt: rpargt$1, - rppolint: rppolint$1, - rrarr: rrarr$1, - rsaquo: rsaquo$1, - rscr: rscr$1, - rsh: rsh$1, - rsqb: rsqb$1, - rsquo: rsquo$1, - rsquor: rsquor$1, - rthree: rthree$1, - rtimes: rtimes$1, - rtri: rtri$1, - rtrie: rtrie$1, - rtrif: rtrif$1, - rtriltri: rtriltri$1, - ruluhar: ruluhar$1, - rx: rx$1, - sacute: sacute$1, - sbquo: sbquo$1, - sc: sc$1, - scE: scE$1, - scap: scap$1, - scaron: scaron$1, - sccue: sccue$1, - sce: sce$1, - scedil: scedil$1, - scirc: scirc$1, - scnE: scnE$1, - scnap: scnap$1, - scnsim: scnsim$1, - scpolint: scpolint$1, - scsim: scsim$1, - scy: scy$1, - sdot: sdot$1, - sdotb: sdotb$1, - sdote: sdote$1, - seArr: seArr$1, - searhk: searhk$1, - searr: searr$1, - searrow: searrow$1, - sec: sec$1, - sect: sect$1, - semi: semi$1, - seswar: seswar$1, - setminus: setminus$1, - setmn: setmn$1, - sext: sext$1, - sfr: sfr$1, - sfrown: sfrown$1, - sharp: sharp$1, - shchcy: shchcy$1, - shcy: shcy$1, - shortmid: shortmid$1, - shortparallel: shortparallel$1, - sh: sh$1, - shy: shy$1, - sigma: sigma$1, - sigmaf: sigmaf$1, - sigmav: sigmav$1, - sim: sim$1, - simdot: simdot$1, - sime: sime$1, - simeq: simeq$1, - simg: simg$1, - simgE: simgE$1, - siml: siml$1, - simlE: simlE$1, - simne: simne$1, - simplus: simplus$1, - simrarr: simrarr$1, - slarr: slarr$1, - smallsetminus: smallsetminus$1, - smashp: smashp$1, - smeparsl: smeparsl$1, - smid: smid$1, - smile: smile$1, - smt: smt$1, - smte: smte$1, - smtes: smtes$1, - softcy: softcy$1, - sol: sol$1, - solb: solb$1, - solbar: solbar$1, - sopf: sopf$1, - spades: spades$1, - spadesuit: spadesuit$1, - spar: spar$1, - sqcap: sqcap$1, - sqcaps: sqcaps$1, - sqcup: sqcup$1, - sqcups: sqcups$1, - sqsub: sqsub$1, - sqsube: sqsube$1, - sqsubset: sqsubset$1, - sqsubseteq: sqsubseteq$1, - sqsup: sqsup$1, - sqsupe: sqsupe$1, - sqsupset: sqsupset$1, - sqsupseteq: sqsupseteq$1, - squ: squ$1, - square: square$1, - squarf: squarf$1, - squf: squf$1, - srarr: srarr$1, - sscr: sscr$1, - ssetmn: ssetmn$1, - ssmile: ssmile$1, - sstarf: sstarf$1, - star: star$1, - starf: starf$1, - straightepsilon: straightepsilon$1, - straightphi: straightphi$1, - strns: strns$1, - sub: sub$1, - subE: subE$1, - subdot: subdot$1, - sube: sube$1, - subedot: subedot$1, - submult: submult$1, - subnE: subnE$1, - subne: subne$1, - subplus: subplus$1, - subrarr: subrarr$1, - subset: subset$1, - subseteq: subseteq$1, - subseteqq: subseteqq$1, - subsetneq: subsetneq$1, - subsetneqq: subsetneqq$1, - subsim: subsim$1, - subsub: subsub$1, - subsup: subsup$1, - succ: succ$1, - succapprox: succapprox$1, - succcurlyeq: succcurlyeq$1, - succeq: succeq$1, - succnapprox: succnapprox$1, - succneqq: succneqq$1, - succnsim: succnsim$1, - succsim: succsim$1, - sum: sum$1, - sung: sung$1, - sup: sup$1, - sup1: sup1$1, - sup2: sup2$1, - sup3: sup3$1, - supE: supE$1, - supdot: supdot$1, - supdsub: supdsub$1, - supe: supe$1, - supedot: supedot$1, - suphsol: suphsol$1, - suphsub: suphsub$1, - suplarr: suplarr$1, - supmult: supmult$1, - supnE: supnE$1, - supne: supne$1, - supplus: supplus$1, - supset: supset$1, - supseteq: supseteq$1, - supseteqq: supseteqq$1, - supsetneq: supsetneq$1, - supsetneqq: supsetneqq$1, - supsim: supsim$1, - supsub: supsub$1, - supsup: supsup$1, - swArr: swArr$1, - swarhk: swarhk$1, - swarr: swarr$1, - swarrow: swarrow$1, - swnwar: swnwar$1, - szli: szli$1, - szlig: szlig$1, - target: target$1, - tau: tau$1, - tbrk: tbrk$1, - tcaron: tcaron$1, - tcedil: tcedil$1, - tcy: tcy$1, - tdot: tdot$1, - telrec: telrec$1, - tfr: tfr$1, - there4: there4$1, - therefore: therefore$1, - theta: theta$1, - thetasym: thetasym$1, - thetav: thetav$1, - thickapprox: thickapprox$1, - thicksim: thicksim$1, - thinsp: thinsp$1, - thkap: thkap$1, - thksim: thksim$1, - thor: thor$1, - thorn: thorn$1, - tilde: tilde$1, - time: time$1, - times: times$1, - timesb: timesb$1, - timesbar: timesbar$1, - timesd: timesd$1, - tint: tint$1, - toea: toea$1, - top: top$1, - topbot: topbot$1, - topcir: topcir$1, - topf: topf$1, - topfork: topfork$1, - tosa: tosa$1, - tprime: tprime$1, - trade: trade$1, - triangle: triangle$1, - triangledown: triangledown$1, - triangleleft: triangleleft$1, - trianglelefteq: trianglelefteq$1, - triangleq: triangleq$1, - triangleright: triangleright$1, - trianglerighteq: trianglerighteq$1, - tridot: tridot$1, - trie: trie$1, - triminus: triminus$1, - triplus: triplus$1, - trisb: trisb$1, - tritime: tritime$1, - trpezium: trpezium$1, - tscr: tscr$1, - tscy: tscy$1, - tshcy: tshcy$1, - tstrok: tstrok$1, - twixt: twixt$1, - twoheadleftarrow: twoheadleftarrow$1, - twoheadrightarrow: twoheadrightarrow$1, - uArr: uArr$1, - uHar: uHar$1, - uacut: uacut$1, - uacute: uacute$1, - uarr: uarr$1, - ubrcy: ubrcy$1, - ubreve: ubreve$1, - ucir: ucir$1, - ucirc: ucirc$1, - ucy: ucy$1, - udarr: udarr$1, - udblac: udblac$1, - udhar: udhar$1, - ufisht: ufisht$1, - ufr: ufr$1, - ugrav: ugrav$1, - ugrave: ugrave$1, - uharl: uharl$1, - uharr: uharr$1, - uhblk: uhblk$1, - ulcorn: ulcorn$1, - ulcorner: ulcorner$1, - ulcrop: ulcrop$1, - ultri: ultri$1, - umacr: umacr$1, - um: um$1, - uml: uml$1, - uogon: uogon$1, - uopf: uopf$1, - uparrow: uparrow$1, - updownarrow: updownarrow$1, - upharpoonleft: upharpoonleft$1, - upharpoonright: upharpoonright$1, - uplus: uplus$1, - upsi: upsi$1, - upsih: upsih$1, - upsilon: upsilon$1, - upuparrows: upuparrows$1, - urcorn: urcorn$1, - urcorner: urcorner$1, - urcrop: urcrop$1, - uring: uring$1, - urtri: urtri$1, - uscr: uscr$1, - utdot: utdot$1, - utilde: utilde$1, - utri: utri$1, - utrif: utrif$1, - uuarr: uuarr$1, - uum: uum$1, - uuml: uuml$1, - uwangle: uwangle$1, - vArr: vArr$1, - vBar: vBar$1, - vBarv: vBarv$1, - vDash: vDash$1, - vangrt: vangrt$1, - varepsilon: varepsilon$1, - varkappa: varkappa$1, - varnothing: varnothing$1, - varphi: varphi$1, - varpi: varpi$1, - varpropto: varpropto$1, - varr: varr$1, - varrho: varrho$1, - varsigma: varsigma$1, - varsubsetneq: varsubsetneq$1, - varsubsetneqq: varsubsetneqq$1, - varsupsetneq: varsupsetneq$1, - varsupsetneqq: varsupsetneqq$1, - vartheta: vartheta$1, - vartriangleleft: vartriangleleft$1, - vartriangleright: vartriangleright$1, - vcy: vcy$1, - vdash: vdash$1, - vee: vee$1, - veebar: veebar$1, - veeeq: veeeq$1, - vellip: vellip$1, - verbar: verbar$1, - vert: vert$1, - vfr: vfr$1, - vltri: vltri$1, - vnsub: vnsub$1, - vnsup: vnsup$1, - vopf: vopf$1, - vprop: vprop$1, - vrtri: vrtri$1, - vscr: vscr$1, - vsubnE: vsubnE$1, - vsubne: vsubne$1, - vsupnE: vsupnE$1, - vsupne: vsupne$1, - vzigzag: vzigzag$1, - wcirc: wcirc$1, - wedbar: wedbar$1, - wedge: wedge$1, - wedgeq: wedgeq$1, - weierp: weierp$1, - wfr: wfr$1, - wopf: wopf$1, - wp: wp$1, - wr: wr$1, - wreath: wreath$1, - wscr: wscr$1, - xcap: xcap$1, - xcirc: xcirc$1, - xcup: xcup$1, - xdtri: xdtri$1, - xfr: xfr$1, - xhArr: xhArr$1, - xharr: xharr$1, - xi: xi$1, - xlArr: xlArr$1, - xlarr: xlarr$1, - xmap: xmap$1, - xnis: xnis$1, - xodot: xodot$1, - xopf: xopf$1, - xoplus: xoplus$1, - xotime: xotime$1, - xrArr: xrArr$1, - xrarr: xrarr$1, - xscr: xscr$1, - xsqcup: xsqcup$1, - xuplus: xuplus$1, - xutri: xutri$1, - xvee: xvee$1, - xwedge: xwedge$1, - yacut: yacut$1, - yacute: yacute$1, - yacy: yacy$1, - ycirc: ycirc$1, - ycy: ycy$1, - ye: ye$1, - yen: yen$1, - yfr: yfr$1, - yicy: yicy$1, - yopf: yopf$1, - yscr: yscr$1, - yucy: yucy$1, - yum: yum$1, - yuml: yuml$1, - zacute: zacute$1, - zcaron: zcaron$1, - zcy: zcy$1, - zdot: zdot$1, - zeetrf: zeetrf$1, - zeta: zeta$1, - zfr: zfr$1, - zhcy: zhcy$1, - zigrarr: zigrarr$1, - zopf: zopf$1, - zscr: zscr$1, - zwj: zwj$1, - zwnj: zwnj$1 -}; - -var characterEntities$1 = require$$0$1; - -var decodeEntity_1$1 = decodeEntity$1; - -var own$8 = {}.hasOwnProperty; - -function decodeEntity$1(characters) { - return own$8.call(characterEntities$1, characters) - ? characterEntities$1[characters] - : false +function previous$1(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) } +/** @type {Tokenizer} */ -var dist = fromMarkdown$1; +function tokenizeCodeText(effects, ok, nok) { + let sizeOpen = 0; + /** @type {number} */ -// These three are compiled away in the `dist/` + let size; + /** @type {Token} */ -var toString$4 = mdastUtilToString$1; -var assign = assign_1; -var own$7 = hasOwnProperty$2; -var normalizeIdentifier$1 = normalizeIdentifier_1; -var safeFromInt = safeFromInt_1; -var parser = parse_1$1; -var preprocessor = preprocess_1; -var postprocess = postprocess_1; -var decode$1 = decodeEntity_1$1; -var stringifyPosition$2 = unistUtilStringifyPosition; + let token; + return start + /** @type {State} */ -function fromMarkdown$1(value, encoding, options) { - if (typeof encoding !== 'string') { - options = encoding; - encoding = undefined; + function start(code) { + effects.enter('codeText'); + effects.enter('codeTextSequence'); + return openingSequence(code) } + /** @type {State} */ - return compiler(options)( - postprocess( - parser(options).document().write(preprocessor()(value, encoding, true)) - ) - ) -} + function openingSequence(code) { + if (code === 96) { + effects.consume(code); + sizeOpen++; + return openingSequence + } -// Note this compiler only understand complete buffering, not streaming. -function compiler(options) { - var settings = options || {}; - var config = configure$2( - { - transforms: [], - canContainEols: [ - 'emphasis', - 'fragment', - 'heading', - 'paragraph', - 'strong' - ], + effects.exit('codeTextSequence'); + return gap(code) + } + /** @type {State} */ - enter: { - autolink: opener(link), - autolinkProtocol: onenterdata, - autolinkEmail: onenterdata, - atxHeading: opener(heading), - blockQuote: opener(blockQuote), - characterEscape: onenterdata, - characterReference: onenterdata, - codeFenced: opener(codeFlow), - codeFencedFenceInfo: buffer, - codeFencedFenceMeta: buffer, - codeIndented: opener(codeFlow, buffer), - codeText: opener(codeText, buffer), - codeTextData: onenterdata, - data: onenterdata, - codeFlowValue: onenterdata, - definition: opener(definition), - definitionDestinationString: buffer, - definitionLabelString: buffer, - definitionTitleString: buffer, - emphasis: opener(emphasis), - hardBreakEscape: opener(hardBreak), - hardBreakTrailing: opener(hardBreak), - htmlFlow: opener(html, buffer), - htmlFlowData: onenterdata, - htmlText: opener(html, buffer), - htmlTextData: onenterdata, - image: opener(image), - label: buffer, - link: opener(link), - listItem: opener(listItem), - listItemValue: onenterlistitemvalue, - listOrdered: opener(list, onenterlistordered), - listUnordered: opener(list), - paragraph: opener(paragraph), - reference: onenterreference, - referenceString: buffer, - resourceDestinationString: buffer, - resourceTitleString: buffer, - setextHeading: opener(heading), - strong: opener(strong), - thematicBreak: opener(thematicBreak) - }, + function gap(code) { + // EOF. + if (code === null) { + return nok(code) + } // Closing fence? + // Could also be data. - exit: { - atxHeading: closer(), - atxHeadingSequence: onexitatxheadingsequence, - autolink: closer(), - autolinkEmail: onexitautolinkemail, - autolinkProtocol: onexitautolinkprotocol, - blockQuote: closer(), - characterEscapeValue: onexitdata, - characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, - characterReferenceMarkerNumeric: onexitcharacterreferencemarker, - characterReferenceValue: onexitcharacterreferencevalue, - codeFenced: closer(onexitcodefenced), - codeFencedFence: onexitcodefencedfence, - codeFencedFenceInfo: onexitcodefencedfenceinfo, - codeFencedFenceMeta: onexitcodefencedfencemeta, - codeFlowValue: onexitdata, - codeIndented: closer(onexitcodeindented), - codeText: closer(onexitcodetext), - codeTextData: onexitdata, - data: onexitdata, - definition: closer(), - definitionDestinationString: onexitdefinitiondestinationstring, - definitionLabelString: onexitdefinitionlabelstring, - definitionTitleString: onexitdefinitiontitlestring, - emphasis: closer(), - hardBreakEscape: closer(onexithardbreak), - hardBreakTrailing: closer(onexithardbreak), - htmlFlow: closer(onexithtmlflow), - htmlFlowData: onexitdata, - htmlText: closer(onexithtmltext), - htmlTextData: onexitdata, - image: closer(onexitimage), - label: onexitlabel, - labelText: onexitlabeltext, - lineEnding: onexitlineending, - link: closer(onexitlink), - listItem: closer(), - listOrdered: closer(), - listUnordered: closer(), - paragraph: closer(), - referenceString: onexitreferencestring, - resourceDestinationString: onexitresourcedestinationstring, - resourceTitleString: onexitresourcetitlestring, - resource: onexitresource, - setextHeading: closer(onexitsetextheading), - setextHeadingLineSequence: onexitsetextheadinglinesequence, - setextHeadingText: onexitsetextheadingtext, - strong: closer(), - thematicBreak: closer() - } - }, + if (code === 96) { + token = effects.enter('codeTextSequence'); + size = 0; + return closingSequence(code) + } // Tabs don’t work, and virtual spaces don’t make sense. - settings.mdastExtensions || [] - ); + if (code === 32) { + effects.enter('space'); + effects.consume(code); + effects.exit('space'); + return gap + } - var data = {}; + if (markdownLineEnding(code)) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return gap + } // Data. - return compile + effects.enter('codeTextData'); + return data(code) + } // In code. - function compile(events) { - var tree = {type: 'root', children: []}; - var stack = [tree]; - var tokenStack = []; - var listStack = []; - var index = -1; - var handler; - var listStart; - - var context = { - stack: stack, - tokenStack: tokenStack, - config: config, - enter: enter, - exit: exit, - buffer: buffer, - resume: resume, - setData: setData, - getData: getData - }; + /** @type {State} */ - while (++index < events.length) { - // We preprocess lists to add `listItem` tokens, and to infer whether - // items the list itself are spread out. - if ( - events[index][1].type === 'listOrdered' || - events[index][1].type === 'listUnordered' - ) { - if (events[index][0] === 'enter') { - listStack.push(index); - } else { - listStart = listStack.pop(index); - index = prepareList(events, listStart, index); - } - } + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData'); + return gap(code) } - index = -1; + effects.consume(code); + return data + } // Closing fence. - while (++index < events.length) { - handler = config[events[index][0]]; + /** @type {State} */ - if (own$7.call(handler, events[index][1].type)) { - handler[events[index][1].type].call( - assign({sliceSerialize: events[index][2].sliceSerialize}, context), - events[index][1] - ); - } - } + function closingSequence(code) { + // More. + if (code === 96) { + effects.consume(code); + size++; + return closingSequence + } // Done! - if (tokenStack.length) { - throw new Error( - 'Cannot close document, a token (`' + - tokenStack[tokenStack.length - 1].type + - '`, ' + - stringifyPosition$2({ - start: tokenStack[tokenStack.length - 1].start, - end: tokenStack[tokenStack.length - 1].end - }) + - ') is still open' - ) - } + if (size === sizeOpen) { + effects.exit('codeTextSequence'); + effects.exit('codeText'); + return ok(code) + } // More or less accents: mark as data. - // Figure out `root` position. - tree.position = { - start: point( - events.length ? events[0][1].start : {line: 1, column: 1, offset: 0} - ), + token.type = 'codeTextData'; + return data(code) + } +} - end: point( - events.length - ? events[events.length - 2][1].end - : {line: 1, column: 1, offset: 0} - ) - }; +/** + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + */ - index = -1; - while (++index < config.transforms.length) { - tree = config.transforms[index](tree) || tree; - } +/** + * Tokenize subcontent. + * + * @param {Event[]} events + * @returns {boolean} + */ +function subtokenize(events) { + /** @type {Record} */ + const jumps = {}; + let index = -1; + /** @type {Event} */ - return tree - } + let event; + /** @type {number|undefined} */ - function prepareList(events, start, length) { - var index = start - 1; - var containerBalance = -1; - var listSpread = false; - var listItem; - var tailIndex; - var lineIndex; - var tailEvent; - var event; - var firstBlankLineIndex; - var atMarker; + let lineIndex; + /** @type {number} */ - while (++index <= length) { - event = events[index]; + let otherIndex; + /** @type {Event} */ - if ( - event[1].type === 'listUnordered' || - event[1].type === 'listOrdered' || - event[1].type === 'blockQuote' - ) { - if (event[0] === 'enter') { - containerBalance++; - } else { - containerBalance--; - } + let otherEvent; + /** @type {Event[]} */ - atMarker = undefined; - } else if (event[1].type === 'lineEndingBlank') { - if (event[0] === 'enter') { - if ( - listItem && - !atMarker && - !containerBalance && - !firstBlankLineIndex - ) { - firstBlankLineIndex = index; - } + let parameters; + /** @type {Event[]} */ - atMarker = undefined; - } - } else if ( - event[1].type === 'linePrefix' || - event[1].type === 'listItemValue' || - event[1].type === 'listItemMarker' || - event[1].type === 'listItemPrefix' || - event[1].type === 'listItemPrefixWhitespace' - ) ; else { - atMarker = undefined; + let subevents; + /** @type {boolean|undefined} */ + + let more; + + while (++index < events.length) { + while (index in jumps) { + index = jumps[index]; + } + + event = events[index]; // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events; + otherIndex = 0; + + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2; } if ( - (!containerBalance && - event[0] === 'enter' && - event[1].type === 'listItemPrefix') || - (containerBalance === -1 && - event[0] === 'exit' && - (event[1].type === 'listUnordered' || - event[1].type === 'listOrdered')) + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' ) { - if (listItem) { - tailIndex = index; - lineIndex = undefined; + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } - while (tailIndex--) { - tailEvent = events[tailIndex]; + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true; + otherIndex++; + } + } + } + } // Enter. - if ( - tailEvent[1].type === 'lineEnding' || - tailEvent[1].type === 'lineEndingBlank' - ) { - if (tailEvent[0] === 'exit') continue + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)); + index = jumps[index]; + more = true; + } + } // Exit. + else if (event[1]._container) { + otherIndex = index; + lineIndex = undefined; - if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank'; - listSpread = true; - } + while (otherIndex--) { + otherEvent = events[otherIndex]; - tailEvent[1].type = 'lineEnding'; - lineIndex = tailIndex; - } else if ( - tailEvent[1].type === 'linePrefix' || - tailEvent[1].type === 'blockQuotePrefix' || - tailEvent[1].type === 'blockQuotePrefixWhitespace' || - tailEvent[1].type === 'blockQuoteMarker' || - tailEvent[1].type === 'listItemIndent' - ) ; else { - break + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank'; } - } - if ( - firstBlankLineIndex && - (!lineIndex || firstBlankLineIndex < lineIndex) - ) { - listItem._spread = true; + otherEvent[1].type = 'lineEnding'; + lineIndex = otherIndex; } - - // Fix position. - listItem.end = point( - lineIndex ? events[lineIndex][1].start : event[1].end - ); - - events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]); - index++; - length++; + } else { + break } + } - // Create a new list item. - if (event[1].type === 'listItemPrefix') { - listItem = { - type: 'listItem', - _spread: false, - start: point(event[1].start) - }; + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start); // Switch container exit w/ line endings. - events.splice(index, 0, ['enter', listItem, event[2]]); - index++; - length++; - firstBlankLineIndex = undefined; - atMarker = true; - } + parameters = events.slice(lineIndex, index); + parameters.unshift(event); + splice(events, lineIndex, index - lineIndex + 1, parameters); } } - - events[start][1]._spread = listSpread; - return length } - function setData(key, value) { - data[key] = value; - } + return !more +} +/** + * Tokenize embedded tokens. + * + * @param {Event[]} events + * @param {number} eventIndex + * @returns {Record} + */ - function getData(key) { - return data[key] - } +function subcontent(events, eventIndex) { + const token = events[eventIndex][1]; + const context = events[eventIndex][2]; + let startPosition = eventIndex - 1; + /** @type {number[]} */ - function point(d) { - return {line: d.line, column: d.column, offset: d.offset} - } + const startPositions = []; + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start); + const childEvents = tokenizer.events; + /** @type {[number, number][]} */ - function opener(create, and) { - return open + const jumps = []; + /** @type {Record} */ - function open(token) { - enter.call(this, create(token), token); - if (and) and.call(this, token); - } - } + const gaps = {}; + /** @type {Chunk[]} */ - function buffer() { - this.stack.push({type: 'fragment', children: []}); - } + let stream; + /** @type {Token|undefined} */ - function enter(node, token) { - this.stack[this.stack.length - 1].children.push(node); - this.stack.push(node); - this.tokenStack.push(token); - node.position = {start: point(token.start)}; - return node - } + let previous; + let index = -1; + /** @type {Token|undefined} */ - function closer(and) { - return close + let current = token; + let adjust = 0; + let start = 0; + const breaks = [start]; // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. - function close(token) { - if (and) and.call(this, token); - exit.call(this, token); + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. } - } - function exit(token) { - var node = this.stack.pop(); - var open = this.tokenStack.pop(); + startPositions.push(startPosition); - if (!open) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition$2({start: token.start, end: token.end}) + - '): it’s not open' - ) - } else if (open.type !== token.type) { - throw new Error( - 'Cannot close `' + - token.type + - '` (' + - stringifyPosition$2({start: token.start, end: token.end}) + - '): a different token (`' + - open.type + - '`, ' + - stringifyPosition$2({start: open.start, end: open.end}) + - ') is open' - ) - } + if (!current._tokenizer) { + stream = context.sliceStream(current); - node.position.end = point(token.end); - return node - } + if (!current.next) { + stream.push(null); + } - function resume() { - return toString$4(this.stack.pop()) - } + if (previous) { + tokenizer.defineSkip(current.start); + } - // - // Handlers. - // + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true; + } - function onenterlistordered() { - setData('expectingFirstListItemValue', true); - } + tokenizer.write(stream); - function onenterlistitemvalue(token) { - if (getData('expectingFirstListItemValue')) { - this.stack[this.stack.length - 2].start = parseInt( - this.sliceSerialize(token), - 10 - ); + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined; + } + } // Unravel the next token. - setData('expectingFirstListItemValue'); - } - } + previous = current; + current = current.next; + } // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. - function onexitcodefencedfenceinfo() { - var data = this.resume(); - this.stack[this.stack.length - 1].lang = data; - } + current = token; - function onexitcodefencedfencemeta() { - var data = this.resume(); - this.stack[this.stack.length - 1].meta = data; - } + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + 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); // Help GC. - function onexitcodefencedfence() { - // Exit if this is the closing fence. - if (getData('flowCodeInside')) return - this.buffer(); - setData('flowCodeInside', true); - } + current._tokenizer = undefined; + current.previous = undefined; + current = current.next; + } + } // Help GC. - function onexitcodefenced() { - var data = this.resume(); - this.stack[this.stack.length - 1].value = data.replace( - /^(\r?\n|\r)|(\r?\n|\r)$/g, - '' - ); + tokenizer.events = []; // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. - setData('flowCodeInside'); - } + if (current) { + // Help GC. + current._tokenizer = undefined; + current.previous = undefined; + } else { + breaks.pop(); + } // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. - function onexitcodeindented() { - var data = this.resume(); - this.stack[this.stack.length - 1].value = data; - } + index = breaks.length; - function onexitdefinitionlabelstring(token) { - // Discard label, use the source content instead. - var label = this.resume(); - this.stack[this.stack.length - 1].label = label; - this.stack[this.stack.length - 1].identifier = normalizeIdentifier$1( - this.sliceSerialize(token) - ).toLowerCase(); - } - - function onexitdefinitiontitlestring() { - var data = this.resume(); - this.stack[this.stack.length - 1].title = data; + 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); } - function onexitdefinitiondestinationstring() { - var data = this.resume(); - this.stack[this.stack.length - 1].url = data; - } + index = -1; - function onexitatxheadingsequence(token) { - if (!this.stack[this.stack.length - 1].depth) { - this.stack[this.stack.length - 1].depth = this.sliceSerialize( - token - ).length; - } + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; + adjust += jumps[index][1] - jumps[index][0] - 1; } - function onexitsetextheadingtext() { - setData('setextHeadingSlurpLineEnding', true); - } + return gaps +} - function onexitsetextheadinglinesequence(token) { - this.stack[this.stack.length - 1].depth = - this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2; - } +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + */ - function onexitsetextheading() { - setData('setextHeadingSlurpLineEnding'); - } +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content = { + tokenize: tokenizeContent, + resolve: resolveContent +}; +/** @type {Construct} */ - function onenterdata(token) { - var siblings = this.stack[this.stack.length - 1].children; - var tail = siblings[siblings.length - 1]; +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +}; +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ - if (!tail || tail.type !== 'text') { - // Add a new text node. - tail = text(); - tail.position = {start: point(token.start)}; - this.stack[this.stack.length - 1].children.push(tail); - } +function resolveContent(events) { + subtokenize(events); + return events +} +/** @type {Tokenizer} */ - this.stack.push(tail); - } +function tokenizeContent(effects, ok) { + /** @type {Token} */ + let previous; + return start + /** @type {State} */ - function onexitdata(token) { - var tail = this.stack.pop(); - tail.value += this.sliceSerialize(token); - tail.position.end = point(token.end); + function start(code) { + effects.enter('content'); + previous = effects.enter('chunkContent', { + contentType: 'content' + }); + return data(code) } + /** @type {State} */ - function onexitlineending(token) { - var context = this.stack[this.stack.length - 1]; - - // If we’re at a hard break, include the line ending in there. - if (getData('atHardBreak')) { - context.children[context.children.length - 1].position.end = point( - token.end - ); - - setData('atHardBreak'); - return + function data(code) { + if (code === null) { + return contentEnd(code) } - if ( - !getData('setextHeadingSlurpLineEnding') && - config.canContainEols.indexOf(context.type) > -1 - ) { - onenterdata.call(this, token); - onexitdata.call(this, token); - } - } + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } // Data. - function onexithardbreak() { - setData('atHardBreak', true); + effects.consume(code); + return data } + /** @type {State} */ - function onexithtmlflow() { - var data = this.resume(); - this.stack[this.stack.length - 1].value = data; + function contentEnd(code) { + effects.exit('chunkContent'); + effects.exit('content'); + return ok(code) } + /** @type {State} */ - function onexithtmltext() { - var data = this.resume(); - this.stack[this.stack.length - 1].value = data; + function contentContinue(code) { + effects.consume(code); + effects.exit('chunkContent'); + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }); + previous = previous.next; + return data } +} +/** @type {Tokenizer} */ - function onexitcodetext() { - var data = this.resume(); - this.stack[this.stack.length - 1].value = data; - } +function tokenizeContinuation(effects, ok, nok) { + const self = this; + return startLookahead + /** @type {State} */ - function onexitlink() { - var context = this.stack[this.stack.length - 1]; + function startLookahead(code) { + effects.exit('chunkContent'); + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace(effects, prefixed, 'linePrefix') + } + /** @type {State} */ - // To do: clean. - if (getData('inReference')) { - context.type += 'Reference'; - context.referenceType = getData('referenceType') || 'shortcut'; - delete context.url; - delete context.title; - } else { - delete context.identifier; - delete context.label; - delete context.referenceType; + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) } - setData('referenceType'); - } - - function onexitimage() { - var context = this.stack[this.stack.length - 1]; + const tail = self.events[self.events.length - 1]; - // To do: clean. - if (getData('inReference')) { - context.type += 'Reference'; - context.referenceType = getData('referenceType') || 'shortcut'; - delete context.url; - delete context.title; - } else { - delete context.identifier; - delete context.label; - delete context.referenceType; + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) } - setData('referenceType'); - } - - function onexitlabeltext(token) { - this.stack[this.stack.length - 2].identifier = normalizeIdentifier$1( - this.sliceSerialize(token) - ).toLowerCase(); + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) } +} - function onexitlabel() { - var fragment = this.stack[this.stack.length - 1]; - var value = this.resume(); +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ - this.stack[this.stack.length - 1].label = value; +/** + * @param {Effects} effects + * @param {State} ok + * @param {State} nok + * @param {string} type + * @param {string} literalType + * @param {string} literalMarkerType + * @param {string} rawType + * @param {string} stringType + * @param {number} [max=Infinity] + * @returns {State} + */ +// eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY; + let balance = 0; + return start + /** @type {State} */ - // Assume a reference. - setData('inReference', true); + function start(code) { + if (code === 60) { + effects.enter(type); + effects.enter(literalType); + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + return destinationEnclosedBefore + } - if (this.stack[this.stack.length - 1].type === 'link') { - this.stack[this.stack.length - 1].children = fragment.children; - } else { - this.stack[this.stack.length - 1].alt = value; + if (code === null || code === 41 || asciiControl(code)) { + return nok(code) } - } - function onexitresourcedestinationstring() { - var data = this.resume(); - this.stack[this.stack.length - 1].url = data; + effects.enter(type); + effects.enter(rawType); + effects.enter(stringType); + effects.enter('chunkString', { + contentType: 'string' + }); + return destinationRaw(code) } + /** @type {State} */ - function onexitresourcetitlestring() { - var data = this.resume(); - this.stack[this.stack.length - 1].title = data; - } + function destinationEnclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + effects.exit(literalType); + effects.exit(type); + return ok + } - function onexitresource() { - setData('inReference'); + effects.enter(stringType); + effects.enter('chunkString', { + contentType: 'string' + }); + return destinationEnclosed(code) } + /** @type {State} */ - function onenterreference() { - setData('referenceType', 'collapsed'); - } + function destinationEnclosed(code) { + if (code === 62) { + effects.exit('chunkString'); + effects.exit(stringType); + return destinationEnclosedBefore(code) + } - function onexitreferencestring(token) { - var label = this.resume(); - this.stack[this.stack.length - 1].label = label; - this.stack[this.stack.length - 1].identifier = normalizeIdentifier$1( - this.sliceSerialize(token) - ).toLowerCase(); - setData('referenceType', 'full'); - } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } - function onexitcharacterreferencemarker(token) { - setData('characterReferenceType', token.type); + effects.consume(code); + return code === 92 ? destinationEnclosedEscape : destinationEnclosed } + /** @type {State} */ - function onexitcharacterreferencevalue(token) { - var data = this.sliceSerialize(token); - var type = getData('characterReferenceType'); - var value; - var tail; - - if (type) { - value = safeFromInt( - data, - type === 'characterReferenceMarkerNumeric' ? 10 : 16 - ); - - setData('characterReferenceType'); - } else { - value = decode$1(data); + function destinationEnclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code); + return destinationEnclosed } - tail = this.stack.pop(); - tail.value += value; - tail.position.end = point(token.end); - } - - function onexitautolinkprotocol(token) { - onexitdata.call(this, token); - this.stack[this.stack.length - 1].url = this.sliceSerialize(token); + return destinationEnclosed(code) } + /** @type {State} */ - function onexitautolinkemail(token) { - onexitdata.call(this, token); - this.stack[this.stack.length - 1].url = - 'mailto:' + this.sliceSerialize(token); - } + function destinationRaw(code) { + if (code === 40) { + if (++balance > limit) return nok(code) + effects.consume(code); + return destinationRaw + } - // - // Creaters. - // + if (code === 41) { + if (!balance--) { + effects.exit('chunkString'); + effects.exit(stringType); + effects.exit(rawType); + effects.exit(type); + return ok(code) + } - function blockQuote() { - return {type: 'blockquote', children: []} - } + effects.consume(code); + return destinationRaw + } - function codeFlow() { - return {type: 'code', lang: null, meta: null, value: ''} - } + if (code === null || markdownLineEndingOrSpace(code)) { + if (balance) return nok(code) + effects.exit('chunkString'); + effects.exit(stringType); + effects.exit(rawType); + effects.exit(type); + return ok(code) + } - function codeText() { - return {type: 'inlineCode', value: ''} + if (asciiControl(code)) return nok(code) + effects.consume(code); + return code === 92 ? destinationRawEscape : destinationRaw } + /** @type {State} */ - function definition() { - return { - type: 'definition', - identifier: '', - label: null, - title: null, - url: '' + function destinationRawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code); + return destinationRaw } - } - function emphasis() { - return {type: 'emphasis', children: []} + return destinationRaw(code) } +} - function heading() { - return {type: 'heading', depth: undefined, children: []} - } +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').State} State + */ - function hardBreak() { - return {type: 'break'} - } +/** + * @this {TokenizeContext} + * @param {Effects} effects + * @param {State} ok + * @param {State} nok + * @param {string} type + * @param {string} markerType + * @param {string} stringType + * @returns {State} + */ +// eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this; + let size = 0; + /** @type {boolean} */ - function html() { - return {type: 'html', value: ''} - } + let data; + return start + /** @type {State} */ - function image() { - return {type: 'image', title: null, url: '', alt: null} + function start(code) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.enter(stringType); + return atBreak } + /** @type {State} */ - function link() { - return {type: 'link', title: null, url: '', children: []} - } + function atBreak(code) { + if ( + code === null || + code === 91 || + (code === 93 && !data) || + /* Hidden footnotes hook */ - function list(token) { - return { - type: 'list', - ordered: token.type === 'listOrdered', - start: null, - spread: token._spread, - children: [] + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) || + size > 999 + ) { + return nok(code) } - } - function listItem(token) { - return { - type: 'listItem', - spread: token._spread, - checked: null, - children: [] + if (code === 93) { + effects.exit(stringType); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok } - } - function paragraph() { - return {type: 'paragraph', children: []} - } + if (markdownLineEnding(code)) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return atBreak + } - function strong() { - return {type: 'strong', children: []} + effects.enter('chunkString', { + contentType: 'string' + }); + return label(code) } + /** @type {State} */ - function text() { - return {type: 'text', value: ''} - } + function label(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString'); + return atBreak(code) + } - function thematicBreak() { - return {type: 'thematicBreak'} + effects.consume(code); + data = data || !markdownSpace(code); + return code === 92 ? labelEscape : label } -} + /** @type {State} */ -function configure$2(config, extensions) { - var index = -1; + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code); + size++; + return label + } - while (++index < extensions.length) { - extension(config, extensions[index]); + return label(code) } - - return config } -function extension(config, extension) { - var key; - var left; +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ - for (key in extension) { - left = own$7.call(config, key) ? config[key] : (config[key] = {}); +/** + * @param {Effects} effects + * @param {State} ok + * @param {State} nok + * @param {string} type + * @param {string} markerType + * @param {string} stringType + * @returns {State} + */ +// eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker; + return start + /** @type {State} */ - if (key === 'canContainEols' || key === 'transforms') { - config[key] = [].concat(left, extension[key]); - } else { - Object.assign(left, extension[key]); - } + function start(code) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + marker = code === 40 ? 41 : code; + return atFirstTitleBreak } -} - -var mdastUtilFromMarkdown = dist; - -var remarkParse = parse$2; - -var fromMarkdown = mdastUtilFromMarkdown; - -function parse$2(options) { - var self = this; + /** @type {State} */ - this.Parser = parse; + function atFirstTitleBreak(code) { + if (code === marker) { + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok + } - function parse(doc) { - return fromMarkdown( - doc, - Object.assign({}, self.data('settings'), options, { - // Note: these options are not in the readme. - // The goal is for them to be set by plugins on `data` instead of being - // passed by users. - extensions: self.data('micromarkExtensions') || [], - mdastExtensions: self.data('fromMarkdownExtensions') || [] - }) - ) + effects.enter(stringType); + return atTitleBreak(code) } -} + /** @type {State} */ -var zwitch$1 = factory$4; + function atTitleBreak(code) { + if (code === marker) { + effects.exit(stringType); + return atFirstTitleBreak(marker) + } -var noop$1 = Function.prototype; -var own$6 = {}.hasOwnProperty; + if (code === null) { + return nok(code) + } // Note: blank lines can’t exist in content. -// Handle values based on a property. -function factory$4(key, options) { - var settings = options || {}; + if (markdownLineEnding(code)) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace(effects, atTitleBreak, 'linePrefix') + } - function one(value) { - var fn = one.invalid; - var handlers = one.handlers; + effects.enter('chunkString', { + contentType: 'string' + }); + return title(code) + } + /** @type {State} */ - if (value && own$6.call(value, key)) { - fn = own$6.call(handlers, value[key]) ? handlers[value[key]] : one.unknown; + function title(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString'); + return atTitleBreak(code) } - return (fn || noop$1).apply(this, arguments) + effects.consume(code); + return code === 92 ? titleEscape : title } + /** @type {State} */ - one.handlers = settings.handlers || {}; - one.invalid = settings.invalid; - one.unknown = settings.unknown; + function titleEscape(code) { + if (code === marker || code === 92) { + effects.consume(code); + return title + } - return one + return title(code) + } } -var configure_1 = configure$1; +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ -function configure$1(base, extension) { - var index = -1; - var key; +/** + * @param {Effects} effects + * @param {State} ok + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen; + return start + /** @type {State} */ - // First do subextensions. - if (extension.extensions) { - while (++index < extension.extensions.length) { - configure$1(base, extension.extensions[index]); + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + seen = true; + return start } - } - for (key in extension) { - if (key === 'extensions') ; else if (key === 'unsafe' || key === 'join') { - base[key] = base[key].concat(extension[key] || []); - } else if (key === 'handlers') { - base[key] = Object.assign(base[key], extension[key] || {}); - } else { - base.options[key] = extension[key]; + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) } + + return ok(code) } +} - return base +/** + * Normalize an identifier (such as used in definitions). + * + * @param {string} value + * @returns {string} + */ +function normalizeIdentifier(value) { + return ( + value // Collapse Markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') // Trim. + .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) } -var handle = {}; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + */ + +/** @type {Construct} */ +const definition$1 = { + name: 'definition', + tokenize: tokenizeDefinition +}; +/** @type {Construct} */ -var containerFlow$1 = flow$4; +const titleConstruct = { + tokenize: tokenizeTitle, + partial: true +}; +/** @type {Tokenizer} */ -var repeat$5 = repeatString; +function tokenizeDefinition(effects, ok, nok) { + const self = this; + /** @type {string} */ -function flow$4(parent, context) { - var children = parent.children || []; - var results = []; - var index = -1; - var child; + let identifier; + return start + /** @type {State} */ - while (++index < children.length) { - child = children[index]; + function start(code) { + effects.enter('definition'); + return factoryLabel.call( + self, + effects, + labelAfter, + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + /** @type {State} */ - results.push( - context.handle(child, parent, context, {before: '\n', after: '\n'}) + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ); - if (index + 1 < children.length) { - results.push(between(child, children[index + 1])); + if (code === 58) { + effects.enter('definitionMarker'); + effects.consume(code); + effects.exit('definitionMarker'); // Note: blank lines can’t exist in content. + + return factoryWhitespace( + effects, + factoryDestination( + effects, + effects.attempt( + titleConstruct, + factorySpace(effects, after, 'whitespace'), + factorySpace(effects, after, 'whitespace') + ), + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + ) + ) } + + return nok(code) } + /** @type {State} */ - return results.join('') + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition'); - function between(left, right) { - var index = -1; - var result; + if (!self.parser.defined.includes(identifier)) { + self.parser.defined.push(identifier); + } - while (++index < context.join.length) { - result = context.join[index](left, right, parent, context); + return ok(code) + } - if (result === true || result === 1) { - break - } + return nok(code) + } +} +/** @type {Tokenizer} */ - if (typeof result === 'number') { - return repeat$5('\n', 1 + Number(result)) - } +function tokenizeTitle(effects, ok, nok) { + return start + /** @type {State} */ - if (result === false) { - return '\n\n\n\n' - } + function start(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, before)(code) + : nok(code) + } + /** @type {State} */ + + function before(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + factorySpace(effects, after, 'whitespace'), + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) } - return '\n\n' + return nok(code) + } + /** @type {State} */ + + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) } } -var indentLines_1 = indentLines$4; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + */ -var eol$1 = /\r?\n|\r/g; +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +}; +/** @type {Tokenizer} */ -function indentLines$4(value, map) { - var result = []; - var start = 0; - var line = 0; - var match; +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + /** @type {State} */ - while ((match = eol$1.exec(value))) { - one(value.slice(start, match.index)); - result.push(match[0]); - start = match.index + match[0].length; - line++; + function start(code) { + effects.enter('hardBreakEscape'); + effects.enter('escapeMarker'); + effects.consume(code); + return open } + /** @type {State} */ - one(value.slice(start)); - - return result.join('') + function open(code) { + if (markdownLineEnding(code)) { + effects.exit('escapeMarker'); + effects.exit('hardBreakEscape'); + return ok(code) + } - function one(value) { - result.push(map(value, line, !value)); + return nok(code) } } -var blockquote_1 = blockquote; - -var flow$3 = containerFlow$1; -var indentLines$3 = indentLines_1; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + */ -function blockquote(node, _, context) { - var exit = context.enter('blockquote'); - var value = indentLines$3(flow$3(node, context), map$3); - exit(); - return value -} +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +}; +/** @type {Resolver} */ -function map$3(line, index, blank) { - return '>' + (blank ? '' : ' ') + line -} +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2; + let contentStart = 3; + /** @type {Token} */ -var patternInScope_1 = patternInScope$2; + let content; + /** @type {Token} */ -function patternInScope$2(stack, pattern) { - return ( - listInScope(stack, pattern.inConstruct, true) && - !listInScope(stack, pattern.notInConstruct) - ) -} + let text; // Prefix whitespace, part of the opening. -function listInScope(stack, list, none) { - var index; + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2; + } // Suffix whitespace, part of the closing. - if (!list) { - return none + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2; } - if (typeof list === 'string') { - list = [list]; + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4; } - index = -1; - - while (++index < list.length) { - if (stack.indexOf(list[index]) !== -1) { - return true - } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + }; + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + // @ts-expect-error Constants are fine to assign. + contentType: 'text' + }; + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]); } - return false + return events } +/** @type {Tokenizer} */ -var _break = hardBreak; +function tokenizeHeadingAtx(effects, ok, nok) { + const self = this; + let size = 0; + return start + /** @type {State} */ -var patternInScope$1 = patternInScope_1; + function start(code) { + effects.enter('atxHeading'); + effects.enter('atxHeadingSequence'); + return fenceOpenInside(code) + } + /** @type {State} */ -function hardBreak(node, _, context, safe) { - var index = -1; + function fenceOpenInside(code) { + if (code === 35 && size++ < 6) { + effects.consume(code); + return fenceOpenInside + } - while (++index < context.unsafe.length) { - // If we can’t put eols in this construct (setext headings, tables), use a - // space instead. - if ( - context.unsafe[index].character === '\n' && - patternInScope$1(context.stack, context.unsafe[index]) - ) { - return /[ \t]/.test(safe.before) ? '' : ' ' + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence'); + return self.interrupt ? ok(code) : headingBreak(code) } + + return nok(code) } + /** @type {State} */ - return '\\\n' -} + function headingBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence'); + return sequence(code) + } -var longestStreak_1 = longestStreak; + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading'); + return ok(code) + } -// Get the count of the longest repeating streak of `character` in `value`. -function longestStreak(value, character) { - var count = 0; - var maximum = 0; - var expected; - var index; + if (markdownSpace(code)) { + return factorySpace(effects, headingBreak, 'whitespace')(code) + } - if (typeof character !== 'string' || character.length !== 1) { - throw new Error('Expected character') + effects.enter('atxHeadingText'); + return data(code) } + /** @type {State} */ - value = String(value); - index = value.indexOf(character); - expected = index; + function sequence(code) { + if (code === 35) { + effects.consume(code); + return sequence + } - while (index !== -1) { - count++; + effects.exit('atxHeadingSequence'); + return headingBreak(code) + } + /** @type {State} */ - if (index === expected) { - if (count > maximum) { - maximum = count; - } - } else { - count = 1; + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText'); + return headingBreak(code) } - expected = index + 1; - index = value.indexOf(character, expected); + effects.consume(code); + return data } - - return maximum } -var formatCodeAsIndented_1 = formatCodeAsIndented$2; - -function formatCodeAsIndented$2(node, context) { - return ( - !context.options.fences && - node.value && - // If there’s no info… - !node.lang && - // And there’s a non-whitespace character… - /[^ \r\n]/.test(node.value) && - // And the value doesn’t start or end in a blank… - !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value) - ) -} +/** + * List of lowercase HTML tag names which when parsing HTML (flow), result + * in more relaxed rules (condition 6): because they are known blocks, the + * HTML-like syntax doesn’t have to be strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'section', + 'source', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +]; -var checkFence_1 = checkFence$1; +/** + * List of lowercase HTML tag names which when parsing HTML (flow), result in + * HTML that can include lines w/o exiting, until a closing tag also in this + * list is found (condition 1). + * + * This module is copied from: + * . + * + * Note that `textarea` is not available in `CommonMark@0.29` but has been + * merged to the primary branch and is slated to be released in the next release + * of CommonMark. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea']; -function checkFence$1(context) { - var marker = context.options.fence || '`'; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ +/** @type {Construct} */ - if (marker !== '`' && marker !== '~') { - throw new Error( - 'Cannot serialize code with `' + - marker + - '` for `options.fence`, expected `` ` `` or `~`' - ) - } +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +}; +/** @type {Construct} */ - return marker -} +const nextBlankConstruct = { + tokenize: tokenizeNextBlank, + partial: true +}; +/** @type {Resolver} */ -var patternCompile_1 = patternCompile$3; +function resolveToHtmlFlow(events) { + let index = events.length; -function patternCompile$3(pattern) { - var before; - var after; + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } - if (!pattern._compiled) { - before = pattern.before ? '(?:' + pattern.before + ')' : ''; - after = pattern.after ? '(?:' + pattern.after + ')' : ''; + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start; // Add the prefix start to the HTML line token. - if (pattern.atBreak) { - before = '[\\r\\n][\\t ]*' + before; - } + events[index + 1][1].start = events[index - 2][1].start; // Remove the line prefix. - pattern._compiled = new RegExp( - (before ? '(' + before + ')' : '') + - (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') + - pattern.character + - (after || ''), - 'g' - ); + events.splice(index - 2, 2); } - return pattern._compiled + return events } +/** @type {Tokenizer} */ -var safe_1 = safe$7; - -var patternCompile$2 = patternCompile_1; -var patternInScope = patternInScope_1; +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this; + /** @type {number} */ -function safe$7(context, input, config) { - var value = (config.before || '') + (input || '') + (config.after || ''); - var positions = []; - var result = []; - var infos = {}; - var index = -1; - var before; - var after; - var position; - var pattern; - var expression; - var match; - var start; - var end; + let kind; + /** @type {boolean} */ - while (++index < context.unsafe.length) { - pattern = context.unsafe[index]; + let startTag; + /** @type {string} */ - if (!patternInScope(context.stack, pattern)) { - continue - } + let buffer; + /** @type {number} */ - expression = patternCompile$2(pattern); + let index; + /** @type {Code} */ - while ((match = expression.exec(value))) { - before = 'before' in pattern || pattern.atBreak; - after = 'after' in pattern; - - position = match.index + (before ? match[1].length : 0); - - if (positions.indexOf(position) === -1) { - positions.push(position); - infos[position] = {before: before, after: after}; - } else { - if (infos[position].before && !before) { - infos[position].before = false; - } + let marker; + return start + /** @type {State} */ - if (infos[position].after && !after) { - infos[position].after = false; - } - } - } + function start(code) { + effects.enter('htmlFlow'); + effects.enter('htmlFlowData'); + effects.consume(code); + return open } + /** @type {State} */ - positions.sort(numerical); + function open(code) { + if (code === 33) { + effects.consume(code); + return declarationStart + } - start = config.before ? config.before.length : 0; - end = value.length - (config.after ? config.after.length : 0); - index = -1; + if (code === 47) { + effects.consume(code); + return tagCloseStart + } - while (++index < positions.length) { - position = positions[index]; + if (code === 63) { + effects.consume(code); + kind = 3; // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. - if ( - // Character before or after matched: - position < start || - position >= end - ) { - continue + return self.interrupt ? ok : continuationDeclarationInside } - // If this character is supposed to be escaped because it has a condition on - // the next character, and the next character is definitly being escaped, - // then skip this escape. - if ( - position + 1 < end && - positions[index + 1] === position + 1 && - infos[position].after && - !infos[position + 1].before && - !infos[position + 1].after - ) { - continue + if (asciiAlpha(code)) { + effects.consume(code); + buffer = String.fromCharCode(code); + startTag = true; + return tagName } - if (start !== position) { - // If we have to use a character reference, an ampersand would be more - // correct, but as backslashes only care about punctuation, either will - // do the trick - result.push(escapeBackslashes(value.slice(start, position), '\\')); + return nok(code) + } + /** @type {State} */ + + function declarationStart(code) { + if (code === 45) { + effects.consume(code); + kind = 2; + return commentOpenInside } - start = position; + if (code === 91) { + effects.consume(code); + kind = 5; + buffer = 'CDATA['; + index = 0; + return cdataOpenInside + } - if ( - /[!-/:-@[-`{-~]/.test(value.charAt(position)) && - (!config.encode || config.encode.indexOf(value.charAt(position)) === -1) - ) { - // Character escape. - result.push('\\'); - } else { - // Character reference. - result.push( - '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';' - ); - start++; + if (asciiAlpha(code)) { + effects.consume(code); + kind = 4; + return self.interrupt ? ok : continuationDeclarationInside } - } - result.push(escapeBackslashes(value.slice(start, end), config.after)); + return nok(code) + } + /** @type {State} */ - return result.join('') -} + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code); + return self.interrupt ? ok : continuationDeclarationInside + } -function numerical(a, b) { - return a - b -} + return nok(code) + } + /** @type {State} */ -function escapeBackslashes(value, after) { - var expression = /\\(?=[!-/:-@[-`{-~])/g; - var positions = []; - var results = []; - var index = -1; - var start = 0; - var whole = value + after; - var match; + function cdataOpenInside(code) { + if (code === buffer.charCodeAt(index++)) { + effects.consume(code); + return index === buffer.length + ? self.interrupt + ? ok + : continuation + : cdataOpenInside + } - while ((match = expression.exec(whole))) { - positions.push(match.index); + return nok(code) } + /** @type {State} */ - while (++index < positions.length) { - if (start !== positions[index]) { - results.push(value.slice(start, positions[index])); + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code); + buffer = String.fromCharCode(code); + return tagName } - results.push('\\'); - start = positions[index]; + return nok(code) } + /** @type {State} */ - results.push(value.slice(start)); + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + if ( + code !== 47 && + startTag && + htmlRawNames.includes(buffer.toLowerCase()) + ) { + kind = 1; + return self.interrupt ? ok(code) : continuation(code) + } - return results.join('') -} + if (htmlBlockNames.includes(buffer.toLowerCase())) { + kind = 6; -var code_1 = code$1; + if (code === 47) { + effects.consume(code); + return basicSelfClosing + } -var repeat$4 = repeatString; -var streak = longestStreak_1; -var formatCodeAsIndented$1 = formatCodeAsIndented_1; -var checkFence = checkFence_1; -var indentLines$2 = indentLines_1; -var safe$6 = safe_1; + return self.interrupt ? ok(code) : continuation(code) + } -function code$1(node, _, context) { - var marker = checkFence(context); - var raw = node.value || ''; - var suffix = marker === '`' ? 'GraveAccent' : 'Tilde'; - var value; - var sequence; - var exit; - var subexit; - - if (formatCodeAsIndented$1(node, context)) { - exit = context.enter('codeIndented'); - value = indentLines$2(raw, map$2); - } else { - sequence = repeat$4(marker, Math.max(streak(raw, marker) + 1, 3)); - exit = context.enter('codeFenced'); - value = sequence; + kind = 7; // Do not support complete HTML when interrupting - if (node.lang) { - subexit = context.enter('codeFencedLang' + suffix); - value += safe$6(context, node.lang, { - before: '`', - after: ' ', - encode: ['`'] - }); - subexit(); + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : startTag + ? completeAttributeNameBefore(code) + : completeClosingTagAfter(code) } - if (node.lang && node.meta) { - subexit = context.enter('codeFencedMeta' + suffix); - value += - ' ' + - safe$6(context, node.meta, { - before: ' ', - after: '\n', - encode: ['`'] - }); - subexit(); + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code); + buffer += String.fromCharCode(code); + return tagName } - value += '\n'; + return nok(code) + } + /** @type {State} */ - if (raw) { - value += raw + '\n'; + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code); + return self.interrupt ? ok : continuation } - value += sequence; + return nok(code) } + /** @type {State} */ - exit(); - return value -} + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code); + return completeClosingTagAfter + } -function map$2(line, _, blank) { - return (blank ? '' : ' ') + line -} + return completeEnd(code) + } + /** @type {State} */ -const AEli = "Æ"; -const AElig = "Æ"; -const AM = "&"; -const AMP = "&"; -const Aacut = "Á"; -const Aacute = "Á"; -const Abreve = "Ă"; -const Acir = "Â"; -const Acirc = "Â"; -const Acy = "А"; -const Afr = "𝔄"; -const Agrav = "À"; -const Agrave = "À"; -const Alpha = "Α"; -const Amacr = "Ā"; -const And = "⩓"; -const Aogon = "Ą"; -const Aopf = "𝔸"; -const ApplyFunction = "⁡"; -const Arin = "Å"; -const Aring = "Å"; -const Ascr = "𝒜"; -const Assign = "≔"; -const Atild = "Ã"; -const Atilde = "Ã"; -const Aum = "Ä"; -const Auml = "Ä"; -const Backslash = "∖"; -const Barv = "⫧"; -const Barwed = "⌆"; -const Bcy = "Б"; -const Because = "∵"; -const Bernoullis = "ℬ"; -const Beta = "Β"; -const Bfr = "𝔅"; -const Bopf = "𝔹"; -const Breve = "˘"; -const Bscr = "ℬ"; -const Bumpeq = "≎"; -const CHcy = "Ч"; -const COP = "©"; -const COPY = "©"; -const Cacute = "Ć"; -const Cap = "⋒"; -const CapitalDifferentialD = "ⅅ"; -const Cayleys = "ℭ"; -const Ccaron = "Č"; -const Ccedi = "Ç"; -const Ccedil = "Ç"; -const Ccirc = "Ĉ"; -const Cconint = "∰"; -const Cdot = "Ċ"; -const Cedilla = "¸"; -const CenterDot = "·"; -const Cfr = "ℭ"; -const Chi = "Χ"; -const CircleDot = "⊙"; -const CircleMinus = "⊖"; -const CirclePlus = "⊕"; -const CircleTimes = "⊗"; -const ClockwiseContourIntegral = "∲"; -const CloseCurlyDoubleQuote = "”"; -const CloseCurlyQuote = "’"; -const Colon = "∷"; -const Colone = "⩴"; -const Congruent = "≡"; -const Conint = "∯"; -const ContourIntegral = "∮"; -const Copf = "ℂ"; -const Coproduct = "∐"; -const CounterClockwiseContourIntegral = "∳"; -const Cross = "⨯"; -const Cscr = "𝒞"; -const Cup = "⋓"; -const CupCap = "≍"; -const DD = "ⅅ"; -const DDotrahd = "⤑"; -const DJcy = "Ђ"; -const DScy = "Ѕ"; -const DZcy = "Џ"; -const Dagger = "‡"; -const Darr = "↡"; -const Dashv = "⫤"; -const Dcaron = "Ď"; -const Dcy = "Д"; -const Del = "∇"; -const Delta = "Δ"; -const Dfr = "𝔇"; -const DiacriticalAcute = "´"; -const DiacriticalDot = "˙"; -const DiacriticalDoubleAcute = "˝"; -const DiacriticalGrave = "`"; -const DiacriticalTilde = "˜"; -const Diamond = "⋄"; -const DifferentialD = "ⅆ"; -const Dopf = "𝔻"; -const Dot = "¨"; -const DotDot = "⃜"; -const DotEqual = "≐"; -const DoubleContourIntegral = "∯"; -const DoubleDot = "¨"; -const DoubleDownArrow = "⇓"; -const DoubleLeftArrow = "⇐"; -const DoubleLeftRightArrow = "⇔"; -const DoubleLeftTee = "⫤"; -const DoubleLongLeftArrow = "⟸"; -const DoubleLongLeftRightArrow = "⟺"; -const DoubleLongRightArrow = "⟹"; -const DoubleRightArrow = "⇒"; -const DoubleRightTee = "⊨"; -const DoubleUpArrow = "⇑"; -const DoubleUpDownArrow = "⇕"; -const DoubleVerticalBar = "∥"; -const DownArrow = "↓"; -const DownArrowBar = "⤓"; -const DownArrowUpArrow = "⇵"; -const DownBreve = "̑"; -const DownLeftRightVector = "⥐"; -const DownLeftTeeVector = "⥞"; -const DownLeftVector = "↽"; -const DownLeftVectorBar = "⥖"; -const DownRightTeeVector = "⥟"; -const DownRightVector = "⇁"; -const DownRightVectorBar = "⥗"; -const DownTee = "⊤"; -const DownTeeArrow = "↧"; -const Downarrow = "⇓"; -const Dscr = "𝒟"; -const Dstrok = "Đ"; -const ENG = "Ŋ"; -const ET = "Ð"; -const ETH = "Ð"; -const Eacut = "É"; -const Eacute = "É"; -const Ecaron = "Ě"; -const Ecir = "Ê"; -const Ecirc = "Ê"; -const Ecy = "Э"; -const Edot = "Ė"; -const Efr = "𝔈"; -const Egrav = "È"; -const Egrave = "È"; -const Element = "∈"; -const Emacr = "Ē"; -const EmptySmallSquare = "◻"; -const EmptyVerySmallSquare = "▫"; -const Eogon = "Ę"; -const Eopf = "𝔼"; -const Epsilon = "Ε"; -const Equal = "⩵"; -const EqualTilde = "≂"; -const Equilibrium = "⇌"; -const Escr = "ℰ"; -const Esim = "⩳"; -const Eta = "Η"; -const Eum = "Ë"; -const Euml = "Ë"; -const Exists = "∃"; -const ExponentialE = "ⅇ"; -const Fcy = "Ф"; -const Ffr = "𝔉"; -const FilledSmallSquare = "◼"; -const FilledVerySmallSquare = "▪"; -const Fopf = "𝔽"; -const ForAll = "∀"; -const Fouriertrf = "ℱ"; -const Fscr = "ℱ"; -const GJcy = "Ѓ"; -const G = ">"; -const GT = ">"; -const Gamma = "Γ"; -const Gammad = "Ϝ"; -const Gbreve = "Ğ"; -const Gcedil = "Ģ"; -const Gcirc = "Ĝ"; -const Gcy = "Г"; -const Gdot = "Ġ"; -const Gfr = "𝔊"; -const Gg = "⋙"; -const Gopf = "𝔾"; -const GreaterEqual = "≥"; -const GreaterEqualLess = "⋛"; -const GreaterFullEqual = "≧"; -const GreaterGreater = "⪢"; -const GreaterLess = "≷"; -const GreaterSlantEqual = "⩾"; -const GreaterTilde = "≳"; -const Gscr = "𝒢"; -const Gt = "≫"; -const HARDcy = "Ъ"; -const Hacek = "ˇ"; -const Hat = "^"; -const Hcirc = "Ĥ"; -const Hfr = "ℌ"; -const HilbertSpace = "ℋ"; -const Hopf = "ℍ"; -const HorizontalLine = "─"; -const Hscr = "ℋ"; -const Hstrok = "Ħ"; -const HumpDownHump = "≎"; -const HumpEqual = "≏"; -const IEcy = "Е"; -const IJlig = "IJ"; -const IOcy = "Ё"; -const Iacut = "Í"; -const Iacute = "Í"; -const Icir = "Î"; -const Icirc = "Î"; -const Icy = "И"; -const Idot = "İ"; -const Ifr = "ℑ"; -const Igrav = "Ì"; -const Igrave = "Ì"; -const Im = "ℑ"; -const Imacr = "Ī"; -const ImaginaryI = "ⅈ"; -const Implies = "⇒"; -const Int = "∬"; -const Integral = "∫"; -const Intersection = "⋂"; -const InvisibleComma = "⁣"; -const InvisibleTimes = "⁢"; -const Iogon = "Į"; -const Iopf = "𝕀"; -const Iota = "Ι"; -const Iscr = "ℐ"; -const Itilde = "Ĩ"; -const Iukcy = "І"; -const Ium = "Ï"; -const Iuml = "Ï"; -const Jcirc = "Ĵ"; -const Jcy = "Й"; -const Jfr = "𝔍"; -const Jopf = "𝕁"; -const Jscr = "𝒥"; -const Jsercy = "Ј"; -const Jukcy = "Є"; -const KHcy = "Х"; -const KJcy = "Ќ"; -const Kappa = "Κ"; -const Kcedil = "Ķ"; -const Kcy = "К"; -const Kfr = "𝔎"; -const Kopf = "𝕂"; -const Kscr = "𝒦"; -const LJcy = "Љ"; -const L = "<"; -const LT = "<"; -const Lacute = "Ĺ"; -const Lambda = "Λ"; -const Lang = "⟪"; -const Laplacetrf = "ℒ"; -const Larr = "↞"; -const Lcaron = "Ľ"; -const Lcedil = "Ļ"; -const Lcy = "Л"; -const LeftAngleBracket = "⟨"; -const LeftArrow = "←"; -const LeftArrowBar = "⇤"; -const LeftArrowRightArrow = "⇆"; -const LeftCeiling = "⌈"; -const LeftDoubleBracket = "⟦"; -const LeftDownTeeVector = "⥡"; -const LeftDownVector = "⇃"; -const LeftDownVectorBar = "⥙"; -const LeftFloor = "⌊"; -const LeftRightArrow = "↔"; -const LeftRightVector = "⥎"; -const LeftTee = "⊣"; -const LeftTeeArrow = "↤"; -const LeftTeeVector = "⥚"; -const LeftTriangle = "⊲"; -const LeftTriangleBar = "⧏"; -const LeftTriangleEqual = "⊴"; -const LeftUpDownVector = "⥑"; -const LeftUpTeeVector = "⥠"; -const LeftUpVector = "↿"; -const LeftUpVectorBar = "⥘"; -const LeftVector = "↼"; -const LeftVectorBar = "⥒"; -const Leftarrow = "⇐"; -const Leftrightarrow = "⇔"; -const LessEqualGreater = "⋚"; -const LessFullEqual = "≦"; -const LessGreater = "≶"; -const LessLess = "⪡"; -const LessSlantEqual = "⩽"; -const LessTilde = "≲"; -const Lfr = "𝔏"; -const Ll = "⋘"; -const Lleftarrow = "⇚"; -const Lmidot = "Ŀ"; -const LongLeftArrow = "⟵"; -const LongLeftRightArrow = "⟷"; -const LongRightArrow = "⟶"; -const Longleftarrow = "⟸"; -const Longleftrightarrow = "⟺"; -const Longrightarrow = "⟹"; -const Lopf = "𝕃"; -const LowerLeftArrow = "↙"; -const LowerRightArrow = "↘"; -const Lscr = "ℒ"; -const Lsh = "↰"; -const Lstrok = "Ł"; -const Lt = "≪"; -const Mcy = "М"; -const MediumSpace = " "; -const Mellintrf = "ℳ"; -const Mfr = "𝔐"; -const MinusPlus = "∓"; -const Mopf = "𝕄"; -const Mscr = "ℳ"; -const Mu = "Μ"; -const NJcy = "Њ"; -const Nacute = "Ń"; -const Ncaron = "Ň"; -const Ncedil = "Ņ"; -const Ncy = "Н"; -const NegativeMediumSpace = "​"; -const NegativeThickSpace = "​"; -const NegativeThinSpace = "​"; -const NegativeVeryThinSpace = "​"; -const NestedGreaterGreater = "≫"; -const NestedLessLess = "≪"; -const NewLine = "\n"; -const Nfr = "𝔑"; -const NoBreak = "⁠"; -const NonBreakingSpace = " "; -const Nopf = "ℕ"; -const Not = "⫬"; -const NotCongruent = "≢"; -const NotCupCap = "≭"; -const NotDoubleVerticalBar = "∦"; -const NotElement = "∉"; -const NotEqual = "≠"; -const NotEqualTilde = "≂̸"; -const NotExists = "∄"; -const NotGreater = "≯"; -const NotGreaterEqual = "≱"; -const NotGreaterFullEqual = "≧̸"; -const NotGreaterGreater = "≫̸"; -const NotGreaterLess = "≹"; -const NotGreaterSlantEqual = "⩾̸"; -const NotGreaterTilde = "≵"; -const NotHumpDownHump = "≎̸"; -const NotHumpEqual = "≏̸"; -const NotLeftTriangle = "⋪"; -const NotLeftTriangleBar = "⧏̸"; -const NotLeftTriangleEqual = "⋬"; -const NotLess = "≮"; -const NotLessEqual = "≰"; -const NotLessGreater = "≸"; -const NotLessLess = "≪̸"; -const NotLessSlantEqual = "⩽̸"; -const NotLessTilde = "≴"; -const NotNestedGreaterGreater = "⪢̸"; -const NotNestedLessLess = "⪡̸"; -const NotPrecedes = "⊀"; -const NotPrecedesEqual = "⪯̸"; -const NotPrecedesSlantEqual = "⋠"; -const NotReverseElement = "∌"; -const NotRightTriangle = "⋫"; -const NotRightTriangleBar = "⧐̸"; -const NotRightTriangleEqual = "⋭"; -const NotSquareSubset = "⊏̸"; -const NotSquareSubsetEqual = "⋢"; -const NotSquareSuperset = "⊐̸"; -const NotSquareSupersetEqual = "⋣"; -const NotSubset = "⊂⃒"; -const NotSubsetEqual = "⊈"; -const NotSucceeds = "⊁"; -const NotSucceedsEqual = "⪰̸"; -const NotSucceedsSlantEqual = "⋡"; -const NotSucceedsTilde = "≿̸"; -const NotSuperset = "⊃⃒"; -const NotSupersetEqual = "⊉"; -const NotTilde = "≁"; -const NotTildeEqual = "≄"; -const NotTildeFullEqual = "≇"; -const NotTildeTilde = "≉"; -const NotVerticalBar = "∤"; -const Nscr = "𝒩"; -const Ntild = "Ñ"; -const Ntilde = "Ñ"; -const Nu = "Ν"; -const OElig = "Œ"; -const Oacut = "Ó"; -const Oacute = "Ó"; -const Ocir = "Ô"; -const Ocirc = "Ô"; -const Ocy = "О"; -const Odblac = "Ő"; -const Ofr = "𝔒"; -const Ograv = "Ò"; -const Ograve = "Ò"; -const Omacr = "Ō"; -const Omega = "Ω"; -const Omicron = "Ο"; -const Oopf = "𝕆"; -const OpenCurlyDoubleQuote = "“"; -const OpenCurlyQuote = "‘"; -const Or = "⩔"; -const Oscr = "𝒪"; -const Oslas = "Ø"; -const Oslash = "Ø"; -const Otild = "Õ"; -const Otilde = "Õ"; -const Otimes = "⨷"; -const Oum = "Ö"; -const Ouml = "Ö"; -const OverBar = "‾"; -const OverBrace = "⏞"; -const OverBracket = "⎴"; -const OverParenthesis = "⏜"; -const PartialD = "∂"; -const Pcy = "П"; -const Pfr = "𝔓"; -const Phi = "Φ"; -const Pi = "Π"; -const PlusMinus = "±"; -const Poincareplane = "ℌ"; -const Popf = "ℙ"; -const Pr = "⪻"; -const Precedes = "≺"; -const PrecedesEqual = "⪯"; -const PrecedesSlantEqual = "≼"; -const PrecedesTilde = "≾"; -const Prime = "″"; -const Product = "∏"; -const Proportion = "∷"; -const Proportional = "∝"; -const Pscr = "𝒫"; -const Psi = "Ψ"; -const QUO = "\""; -const QUOT = "\""; -const Qfr = "𝔔"; -const Qopf = "ℚ"; -const Qscr = "𝒬"; -const RBarr = "⤐"; -const RE = "®"; -const REG = "®"; -const Racute = "Ŕ"; -const Rang = "⟫"; -const Rarr = "↠"; -const Rarrtl = "⤖"; -const Rcaron = "Ř"; -const Rcedil = "Ŗ"; -const Rcy = "Р"; -const Re = "ℜ"; -const ReverseElement = "∋"; -const ReverseEquilibrium = "⇋"; -const ReverseUpEquilibrium = "⥯"; -const Rfr = "ℜ"; -const Rho = "Ρ"; -const RightAngleBracket = "⟩"; -const RightArrow = "→"; -const RightArrowBar = "⇥"; -const RightArrowLeftArrow = "⇄"; -const RightCeiling = "⌉"; -const RightDoubleBracket = "⟧"; -const RightDownTeeVector = "⥝"; -const RightDownVector = "⇂"; -const RightDownVectorBar = "⥕"; -const RightFloor = "⌋"; -const RightTee = "⊢"; -const RightTeeArrow = "↦"; -const RightTeeVector = "⥛"; -const RightTriangle = "⊳"; -const RightTriangleBar = "⧐"; -const RightTriangleEqual = "⊵"; -const RightUpDownVector = "⥏"; -const RightUpTeeVector = "⥜"; -const RightUpVector = "↾"; -const RightUpVectorBar = "⥔"; -const RightVector = "⇀"; -const RightVectorBar = "⥓"; -const Rightarrow = "⇒"; -const Ropf = "ℝ"; -const RoundImplies = "⥰"; -const Rrightarrow = "⇛"; -const Rscr = "ℛ"; -const Rsh = "↱"; -const RuleDelayed = "⧴"; -const SHCHcy = "Щ"; -const SHcy = "Ш"; -const SOFTcy = "Ь"; -const Sacute = "Ś"; -const Sc = "⪼"; -const Scaron = "Š"; -const Scedil = "Ş"; -const Scirc = "Ŝ"; -const Scy = "С"; -const Sfr = "𝔖"; -const ShortDownArrow = "↓"; -const ShortLeftArrow = "←"; -const ShortRightArrow = "→"; -const ShortUpArrow = "↑"; -const Sigma = "Σ"; -const SmallCircle = "∘"; -const Sopf = "𝕊"; -const Sqrt = "√"; -const Square = "□"; -const SquareIntersection = "⊓"; -const SquareSubset = "⊏"; -const SquareSubsetEqual = "⊑"; -const SquareSuperset = "⊐"; -const SquareSupersetEqual = "⊒"; -const SquareUnion = "⊔"; -const Sscr = "𝒮"; -const Star = "⋆"; -const Sub = "⋐"; -const Subset = "⋐"; -const SubsetEqual = "⊆"; -const Succeeds = "≻"; -const SucceedsEqual = "⪰"; -const SucceedsSlantEqual = "≽"; -const SucceedsTilde = "≿"; -const SuchThat = "∋"; -const Sum = "∑"; -const Sup = "⋑"; -const Superset = "⊃"; -const SupersetEqual = "⊇"; -const Supset = "⋑"; -const THOR = "Þ"; -const THORN = "Þ"; -const TRADE = "™"; -const TSHcy = "Ћ"; -const TScy = "Ц"; -const Tab = "\t"; -const Tau = "Τ"; -const Tcaron = "Ť"; -const Tcedil = "Ţ"; -const Tcy = "Т"; -const Tfr = "𝔗"; -const Therefore = "∴"; -const Theta = "Θ"; -const ThickSpace = "  "; -const ThinSpace = " "; -const Tilde = "∼"; -const TildeEqual = "≃"; -const TildeFullEqual = "≅"; -const TildeTilde = "≈"; -const Topf = "𝕋"; -const TripleDot = "⃛"; -const Tscr = "𝒯"; -const Tstrok = "Ŧ"; -const Uacut = "Ú"; -const Uacute = "Ú"; -const Uarr = "↟"; -const Uarrocir = "⥉"; -const Ubrcy = "Ў"; -const Ubreve = "Ŭ"; -const Ucir = "Û"; -const Ucirc = "Û"; -const Ucy = "У"; -const Udblac = "Ű"; -const Ufr = "𝔘"; -const Ugrav = "Ù"; -const Ugrave = "Ù"; -const Umacr = "Ū"; -const UnderBar = "_"; -const UnderBrace = "⏟"; -const UnderBracket = "⎵"; -const UnderParenthesis = "⏝"; -const Union = "⋃"; -const UnionPlus = "⊎"; -const Uogon = "Ų"; -const Uopf = "𝕌"; -const UpArrow = "↑"; -const UpArrowBar = "⤒"; -const UpArrowDownArrow = "⇅"; -const UpDownArrow = "↕"; -const UpEquilibrium = "⥮"; -const UpTee = "⊥"; -const UpTeeArrow = "↥"; -const Uparrow = "⇑"; -const Updownarrow = "⇕"; -const UpperLeftArrow = "↖"; -const UpperRightArrow = "↗"; -const Upsi = "ϒ"; -const Upsilon = "Υ"; -const Uring = "Ů"; -const Uscr = "𝒰"; -const Utilde = "Ũ"; -const Uum = "Ü"; -const Uuml = "Ü"; -const VDash = "⊫"; -const Vbar = "⫫"; -const Vcy = "В"; -const Vdash = "⊩"; -const Vdashl = "⫦"; -const Vee = "⋁"; -const Verbar = "‖"; -const Vert = "‖"; -const VerticalBar = "∣"; -const VerticalLine = "|"; -const VerticalSeparator = "❘"; -const VerticalTilde = "≀"; -const VeryThinSpace = " "; -const Vfr = "𝔙"; -const Vopf = "𝕍"; -const Vscr = "𝒱"; -const Vvdash = "⊪"; -const Wcirc = "Ŵ"; -const Wedge = "⋀"; -const Wfr = "𝔚"; -const Wopf = "𝕎"; -const Wscr = "𝒲"; -const Xfr = "𝔛"; -const Xi = "Ξ"; -const Xopf = "𝕏"; -const Xscr = "𝒳"; -const YAcy = "Я"; -const YIcy = "Ї"; -const YUcy = "Ю"; -const Yacut = "Ý"; -const Yacute = "Ý"; -const Ycirc = "Ŷ"; -const Ycy = "Ы"; -const Yfr = "𝔜"; -const Yopf = "𝕐"; -const Yscr = "𝒴"; -const Yuml = "Ÿ"; -const ZHcy = "Ж"; -const Zacute = "Ź"; -const Zcaron = "Ž"; -const Zcy = "З"; -const Zdot = "Ż"; -const ZeroWidthSpace = "​"; -const Zeta = "Ζ"; -const Zfr = "ℨ"; -const Zopf = "ℤ"; -const Zscr = "𝒵"; -const aacut = "á"; -const aacute = "á"; -const abreve = "ă"; -const ac = "∾"; -const acE = "∾̳"; -const acd = "∿"; -const acir = "â"; -const acirc = "â"; -const acut = "´"; -const acute = "´"; -const acy = "а"; -const aeli = "æ"; -const aelig = "æ"; -const af = "⁡"; -const afr = "𝔞"; -const agrav = "à"; -const agrave = "à"; -const alefsym = "ℵ"; -const aleph = "ℵ"; -const alpha = "α"; -const amacr = "ā"; -const amalg = "⨿"; -const am = "&"; -const amp = "&"; -const and = "∧"; -const andand = "⩕"; -const andd = "⩜"; -const andslope = "⩘"; -const andv = "⩚"; -const ang = "∠"; -const ange = "⦤"; -const angle = "∠"; -const angmsd = "∡"; -const angmsdaa = "⦨"; -const angmsdab = "⦩"; -const angmsdac = "⦪"; -const angmsdad = "⦫"; -const angmsdae = "⦬"; -const angmsdaf = "⦭"; -const angmsdag = "⦮"; -const angmsdah = "⦯"; -const angrt = "∟"; -const angrtvb = "⊾"; -const angrtvbd = "⦝"; -const angsph = "∢"; -const angst = "Å"; -const angzarr = "⍼"; -const aogon = "ą"; -const aopf = "𝕒"; -const ap = "≈"; -const apE = "⩰"; -const apacir = "⩯"; -const ape = "≊"; -const apid = "≋"; -const apos = "'"; -const approx = "≈"; -const approxeq = "≊"; -const arin = "å"; -const aring = "å"; -const ascr = "𝒶"; -const ast = "*"; -const asymp = "≈"; -const asympeq = "≍"; -const atild = "ã"; -const atilde = "ã"; -const aum = "ä"; -const auml = "ä"; -const awconint = "∳"; -const awint = "⨑"; -const bNot = "⫭"; -const backcong = "≌"; -const backepsilon = "϶"; -const backprime = "‵"; -const backsim = "∽"; -const backsimeq = "⋍"; -const barvee = "⊽"; -const barwed = "⌅"; -const barwedge = "⌅"; -const bbrk = "⎵"; -const bbrktbrk = "⎶"; -const bcong = "≌"; -const bcy = "б"; -const bdquo = "„"; -const becaus = "∵"; -const because = "∵"; -const bemptyv = "⦰"; -const bepsi = "϶"; -const bernou = "ℬ"; -const beta = "β"; -const beth = "ℶ"; -const between = "≬"; -const bfr = "𝔟"; -const bigcap = "⋂"; -const bigcirc = "◯"; -const bigcup = "⋃"; -const bigodot = "⨀"; -const bigoplus = "⨁"; -const bigotimes = "⨂"; -const bigsqcup = "⨆"; -const bigstar = "★"; -const bigtriangledown = "▽"; -const bigtriangleup = "△"; -const biguplus = "⨄"; -const bigvee = "⋁"; -const bigwedge = "⋀"; -const bkarow = "⤍"; -const blacklozenge = "⧫"; -const blacksquare = "▪"; -const blacktriangle = "▴"; -const blacktriangledown = "▾"; -const blacktriangleleft = "◂"; -const blacktriangleright = "▸"; -const blank = "␣"; -const blk12 = "▒"; -const blk14 = "░"; -const blk34 = "▓"; -const block = "█"; -const bne = "=⃥"; -const bnequiv = "≡⃥"; -const bnot = "⌐"; -const bopf = "𝕓"; -const bot = "⊥"; -const bottom = "⊥"; -const bowtie = "⋈"; -const boxDL = "╗"; -const boxDR = "╔"; -const boxDl = "╖"; -const boxDr = "╓"; -const boxH = "═"; -const boxHD = "╦"; -const boxHU = "╩"; -const boxHd = "╤"; -const boxHu = "╧"; -const boxUL = "╝"; -const boxUR = "╚"; -const boxUl = "╜"; -const boxUr = "╙"; -const boxV = "║"; -const boxVH = "╬"; -const boxVL = "╣"; -const boxVR = "╠"; -const boxVh = "╫"; -const boxVl = "╢"; -const boxVr = "╟"; -const boxbox = "⧉"; -const boxdL = "╕"; -const boxdR = "╒"; -const boxdl = "┐"; -const boxdr = "┌"; -const boxh = "─"; -const boxhD = "╥"; -const boxhU = "╨"; -const boxhd = "┬"; -const boxhu = "┴"; -const boxminus = "⊟"; -const boxplus = "⊞"; -const boxtimes = "⊠"; -const boxuL = "╛"; -const boxuR = "╘"; -const boxul = "┘"; -const boxur = "└"; -const boxv = "│"; -const boxvH = "╪"; -const boxvL = "╡"; -const boxvR = "╞"; -const boxvh = "┼"; -const boxvl = "┤"; -const boxvr = "├"; -const bprime = "‵"; -const breve = "˘"; -const brvba = "¦"; -const brvbar = "¦"; -const bscr = "𝒷"; -const bsemi = "⁏"; -const bsim = "∽"; -const bsime = "⋍"; -const bsol = "\\"; -const bsolb = "⧅"; -const bsolhsub = "⟈"; -const bull = "•"; -const bullet = "•"; -const bump = "≎"; -const bumpE = "⪮"; -const bumpe = "≏"; -const bumpeq = "≏"; -const cacute = "ć"; -const cap = "∩"; -const capand = "⩄"; -const capbrcup = "⩉"; -const capcap = "⩋"; -const capcup = "⩇"; -const capdot = "⩀"; -const caps = "∩︀"; -const caret = "⁁"; -const caron = "ˇ"; -const ccaps = "⩍"; -const ccaron = "č"; -const ccedi = "ç"; -const ccedil = "ç"; -const ccirc = "ĉ"; -const ccups = "⩌"; -const ccupssm = "⩐"; -const cdot = "ċ"; -const cedi = "¸"; -const cedil = "¸"; -const cemptyv = "⦲"; -const cen = "¢"; -const cent = "¢"; -const centerdot = "·"; -const cfr = "𝔠"; -const chcy = "ч"; -const check$1 = "✓"; -const checkmark = "✓"; -const chi = "χ"; -const cir = "○"; -const cirE = "⧃"; -const circ = "ˆ"; -const circeq = "≗"; -const circlearrowleft = "↺"; -const circlearrowright = "↻"; -const circledR = "®"; -const circledS = "Ⓢ"; -const circledast = "⊛"; -const circledcirc = "⊚"; -const circleddash = "⊝"; -const cire = "≗"; -const cirfnint = "⨐"; -const cirmid = "⫯"; -const cirscir = "⧂"; -const clubs = "♣"; -const clubsuit = "♣"; -const colon = ":"; -const colone = "≔"; -const coloneq = "≔"; -const comma = ","; -const commat = "@"; -const comp = "∁"; -const compfn = "∘"; -const complement = "∁"; -const complexes = "ℂ"; -const cong = "≅"; -const congdot = "⩭"; -const conint = "∮"; -const copf = "𝕔"; -const coprod = "∐"; -const cop = "©"; -const copy = "©"; -const copysr = "℗"; -const crarr = "↵"; -const cross = "✗"; -const cscr = "𝒸"; -const csub = "⫏"; -const csube = "⫑"; -const csup = "⫐"; -const csupe = "⫒"; -const ctdot = "⋯"; -const cudarrl = "⤸"; -const cudarrr = "⤵"; -const cuepr = "⋞"; -const cuesc = "⋟"; -const cularr = "↶"; -const cularrp = "⤽"; -const cup = "∪"; -const cupbrcap = "⩈"; -const cupcap = "⩆"; -const cupcup = "⩊"; -const cupdot = "⊍"; -const cupor = "⩅"; -const cups = "∪︀"; -const curarr = "↷"; -const curarrm = "⤼"; -const curlyeqprec = "⋞"; -const curlyeqsucc = "⋟"; -const curlyvee = "⋎"; -const curlywedge = "⋏"; -const curre = "¤"; -const curren = "¤"; -const curvearrowleft = "↶"; -const curvearrowright = "↷"; -const cuvee = "⋎"; -const cuwed = "⋏"; -const cwconint = "∲"; -const cwint = "∱"; -const cylcty = "⌭"; -const dArr = "⇓"; -const dHar = "⥥"; -const dagger = "†"; -const daleth = "ℸ"; -const darr = "↓"; -const dash = "‐"; -const dashv = "⊣"; -const dbkarow = "⤏"; -const dblac = "˝"; -const dcaron = "ď"; -const dcy = "д"; -const dd = "ⅆ"; -const ddagger = "‡"; -const ddarr = "⇊"; -const ddotseq = "⩷"; -const de = "°"; -const deg = "°"; -const delta = "δ"; -const demptyv = "⦱"; -const dfisht = "⥿"; -const dfr = "𝔡"; -const dharl = "⇃"; -const dharr = "⇂"; -const diam = "⋄"; -const diamond = "⋄"; -const diamondsuit = "♦"; -const diams = "♦"; -const die = "¨"; -const digamma = "ϝ"; -const disin = "⋲"; -const div = "÷"; -const divid = "÷"; -const divide = "÷"; -const divideontimes = "⋇"; -const divonx = "⋇"; -const djcy = "ђ"; -const dlcorn = "⌞"; -const dlcrop = "⌍"; -const dollar = "$"; -const dopf = "𝕕"; -const dot = "˙"; -const doteq = "≐"; -const doteqdot = "≑"; -const dotminus = "∸"; -const dotplus = "∔"; -const dotsquare = "⊡"; -const doublebarwedge = "⌆"; -const downarrow = "↓"; -const downdownarrows = "⇊"; -const downharpoonleft = "⇃"; -const downharpoonright = "⇂"; -const drbkarow = "⤐"; -const drcorn = "⌟"; -const drcrop = "⌌"; -const dscr = "𝒹"; -const dscy = "ѕ"; -const dsol = "⧶"; -const dstrok = "đ"; -const dtdot = "⋱"; -const dtri = "▿"; -const dtrif = "▾"; -const duarr = "⇵"; -const duhar = "⥯"; -const dwangle = "⦦"; -const dzcy = "џ"; -const dzigrarr = "⟿"; -const eDDot = "⩷"; -const eDot = "≑"; -const eacut = "é"; -const eacute = "é"; -const easter = "⩮"; -const ecaron = "ě"; -const ecir = "ê"; -const ecirc = "ê"; -const ecolon = "≕"; -const ecy = "э"; -const edot = "ė"; -const ee = "ⅇ"; -const efDot = "≒"; -const efr = "𝔢"; -const eg = "⪚"; -const egrav = "è"; -const egrave = "è"; -const egs = "⪖"; -const egsdot = "⪘"; -const el = "⪙"; -const elinters = "⏧"; -const ell = "ℓ"; -const els = "⪕"; -const elsdot = "⪗"; -const emacr = "ē"; -const empty = "∅"; -const emptyset = "∅"; -const emptyv = "∅"; -const emsp13 = " "; -const emsp14 = " "; -const emsp = " "; -const eng = "ŋ"; -const ensp = " "; -const eogon = "ę"; -const eopf = "𝕖"; -const epar = "⋕"; -const eparsl = "⧣"; -const eplus = "⩱"; -const epsi = "ε"; -const epsilon = "ε"; -const epsiv = "ϵ"; -const eqcirc = "≖"; -const eqcolon = "≕"; -const eqsim = "≂"; -const eqslantgtr = "⪖"; -const eqslantless = "⪕"; -const equals = "="; -const equest = "≟"; -const equiv = "≡"; -const equivDD = "⩸"; -const eqvparsl = "⧥"; -const erDot = "≓"; -const erarr = "⥱"; -const escr = "ℯ"; -const esdot = "≐"; -const esim = "≂"; -const eta = "η"; -const et = "ð"; -const eth = "ð"; -const eum = "ë"; -const euml = "ë"; -const euro = "€"; -const excl = "!"; -const exist = "∃"; -const expectation = "ℰ"; -const exponentiale = "ⅇ"; -const fallingdotseq = "≒"; -const fcy = "ф"; -const female = "♀"; -const ffilig = "ffi"; -const fflig = "ff"; -const ffllig = "ffl"; -const ffr = "𝔣"; -const filig = "fi"; -const fjlig = "fj"; -const flat = "♭"; -const fllig = "fl"; -const fltns = "▱"; -const fnof = "ƒ"; -const fopf = "𝕗"; -const forall = "∀"; -const fork = "⋔"; -const forkv = "⫙"; -const fpartint = "⨍"; -const frac1 = "¼"; -const frac12 = "½"; -const frac13 = "⅓"; -const frac14 = "¼"; -const frac15 = "⅕"; -const frac16 = "⅙"; -const frac18 = "⅛"; -const frac23 = "⅔"; -const frac25 = "⅖"; -const frac3 = "¾"; -const frac34 = "¾"; -const frac35 = "⅗"; -const frac38 = "⅜"; -const frac45 = "⅘"; -const frac56 = "⅚"; -const frac58 = "⅝"; -const frac78 = "⅞"; -const frasl = "⁄"; -const frown = "⌢"; -const fscr = "𝒻"; -const gE = "≧"; -const gEl = "⪌"; -const gacute = "ǵ"; -const gamma = "γ"; -const gammad = "ϝ"; -const gap = "⪆"; -const gbreve = "ğ"; -const gcirc = "ĝ"; -const gcy = "г"; -const gdot = "ġ"; -const ge = "≥"; -const gel = "⋛"; -const geq = "≥"; -const geqq = "≧"; -const geqslant = "⩾"; -const ges = "⩾"; -const gescc = "⪩"; -const gesdot = "⪀"; -const gesdoto = "⪂"; -const gesdotol = "⪄"; -const gesl = "⋛︀"; -const gesles = "⪔"; -const gfr = "𝔤"; -const gg = "≫"; -const ggg = "⋙"; -const gimel = "ℷ"; -const gjcy = "ѓ"; -const gl = "≷"; -const glE = "⪒"; -const gla = "⪥"; -const glj = "⪤"; -const gnE = "≩"; -const gnap = "⪊"; -const gnapprox = "⪊"; -const gne = "⪈"; -const gneq = "⪈"; -const gneqq = "≩"; -const gnsim = "⋧"; -const gopf = "𝕘"; -const grave = "`"; -const gscr = "ℊ"; -const gsim = "≳"; -const gsime = "⪎"; -const gsiml = "⪐"; -const g = ">"; -const gt = ">"; -const gtcc = "⪧"; -const gtcir = "⩺"; -const gtdot = "⋗"; -const gtlPar = "⦕"; -const gtquest = "⩼"; -const gtrapprox = "⪆"; -const gtrarr = "⥸"; -const gtrdot = "⋗"; -const gtreqless = "⋛"; -const gtreqqless = "⪌"; -const gtrless = "≷"; -const gtrsim = "≳"; -const gvertneqq = "≩︀"; -const gvnE = "≩︀"; -const hArr = "⇔"; -const hairsp = " "; -const half = "½"; -const hamilt = "ℋ"; -const hardcy = "ъ"; -const harr = "↔"; -const harrcir = "⥈"; -const harrw = "↭"; -const hbar = "ℏ"; -const hcirc = "ĥ"; -const hearts = "♥"; -const heartsuit = "♥"; -const hellip = "…"; -const hercon = "⊹"; -const hfr = "𝔥"; -const hksearow = "⤥"; -const hkswarow = "⤦"; -const hoarr = "⇿"; -const homtht = "∻"; -const hookleftarrow = "↩"; -const hookrightarrow = "↪"; -const hopf = "𝕙"; -const horbar = "―"; -const hscr = "𝒽"; -const hslash = "ℏ"; -const hstrok = "ħ"; -const hybull = "⁃"; -const hyphen = "‐"; -const iacut = "í"; -const iacute = "í"; -const ic = "⁣"; -const icir = "î"; -const icirc = "î"; -const icy = "и"; -const iecy = "е"; -const iexc = "¡"; -const iexcl = "¡"; -const iff = "⇔"; -const ifr = "𝔦"; -const igrav = "ì"; -const igrave = "ì"; -const ii = "ⅈ"; -const iiiint = "⨌"; -const iiint = "∭"; -const iinfin = "⧜"; -const iiota = "℩"; -const ijlig = "ij"; -const imacr = "ī"; -const image$1 = "ℑ"; -const imagline = "ℐ"; -const imagpart = "ℑ"; -const imath = "ı"; -const imof = "⊷"; -const imped = "Ƶ"; -const incare = "℅"; -const infin = "∞"; -const infintie = "⧝"; -const inodot = "ı"; -const int$1 = "∫"; -const intcal = "⊺"; -const integers = "ℤ"; -const intercal = "⊺"; -const intlarhk = "⨗"; -const intprod = "⨼"; -const iocy = "ё"; -const iogon = "į"; -const iopf = "𝕚"; -const iota = "ι"; -const iprod = "⨼"; -const iques = "¿"; -const iquest = "¿"; -const iscr = "𝒾"; -const isin = "∈"; -const isinE = "⋹"; -const isindot = "⋵"; -const isins = "⋴"; -const isinsv = "⋳"; -const isinv = "∈"; -const it = "⁢"; -const itilde = "ĩ"; -const iukcy = "і"; -const ium = "ï"; -const iuml = "ï"; -const jcirc = "ĵ"; -const jcy = "й"; -const jfr = "𝔧"; -const jmath = "ȷ"; -const jopf = "𝕛"; -const jscr = "𝒿"; -const jsercy = "ј"; -const jukcy = "є"; -const kappa = "κ"; -const kappav = "ϰ"; -const kcedil = "ķ"; -const kcy = "к"; -const kfr = "𝔨"; -const kgreen = "ĸ"; -const khcy = "х"; -const kjcy = "ќ"; -const kopf = "𝕜"; -const kscr = "𝓀"; -const lAarr = "⇚"; -const lArr = "⇐"; -const lAtail = "⤛"; -const lBarr = "⤎"; -const lE = "≦"; -const lEg = "⪋"; -const lHar = "⥢"; -const lacute = "ĺ"; -const laemptyv = "⦴"; -const lagran = "ℒ"; -const lambda = "λ"; -const lang = "⟨"; -const langd = "⦑"; -const langle = "⟨"; -const lap = "⪅"; -const laqu = "«"; -const laquo = "«"; -const larr = "←"; -const larrb = "⇤"; -const larrbfs = "⤟"; -const larrfs = "⤝"; -const larrhk = "↩"; -const larrlp = "↫"; -const larrpl = "⤹"; -const larrsim = "⥳"; -const larrtl = "↢"; -const lat = "⪫"; -const latail = "⤙"; -const late = "⪭"; -const lates = "⪭︀"; -const lbarr = "⤌"; -const lbbrk = "❲"; -const lbrace = "{"; -const lbrack = "["; -const lbrke = "⦋"; -const lbrksld = "⦏"; -const lbrkslu = "⦍"; -const lcaron = "ľ"; -const lcedil = "ļ"; -const lceil = "⌈"; -const lcub = "{"; -const lcy = "л"; -const ldca = "⤶"; -const ldquo = "“"; -const ldquor = "„"; -const ldrdhar = "⥧"; -const ldrushar = "⥋"; -const ldsh = "↲"; -const le = "≤"; -const leftarrow = "←"; -const leftarrowtail = "↢"; -const leftharpoondown = "↽"; -const leftharpoonup = "↼"; -const leftleftarrows = "⇇"; -const leftrightarrow = "↔"; -const leftrightarrows = "⇆"; -const leftrightharpoons = "⇋"; -const leftrightsquigarrow = "↭"; -const leftthreetimes = "⋋"; -const leg = "⋚"; -const leq = "≤"; -const leqq = "≦"; -const leqslant = "⩽"; -const les = "⩽"; -const lescc = "⪨"; -const lesdot = "⩿"; -const lesdoto = "⪁"; -const lesdotor = "⪃"; -const lesg = "⋚︀"; -const lesges = "⪓"; -const lessapprox = "⪅"; -const lessdot = "⋖"; -const lesseqgtr = "⋚"; -const lesseqqgtr = "⪋"; -const lessgtr = "≶"; -const lesssim = "≲"; -const lfisht = "⥼"; -const lfloor = "⌊"; -const lfr = "𝔩"; -const lg = "≶"; -const lgE = "⪑"; -const lhard = "↽"; -const lharu = "↼"; -const lharul = "⥪"; -const lhblk = "▄"; -const ljcy = "љ"; -const ll = "≪"; -const llarr = "⇇"; -const llcorner = "⌞"; -const llhard = "⥫"; -const lltri = "◺"; -const lmidot = "ŀ"; -const lmoust = "⎰"; -const lmoustache = "⎰"; -const lnE = "≨"; -const lnap = "⪉"; -const lnapprox = "⪉"; -const lne = "⪇"; -const lneq = "⪇"; -const lneqq = "≨"; -const lnsim = "⋦"; -const loang = "⟬"; -const loarr = "⇽"; -const lobrk = "⟦"; -const longleftarrow = "⟵"; -const longleftrightarrow = "⟷"; -const longmapsto = "⟼"; -const longrightarrow = "⟶"; -const looparrowleft = "↫"; -const looparrowright = "↬"; -const lopar = "⦅"; -const lopf = "𝕝"; -const loplus = "⨭"; -const lotimes = "⨴"; -const lowast = "∗"; -const lowbar = "_"; -const loz = "◊"; -const lozenge = "◊"; -const lozf = "⧫"; -const lpar = "("; -const lparlt = "⦓"; -const lrarr = "⇆"; -const lrcorner = "⌟"; -const lrhar = "⇋"; -const lrhard = "⥭"; -const lrm = "‎"; -const lrtri = "⊿"; -const lsaquo = "‹"; -const lscr = "𝓁"; -const lsh = "↰"; -const lsim = "≲"; -const lsime = "⪍"; -const lsimg = "⪏"; -const lsqb = "["; -const lsquo = "‘"; -const lsquor = "‚"; -const lstrok = "ł"; -const l = "<"; -const lt$1 = "<"; -const ltcc = "⪦"; -const ltcir = "⩹"; -const ltdot = "⋖"; -const lthree = "⋋"; -const ltimes = "⋉"; -const ltlarr = "⥶"; -const ltquest = "⩻"; -const ltrPar = "⦖"; -const ltri = "◃"; -const ltrie = "⊴"; -const ltrif = "◂"; -const lurdshar = "⥊"; -const luruhar = "⥦"; -const lvertneqq = "≨︀"; -const lvnE = "≨︀"; -const mDDot = "∺"; -const mac = "¯"; -const macr = "¯"; -const male = "♂"; -const malt = "✠"; -const maltese = "✠"; -const map$1 = "↦"; -const mapsto = "↦"; -const mapstodown = "↧"; -const mapstoleft = "↤"; -const mapstoup = "↥"; -const marker = "▮"; -const mcomma = "⨩"; -const mcy = "м"; -const mdash = "—"; -const measuredangle = "∡"; -const mfr = "𝔪"; -const mho = "℧"; -const micr = "µ"; -const micro = "µ"; -const mid = "∣"; -const midast = "*"; -const midcir = "⫰"; -const middo = "·"; -const middot = "·"; -const minus = "−"; -const minusb = "⊟"; -const minusd = "∸"; -const minusdu = "⨪"; -const mlcp = "⫛"; -const mldr = "…"; -const mnplus = "∓"; -const models = "⊧"; -const mopf = "𝕞"; -const mp = "∓"; -const mscr = "𝓂"; -const mstpos = "∾"; -const mu = "μ"; -const multimap = "⊸"; -const mumap = "⊸"; -const nGg = "⋙̸"; -const nGt = "≫⃒"; -const nGtv = "≫̸"; -const nLeftarrow = "⇍"; -const nLeftrightarrow = "⇎"; -const nLl = "⋘̸"; -const nLt = "≪⃒"; -const nLtv = "≪̸"; -const nRightarrow = "⇏"; -const nVDash = "⊯"; -const nVdash = "⊮"; -const nabla = "∇"; -const nacute = "ń"; -const nang = "∠⃒"; -const nap = "≉"; -const napE = "⩰̸"; -const napid = "≋̸"; -const napos = "ʼn"; -const napprox = "≉"; -const natur = "♮"; -const natural = "♮"; -const naturals = "ℕ"; -const nbs = " "; -const nbsp = " "; -const nbump = "≎̸"; -const nbumpe = "≏̸"; -const ncap = "⩃"; -const ncaron = "ň"; -const ncedil = "ņ"; -const ncong = "≇"; -const ncongdot = "⩭̸"; -const ncup = "⩂"; -const ncy = "н"; -const ndash = "–"; -const ne = "≠"; -const neArr = "⇗"; -const nearhk = "⤤"; -const nearr = "↗"; -const nearrow = "↗"; -const nedot = "≐̸"; -const nequiv = "≢"; -const nesear = "⤨"; -const nesim = "≂̸"; -const nexist = "∄"; -const nexists = "∄"; -const nfr = "𝔫"; -const ngE = "≧̸"; -const nge = "≱"; -const ngeq = "≱"; -const ngeqq = "≧̸"; -const ngeqslant = "⩾̸"; -const nges = "⩾̸"; -const ngsim = "≵"; -const ngt = "≯"; -const ngtr = "≯"; -const nhArr = "⇎"; -const nharr = "↮"; -const nhpar = "⫲"; -const ni = "∋"; -const nis = "⋼"; -const nisd = "⋺"; -const niv = "∋"; -const njcy = "њ"; -const nlArr = "⇍"; -const nlE = "≦̸"; -const nlarr = "↚"; -const nldr = "‥"; -const nle = "≰"; -const nleftarrow = "↚"; -const nleftrightarrow = "↮"; -const nleq = "≰"; -const nleqq = "≦̸"; -const nleqslant = "⩽̸"; -const nles = "⩽̸"; -const nless = "≮"; -const nlsim = "≴"; -const nlt = "≮"; -const nltri = "⋪"; -const nltrie = "⋬"; -const nmid = "∤"; -const nopf = "𝕟"; -const no = "¬"; -const not = "¬"; -const notin = "∉"; -const notinE = "⋹̸"; -const notindot = "⋵̸"; -const notinva = "∉"; -const notinvb = "⋷"; -const notinvc = "⋶"; -const notni = "∌"; -const notniva = "∌"; -const notnivb = "⋾"; -const notnivc = "⋽"; -const npar = "∦"; -const nparallel = "∦"; -const nparsl = "⫽⃥"; -const npart = "∂̸"; -const npolint = "⨔"; -const npr = "⊀"; -const nprcue = "⋠"; -const npre = "⪯̸"; -const nprec = "⊀"; -const npreceq = "⪯̸"; -const nrArr = "⇏"; -const nrarr = "↛"; -const nrarrc = "⤳̸"; -const nrarrw = "↝̸"; -const nrightarrow = "↛"; -const nrtri = "⋫"; -const nrtrie = "⋭"; -const nsc = "⊁"; -const nsccue = "⋡"; -const nsce = "⪰̸"; -const nscr = "𝓃"; -const nshortmid = "∤"; -const nshortparallel = "∦"; -const nsim = "≁"; -const nsime = "≄"; -const nsimeq = "≄"; -const nsmid = "∤"; -const nspar = "∦"; -const nsqsube = "⋢"; -const nsqsupe = "⋣"; -const nsub = "⊄"; -const nsubE = "⫅̸"; -const nsube = "⊈"; -const nsubset = "⊂⃒"; -const nsubseteq = "⊈"; -const nsubseteqq = "⫅̸"; -const nsucc = "⊁"; -const nsucceq = "⪰̸"; -const nsup = "⊅"; -const nsupE = "⫆̸"; -const nsupe = "⊉"; -const nsupset = "⊃⃒"; -const nsupseteq = "⊉"; -const nsupseteqq = "⫆̸"; -const ntgl = "≹"; -const ntild = "ñ"; -const ntilde = "ñ"; -const ntlg = "≸"; -const ntriangleleft = "⋪"; -const ntrianglelefteq = "⋬"; -const ntriangleright = "⋫"; -const ntrianglerighteq = "⋭"; -const nu = "ν"; -const num = "#"; -const numero = "№"; -const numsp = " "; -const nvDash = "⊭"; -const nvHarr = "⤄"; -const nvap = "≍⃒"; -const nvdash = "⊬"; -const nvge = "≥⃒"; -const nvgt = ">⃒"; -const nvinfin = "⧞"; -const nvlArr = "⤂"; -const nvle = "≤⃒"; -const nvlt = "<⃒"; -const nvltrie = "⊴⃒"; -const nvrArr = "⤃"; -const nvrtrie = "⊵⃒"; -const nvsim = "∼⃒"; -const nwArr = "⇖"; -const nwarhk = "⤣"; -const nwarr = "↖"; -const nwarrow = "↖"; -const nwnear = "⤧"; -const oS = "Ⓢ"; -const oacut = "ó"; -const oacute = "ó"; -const oast = "⊛"; -const ocir = "ô"; -const ocirc = "ô"; -const ocy = "о"; -const odash = "⊝"; -const odblac = "ő"; -const odiv = "⨸"; -const odot = "⊙"; -const odsold = "⦼"; -const oelig = "œ"; -const ofcir = "⦿"; -const ofr = "𝔬"; -const ogon = "˛"; -const ograv = "ò"; -const ograve = "ò"; -const ogt = "⧁"; -const ohbar = "⦵"; -const ohm = "Ω"; -const oint = "∮"; -const olarr = "↺"; -const olcir = "⦾"; -const olcross = "⦻"; -const oline = "‾"; -const olt = "⧀"; -const omacr = "ō"; -const omega = "ω"; -const omicron = "ο"; -const omid = "⦶"; -const ominus = "⊖"; -const oopf = "𝕠"; -const opar = "⦷"; -const operp = "⦹"; -const oplus = "⊕"; -const or = "∨"; -const orarr = "↻"; -const ord = "º"; -const order = "ℴ"; -const orderof = "ℴ"; -const ordf = "ª"; -const ordm = "º"; -const origof = "⊶"; -const oror = "⩖"; -const orslope = "⩗"; -const orv = "⩛"; -const oscr = "ℴ"; -const oslas = "ø"; -const oslash = "ø"; -const osol = "⊘"; -const otild = "õ"; -const otilde = "õ"; -const otimes = "⊗"; -const otimesas = "⨶"; -const oum = "ö"; -const ouml = "ö"; -const ovbar = "⌽"; -const par = "¶"; -const para = "¶"; -const parallel = "∥"; -const parsim = "⫳"; -const parsl = "⫽"; -const part = "∂"; -const pcy = "п"; -const percnt = "%"; -const period = "."; -const permil = "‰"; -const perp = "⊥"; -const pertenk = "‱"; -const pfr = "𝔭"; -const phi = "φ"; -const phiv = "ϕ"; -const phmmat = "ℳ"; -const phone = "☎"; -const pi = "π"; -const pitchfork = "⋔"; -const piv = "ϖ"; -const planck = "ℏ"; -const planckh = "ℎ"; -const plankv = "ℏ"; -const plus = "+"; -const plusacir = "⨣"; -const plusb = "⊞"; -const pluscir = "⨢"; -const plusdo = "∔"; -const plusdu = "⨥"; -const pluse = "⩲"; -const plusm = "±"; -const plusmn = "±"; -const plussim = "⨦"; -const plustwo = "⨧"; -const pm = "±"; -const pointint = "⨕"; -const popf = "𝕡"; -const poun = "£"; -const pound = "£"; -const pr = "≺"; -const prE = "⪳"; -const prap = "⪷"; -const prcue = "≼"; -const pre = "⪯"; -const prec = "≺"; -const precapprox = "⪷"; -const preccurlyeq = "≼"; -const preceq = "⪯"; -const precnapprox = "⪹"; -const precneqq = "⪵"; -const precnsim = "⋨"; -const precsim = "≾"; -const prime = "′"; -const primes = "ℙ"; -const prnE = "⪵"; -const prnap = "⪹"; -const prnsim = "⋨"; -const prod = "∏"; -const profalar = "⌮"; -const profline = "⌒"; -const profsurf = "⌓"; -const prop = "∝"; -const propto = "∝"; -const prsim = "≾"; -const prurel = "⊰"; -const pscr = "𝓅"; -const psi = "ψ"; -const puncsp = " "; -const qfr = "𝔮"; -const qint = "⨌"; -const qopf = "𝕢"; -const qprime = "⁗"; -const qscr = "𝓆"; -const quaternions = "ℍ"; -const quatint = "⨖"; -const quest = "?"; -const questeq = "≟"; -const quo = "\""; -const quot = "\""; -const rAarr = "⇛"; -const rArr = "⇒"; -const rAtail = "⤜"; -const rBarr = "⤏"; -const rHar = "⥤"; -const race = "∽̱"; -const racute = "ŕ"; -const radic = "√"; -const raemptyv = "⦳"; -const rang = "⟩"; -const rangd = "⦒"; -const range = "⦥"; -const rangle = "⟩"; -const raqu = "»"; -const raquo = "»"; -const rarr = "→"; -const rarrap = "⥵"; -const rarrb = "⇥"; -const rarrbfs = "⤠"; -const rarrc = "⤳"; -const rarrfs = "⤞"; -const rarrhk = "↪"; -const rarrlp = "↬"; -const rarrpl = "⥅"; -const rarrsim = "⥴"; -const rarrtl = "↣"; -const rarrw = "↝"; -const ratail = "⤚"; -const ratio = "∶"; -const rationals = "ℚ"; -const rbarr = "⤍"; -const rbbrk = "❳"; -const rbrace = "}"; -const rbrack = "]"; -const rbrke = "⦌"; -const rbrksld = "⦎"; -const rbrkslu = "⦐"; -const rcaron = "ř"; -const rcedil = "ŗ"; -const rceil = "⌉"; -const rcub = "}"; -const rcy = "р"; -const rdca = "⤷"; -const rdldhar = "⥩"; -const rdquo = "”"; -const rdquor = "”"; -const rdsh = "↳"; -const real = "ℜ"; -const realine = "ℛ"; -const realpart = "ℜ"; -const reals = "ℝ"; -const rect = "▭"; -const re$4 = "®"; -const reg = "®"; -const rfisht = "⥽"; -const rfloor = "⌋"; -const rfr = "𝔯"; -const rhard = "⇁"; -const rharu = "⇀"; -const rharul = "⥬"; -const rho = "ρ"; -const rhov = "ϱ"; -const rightarrow = "→"; -const rightarrowtail = "↣"; -const rightharpoondown = "⇁"; -const rightharpoonup = "⇀"; -const rightleftarrows = "⇄"; -const rightleftharpoons = "⇌"; -const rightrightarrows = "⇉"; -const rightsquigarrow = "↝"; -const rightthreetimes = "⋌"; -const ring = "˚"; -const risingdotseq = "≓"; -const rlarr = "⇄"; -const rlhar = "⇌"; -const rlm = "‏"; -const rmoust = "⎱"; -const rmoustache = "⎱"; -const rnmid = "⫮"; -const roang = "⟭"; -const roarr = "⇾"; -const robrk = "⟧"; -const ropar = "⦆"; -const ropf = "𝕣"; -const roplus = "⨮"; -const rotimes = "⨵"; -const rpar = ")"; -const rpargt = "⦔"; -const rppolint = "⨒"; -const rrarr = "⇉"; -const rsaquo = "›"; -const rscr = "𝓇"; -const rsh = "↱"; -const rsqb = "]"; -const rsquo = "’"; -const rsquor = "’"; -const rthree = "⋌"; -const rtimes = "⋊"; -const rtri = "▹"; -const rtrie = "⊵"; -const rtrif = "▸"; -const rtriltri = "⧎"; -const ruluhar = "⥨"; -const rx = "℞"; -const sacute = "ś"; -const sbquo = "‚"; -const sc = "≻"; -const scE = "⪴"; -const scap = "⪸"; -const scaron = "š"; -const sccue = "≽"; -const sce = "⪰"; -const scedil = "ş"; -const scirc = "ŝ"; -const scnE = "⪶"; -const scnap = "⪺"; -const scnsim = "⋩"; -const scpolint = "⨓"; -const scsim = "≿"; -const scy = "с"; -const sdot = "⋅"; -const sdotb = "⊡"; -const sdote = "⩦"; -const seArr = "⇘"; -const searhk = "⤥"; -const searr = "↘"; -const searrow = "↘"; -const sec = "§"; -const sect = "§"; -const semi = ";"; -const seswar = "⤩"; -const setminus = "∖"; -const setmn = "∖"; -const sext = "✶"; -const sfr = "𝔰"; -const sfrown = "⌢"; -const sharp = "♯"; -const shchcy = "щ"; -const shcy = "ш"; -const shortmid = "∣"; -const shortparallel = "∥"; -const sh = "­"; -const shy = "­"; -const sigma = "σ"; -const sigmaf = "ς"; -const sigmav = "ς"; -const sim = "∼"; -const simdot = "⩪"; -const sime = "≃"; -const simeq = "≃"; -const simg = "⪞"; -const simgE = "⪠"; -const siml = "⪝"; -const simlE = "⪟"; -const simne = "≆"; -const simplus = "⨤"; -const simrarr = "⥲"; -const slarr = "←"; -const smallsetminus = "∖"; -const smashp = "⨳"; -const smeparsl = "⧤"; -const smid = "∣"; -const smile = "⌣"; -const smt = "⪪"; -const smte = "⪬"; -const smtes = "⪬︀"; -const softcy = "ь"; -const sol = "/"; -const solb = "⧄"; -const solbar = "⌿"; -const sopf = "𝕤"; -const spades = "♠"; -const spadesuit = "♠"; -const spar = "∥"; -const sqcap = "⊓"; -const sqcaps = "⊓︀"; -const sqcup = "⊔"; -const sqcups = "⊔︀"; -const sqsub = "⊏"; -const sqsube = "⊑"; -const sqsubset = "⊏"; -const sqsubseteq = "⊑"; -const sqsup = "⊐"; -const sqsupe = "⊒"; -const sqsupset = "⊐"; -const sqsupseteq = "⊒"; -const squ = "□"; -const square = "□"; -const squarf = "▪"; -const squf = "▪"; -const srarr = "→"; -const sscr = "𝓈"; -const ssetmn = "∖"; -const ssmile = "⌣"; -const sstarf = "⋆"; -const star = "☆"; -const starf = "★"; -const straightepsilon = "ϵ"; -const straightphi = "ϕ"; -const strns = "¯"; -const sub = "⊂"; -const subE = "⫅"; -const subdot = "⪽"; -const sube = "⊆"; -const subedot = "⫃"; -const submult = "⫁"; -const subnE = "⫋"; -const subne = "⊊"; -const subplus = "⪿"; -const subrarr = "⥹"; -const subset = "⊂"; -const subseteq = "⊆"; -const subseteqq = "⫅"; -const subsetneq = "⊊"; -const subsetneqq = "⫋"; -const subsim = "⫇"; -const subsub = "⫕"; -const subsup = "⫓"; -const succ = "≻"; -const succapprox = "⪸"; -const succcurlyeq = "≽"; -const succeq = "⪰"; -const succnapprox = "⪺"; -const succneqq = "⪶"; -const succnsim = "⋩"; -const succsim = "≿"; -const sum = "∑"; -const sung = "♪"; -const sup = "⊃"; -const sup1 = "¹"; -const sup2 = "²"; -const sup3 = "³"; -const supE = "⫆"; -const supdot = "⪾"; -const supdsub = "⫘"; -const supe = "⊇"; -const supedot = "⫄"; -const suphsol = "⟉"; -const suphsub = "⫗"; -const suplarr = "⥻"; -const supmult = "⫂"; -const supnE = "⫌"; -const supne = "⊋"; -const supplus = "⫀"; -const supset = "⊃"; -const supseteq = "⊇"; -const supseteqq = "⫆"; -const supsetneq = "⊋"; -const supsetneqq = "⫌"; -const supsim = "⫈"; -const supsub = "⫔"; -const supsup = "⫖"; -const swArr = "⇙"; -const swarhk = "⤦"; -const swarr = "↙"; -const swarrow = "↙"; -const swnwar = "⤪"; -const szli = "ß"; -const szlig = "ß"; -const target = "⌖"; -const tau = "τ"; -const tbrk = "⎴"; -const tcaron = "ť"; -const tcedil = "ţ"; -const tcy = "т"; -const tdot = "⃛"; -const telrec = "⌕"; -const tfr = "𝔱"; -const there4 = "∴"; -const therefore = "∴"; -const theta = "θ"; -const thetasym = "ϑ"; -const thetav = "ϑ"; -const thickapprox = "≈"; -const thicksim = "∼"; -const thinsp = " "; -const thkap = "≈"; -const thksim = "∼"; -const thor = "þ"; -const thorn = "þ"; -const tilde = "˜"; -const time = "×"; -const times = "×"; -const timesb = "⊠"; -const timesbar = "⨱"; -const timesd = "⨰"; -const tint = "∭"; -const toea = "⤨"; -const top = "⊤"; -const topbot = "⌶"; -const topcir = "⫱"; -const topf = "𝕥"; -const topfork = "⫚"; -const tosa = "⤩"; -const tprime = "‴"; -const trade = "™"; -const triangle = "▵"; -const triangledown = "▿"; -const triangleleft = "◃"; -const trianglelefteq = "⊴"; -const triangleq = "≜"; -const triangleright = "▹"; -const trianglerighteq = "⊵"; -const tridot = "◬"; -const trie = "≜"; -const triminus = "⨺"; -const triplus = "⨹"; -const trisb = "⧍"; -const tritime = "⨻"; -const trpezium = "⏢"; -const tscr = "𝓉"; -const tscy = "ц"; -const tshcy = "ћ"; -const tstrok = "ŧ"; -const twixt = "≬"; -const twoheadleftarrow = "↞"; -const twoheadrightarrow = "↠"; -const uArr = "⇑"; -const uHar = "⥣"; -const uacut = "ú"; -const uacute = "ú"; -const uarr = "↑"; -const ubrcy = "ў"; -const ubreve = "ŭ"; -const ucir = "û"; -const ucirc = "û"; -const ucy = "у"; -const udarr = "⇅"; -const udblac = "ű"; -const udhar = "⥮"; -const ufisht = "⥾"; -const ufr = "𝔲"; -const ugrav = "ù"; -const ugrave = "ù"; -const uharl = "↿"; -const uharr = "↾"; -const uhblk = "▀"; -const ulcorn = "⌜"; -const ulcorner = "⌜"; -const ulcrop = "⌏"; -const ultri = "◸"; -const umacr = "ū"; -const um = "¨"; -const uml = "¨"; -const uogon = "ų"; -const uopf = "𝕦"; -const uparrow = "↑"; -const updownarrow = "↕"; -const upharpoonleft = "↿"; -const upharpoonright = "↾"; -const uplus = "⊎"; -const upsi = "υ"; -const upsih = "ϒ"; -const upsilon = "υ"; -const upuparrows = "⇈"; -const urcorn = "⌝"; -const urcorner = "⌝"; -const urcrop = "⌎"; -const uring = "ů"; -const urtri = "◹"; -const uscr = "𝓊"; -const utdot = "⋰"; -const utilde = "ũ"; -const utri = "▵"; -const utrif = "▴"; -const uuarr = "⇈"; -const uum = "ü"; -const uuml = "ü"; -const uwangle = "⦧"; -const vArr = "⇕"; -const vBar = "⫨"; -const vBarv = "⫩"; -const vDash = "⊨"; -const vangrt = "⦜"; -const varepsilon = "ϵ"; -const varkappa = "ϰ"; -const varnothing = "∅"; -const varphi = "ϕ"; -const varpi = "ϖ"; -const varpropto = "∝"; -const varr = "↕"; -const varrho = "ϱ"; -const varsigma = "ς"; -const varsubsetneq = "⊊︀"; -const varsubsetneqq = "⫋︀"; -const varsupsetneq = "⊋︀"; -const varsupsetneqq = "⫌︀"; -const vartheta = "ϑ"; -const vartriangleleft = "⊲"; -const vartriangleright = "⊳"; -const vcy = "в"; -const vdash = "⊢"; -const vee = "∨"; -const veebar = "⊻"; -const veeeq = "≚"; -const vellip = "⋮"; -const verbar = "|"; -const vert = "|"; -const vfr = "𝔳"; -const vltri = "⊲"; -const vnsub = "⊂⃒"; -const vnsup = "⊃⃒"; -const vopf = "𝕧"; -const vprop = "∝"; -const vrtri = "⊳"; -const vscr = "𝓋"; -const vsubnE = "⫋︀"; -const vsubne = "⊊︀"; -const vsupnE = "⫌︀"; -const vsupne = "⊋︀"; -const vzigzag = "⦚"; -const wcirc = "ŵ"; -const wedbar = "⩟"; -const wedge = "∧"; -const wedgeq = "≙"; -const weierp = "℘"; -const wfr = "𝔴"; -const wopf = "𝕨"; -const wp = "℘"; -const wr = "≀"; -const wreath = "≀"; -const wscr = "𝓌"; -const xcap = "⋂"; -const xcirc = "◯"; -const xcup = "⋃"; -const xdtri = "▽"; -const xfr = "𝔵"; -const xhArr = "⟺"; -const xharr = "⟷"; -const xi = "ξ"; -const xlArr = "⟸"; -const xlarr = "⟵"; -const xmap = "⟼"; -const xnis = "⋻"; -const xodot = "⨀"; -const xopf = "𝕩"; -const xoplus = "⨁"; -const xotime = "⨂"; -const xrArr = "⟹"; -const xrarr = "⟶"; -const xscr = "𝓍"; -const xsqcup = "⨆"; -const xuplus = "⨄"; -const xutri = "△"; -const xvee = "⋁"; -const xwedge = "⋀"; -const yacut = "ý"; -const yacute = "ý"; -const yacy = "я"; -const ycirc = "ŷ"; -const ycy = "ы"; -const ye = "¥"; -const yen = "¥"; -const yfr = "𝔶"; -const yicy = "ї"; -const yopf = "𝕪"; -const yscr = "𝓎"; -const yucy = "ю"; -const yum = "ÿ"; -const yuml = "ÿ"; -const zacute = "ź"; -const zcaron = "ž"; -const zcy = "з"; -const zdot = "ż"; -const zeetrf = "ℨ"; -const zeta = "ζ"; -const zfr = "𝔷"; -const zhcy = "ж"; -const zigrarr = "⇝"; -const zopf = "𝕫"; -const zscr = "𝓏"; -const zwj = "‍"; -const zwnj = "‌"; -var require$$0 = { - AEli: AEli, - AElig: AElig, - AM: AM, - AMP: AMP, - Aacut: Aacut, - Aacute: Aacute, - Abreve: Abreve, - Acir: Acir, - Acirc: Acirc, - Acy: Acy, - Afr: Afr, - Agrav: Agrav, - Agrave: Agrave, - Alpha: Alpha, - Amacr: Amacr, - And: And, - Aogon: Aogon, - Aopf: Aopf, - ApplyFunction: ApplyFunction, - Arin: Arin, - Aring: Aring, - Ascr: Ascr, - Assign: Assign, - Atild: Atild, - Atilde: Atilde, - Aum: Aum, - Auml: Auml, - Backslash: Backslash, - Barv: Barv, - Barwed: Barwed, - Bcy: Bcy, - Because: Because, - Bernoullis: Bernoullis, - Beta: Beta, - Bfr: Bfr, - Bopf: Bopf, - Breve: Breve, - Bscr: Bscr, - Bumpeq: Bumpeq, - CHcy: CHcy, - COP: COP, - COPY: COPY, - Cacute: Cacute, - Cap: Cap, - CapitalDifferentialD: CapitalDifferentialD, - Cayleys: Cayleys, - Ccaron: Ccaron, - Ccedi: Ccedi, - Ccedil: Ccedil, - Ccirc: Ccirc, - Cconint: Cconint, - Cdot: Cdot, - Cedilla: Cedilla, - CenterDot: CenterDot, - Cfr: Cfr, - Chi: Chi, - CircleDot: CircleDot, - CircleMinus: CircleMinus, - CirclePlus: CirclePlus, - CircleTimes: CircleTimes, - ClockwiseContourIntegral: ClockwiseContourIntegral, - CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, - CloseCurlyQuote: CloseCurlyQuote, - Colon: Colon, - Colone: Colone, - Congruent: Congruent, - Conint: Conint, - ContourIntegral: ContourIntegral, - Copf: Copf, - Coproduct: Coproduct, - CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, - Cross: Cross, - Cscr: Cscr, - Cup: Cup, - CupCap: CupCap, - DD: DD, - DDotrahd: DDotrahd, - DJcy: DJcy, - DScy: DScy, - DZcy: DZcy, - Dagger: Dagger, - Darr: Darr, - Dashv: Dashv, - Dcaron: Dcaron, - Dcy: Dcy, - Del: Del, - Delta: Delta, - Dfr: Dfr, - DiacriticalAcute: DiacriticalAcute, - DiacriticalDot: DiacriticalDot, - DiacriticalDoubleAcute: DiacriticalDoubleAcute, - DiacriticalGrave: DiacriticalGrave, - DiacriticalTilde: DiacriticalTilde, - Diamond: Diamond, - DifferentialD: DifferentialD, - Dopf: Dopf, - Dot: Dot, - DotDot: DotDot, - DotEqual: DotEqual, - DoubleContourIntegral: DoubleContourIntegral, - DoubleDot: DoubleDot, - DoubleDownArrow: DoubleDownArrow, - DoubleLeftArrow: DoubleLeftArrow, - DoubleLeftRightArrow: DoubleLeftRightArrow, - DoubleLeftTee: DoubleLeftTee, - DoubleLongLeftArrow: DoubleLongLeftArrow, - DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, - DoubleLongRightArrow: DoubleLongRightArrow, - DoubleRightArrow: DoubleRightArrow, - DoubleRightTee: DoubleRightTee, - DoubleUpArrow: DoubleUpArrow, - DoubleUpDownArrow: DoubleUpDownArrow, - DoubleVerticalBar: DoubleVerticalBar, - DownArrow: DownArrow, - DownArrowBar: DownArrowBar, - DownArrowUpArrow: DownArrowUpArrow, - DownBreve: DownBreve, - DownLeftRightVector: DownLeftRightVector, - DownLeftTeeVector: DownLeftTeeVector, - DownLeftVector: DownLeftVector, - DownLeftVectorBar: DownLeftVectorBar, - DownRightTeeVector: DownRightTeeVector, - DownRightVector: DownRightVector, - DownRightVectorBar: DownRightVectorBar, - DownTee: DownTee, - DownTeeArrow: DownTeeArrow, - Downarrow: Downarrow, - Dscr: Dscr, - Dstrok: Dstrok, - ENG: ENG, - ET: ET, - ETH: ETH, - Eacut: Eacut, - Eacute: Eacute, - Ecaron: Ecaron, - Ecir: Ecir, - Ecirc: Ecirc, - Ecy: Ecy, - Edot: Edot, - Efr: Efr, - Egrav: Egrav, - Egrave: Egrave, - Element: Element, - Emacr: Emacr, - EmptySmallSquare: EmptySmallSquare, - EmptyVerySmallSquare: EmptyVerySmallSquare, - Eogon: Eogon, - Eopf: Eopf, - Epsilon: Epsilon, - Equal: Equal, - EqualTilde: EqualTilde, - Equilibrium: Equilibrium, - Escr: Escr, - Esim: Esim, - Eta: Eta, - Eum: Eum, - Euml: Euml, - Exists: Exists, - ExponentialE: ExponentialE, - Fcy: Fcy, - Ffr: Ffr, - FilledSmallSquare: FilledSmallSquare, - FilledVerySmallSquare: FilledVerySmallSquare, - Fopf: Fopf, - ForAll: ForAll, - Fouriertrf: Fouriertrf, - Fscr: Fscr, - GJcy: GJcy, - G: G, - GT: GT, - Gamma: Gamma, - Gammad: Gammad, - Gbreve: Gbreve, - Gcedil: Gcedil, - Gcirc: Gcirc, - Gcy: Gcy, - Gdot: Gdot, - Gfr: Gfr, - Gg: Gg, - Gopf: Gopf, - GreaterEqual: GreaterEqual, - GreaterEqualLess: GreaterEqualLess, - GreaterFullEqual: GreaterFullEqual, - GreaterGreater: GreaterGreater, - GreaterLess: GreaterLess, - GreaterSlantEqual: GreaterSlantEqual, - GreaterTilde: GreaterTilde, - Gscr: Gscr, - Gt: Gt, - HARDcy: HARDcy, - Hacek: Hacek, - Hat: Hat, - Hcirc: Hcirc, - Hfr: Hfr, - HilbertSpace: HilbertSpace, - Hopf: Hopf, - HorizontalLine: HorizontalLine, - Hscr: Hscr, - Hstrok: Hstrok, - HumpDownHump: HumpDownHump, - HumpEqual: HumpEqual, - IEcy: IEcy, - IJlig: IJlig, - IOcy: IOcy, - Iacut: Iacut, - Iacute: Iacute, - Icir: Icir, - Icirc: Icirc, - Icy: Icy, - Idot: Idot, - Ifr: Ifr, - Igrav: Igrav, - Igrave: Igrave, - Im: Im, - Imacr: Imacr, - ImaginaryI: ImaginaryI, - Implies: Implies, - Int: Int, - Integral: Integral, - Intersection: Intersection, - InvisibleComma: InvisibleComma, - InvisibleTimes: InvisibleTimes, - Iogon: Iogon, - Iopf: Iopf, - Iota: Iota, - Iscr: Iscr, - Itilde: Itilde, - Iukcy: Iukcy, - Ium: Ium, - Iuml: Iuml, - Jcirc: Jcirc, - Jcy: Jcy, - Jfr: Jfr, - Jopf: Jopf, - Jscr: Jscr, - Jsercy: Jsercy, - Jukcy: Jukcy, - KHcy: KHcy, - KJcy: KJcy, - Kappa: Kappa, - Kcedil: Kcedil, - Kcy: Kcy, - Kfr: Kfr, - Kopf: Kopf, - Kscr: Kscr, - LJcy: LJcy, - L: L, - LT: LT, - Lacute: Lacute, - Lambda: Lambda, - Lang: Lang, - Laplacetrf: Laplacetrf, - Larr: Larr, - Lcaron: Lcaron, - Lcedil: Lcedil, - Lcy: Lcy, - LeftAngleBracket: LeftAngleBracket, - LeftArrow: LeftArrow, - LeftArrowBar: LeftArrowBar, - LeftArrowRightArrow: LeftArrowRightArrow, - LeftCeiling: LeftCeiling, - LeftDoubleBracket: LeftDoubleBracket, - LeftDownTeeVector: LeftDownTeeVector, - LeftDownVector: LeftDownVector, - LeftDownVectorBar: LeftDownVectorBar, - LeftFloor: LeftFloor, - LeftRightArrow: LeftRightArrow, - LeftRightVector: LeftRightVector, - LeftTee: LeftTee, - LeftTeeArrow: LeftTeeArrow, - LeftTeeVector: LeftTeeVector, - LeftTriangle: LeftTriangle, - LeftTriangleBar: LeftTriangleBar, - LeftTriangleEqual: LeftTriangleEqual, - LeftUpDownVector: LeftUpDownVector, - LeftUpTeeVector: LeftUpTeeVector, - LeftUpVector: LeftUpVector, - LeftUpVectorBar: LeftUpVectorBar, - LeftVector: LeftVector, - LeftVectorBar: LeftVectorBar, - Leftarrow: Leftarrow, - Leftrightarrow: Leftrightarrow, - LessEqualGreater: LessEqualGreater, - LessFullEqual: LessFullEqual, - LessGreater: LessGreater, - LessLess: LessLess, - LessSlantEqual: LessSlantEqual, - LessTilde: LessTilde, - Lfr: Lfr, - Ll: Ll, - Lleftarrow: Lleftarrow, - Lmidot: Lmidot, - LongLeftArrow: LongLeftArrow, - LongLeftRightArrow: LongLeftRightArrow, - LongRightArrow: LongRightArrow, - Longleftarrow: Longleftarrow, - Longleftrightarrow: Longleftrightarrow, - Longrightarrow: Longrightarrow, - Lopf: Lopf, - LowerLeftArrow: LowerLeftArrow, - LowerRightArrow: LowerRightArrow, - Lscr: Lscr, - Lsh: Lsh, - Lstrok: Lstrok, - Lt: Lt, - "Map": "⤅", - Mcy: Mcy, - MediumSpace: MediumSpace, - Mellintrf: Mellintrf, - Mfr: Mfr, - MinusPlus: MinusPlus, - Mopf: Mopf, - Mscr: Mscr, - Mu: Mu, - NJcy: NJcy, - Nacute: Nacute, - Ncaron: Ncaron, - Ncedil: Ncedil, - Ncy: Ncy, - NegativeMediumSpace: NegativeMediumSpace, - NegativeThickSpace: NegativeThickSpace, - NegativeThinSpace: NegativeThinSpace, - NegativeVeryThinSpace: NegativeVeryThinSpace, - NestedGreaterGreater: NestedGreaterGreater, - NestedLessLess: NestedLessLess, - NewLine: NewLine, - Nfr: Nfr, - NoBreak: NoBreak, - NonBreakingSpace: NonBreakingSpace, - Nopf: Nopf, - Not: Not, - NotCongruent: NotCongruent, - NotCupCap: NotCupCap, - NotDoubleVerticalBar: NotDoubleVerticalBar, - NotElement: NotElement, - NotEqual: NotEqual, - NotEqualTilde: NotEqualTilde, - NotExists: NotExists, - NotGreater: NotGreater, - NotGreaterEqual: NotGreaterEqual, - NotGreaterFullEqual: NotGreaterFullEqual, - NotGreaterGreater: NotGreaterGreater, - NotGreaterLess: NotGreaterLess, - NotGreaterSlantEqual: NotGreaterSlantEqual, - NotGreaterTilde: NotGreaterTilde, - NotHumpDownHump: NotHumpDownHump, - NotHumpEqual: NotHumpEqual, - NotLeftTriangle: NotLeftTriangle, - NotLeftTriangleBar: NotLeftTriangleBar, - NotLeftTriangleEqual: NotLeftTriangleEqual, - NotLess: NotLess, - NotLessEqual: NotLessEqual, - NotLessGreater: NotLessGreater, - NotLessLess: NotLessLess, - NotLessSlantEqual: NotLessSlantEqual, - NotLessTilde: NotLessTilde, - NotNestedGreaterGreater: NotNestedGreaterGreater, - NotNestedLessLess: NotNestedLessLess, - NotPrecedes: NotPrecedes, - NotPrecedesEqual: NotPrecedesEqual, - NotPrecedesSlantEqual: NotPrecedesSlantEqual, - NotReverseElement: NotReverseElement, - NotRightTriangle: NotRightTriangle, - NotRightTriangleBar: NotRightTriangleBar, - NotRightTriangleEqual: NotRightTriangleEqual, - NotSquareSubset: NotSquareSubset, - NotSquareSubsetEqual: NotSquareSubsetEqual, - NotSquareSuperset: NotSquareSuperset, - NotSquareSupersetEqual: NotSquareSupersetEqual, - NotSubset: NotSubset, - NotSubsetEqual: NotSubsetEqual, - NotSucceeds: NotSucceeds, - NotSucceedsEqual: NotSucceedsEqual, - NotSucceedsSlantEqual: NotSucceedsSlantEqual, - NotSucceedsTilde: NotSucceedsTilde, - NotSuperset: NotSuperset, - NotSupersetEqual: NotSupersetEqual, - NotTilde: NotTilde, - NotTildeEqual: NotTildeEqual, - NotTildeFullEqual: NotTildeFullEqual, - NotTildeTilde: NotTildeTilde, - NotVerticalBar: NotVerticalBar, - Nscr: Nscr, - Ntild: Ntild, - Ntilde: Ntilde, - Nu: Nu, - OElig: OElig, - Oacut: Oacut, - Oacute: Oacute, - Ocir: Ocir, - Ocirc: Ocirc, - Ocy: Ocy, - Odblac: Odblac, - Ofr: Ofr, - Ograv: Ograv, - Ograve: Ograve, - Omacr: Omacr, - Omega: Omega, - Omicron: Omicron, - Oopf: Oopf, - OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, - OpenCurlyQuote: OpenCurlyQuote, - Or: Or, - Oscr: Oscr, - Oslas: Oslas, - Oslash: Oslash, - Otild: Otild, - Otilde: Otilde, - Otimes: Otimes, - Oum: Oum, - Ouml: Ouml, - OverBar: OverBar, - OverBrace: OverBrace, - OverBracket: OverBracket, - OverParenthesis: OverParenthesis, - PartialD: PartialD, - Pcy: Pcy, - Pfr: Pfr, - Phi: Phi, - Pi: Pi, - PlusMinus: PlusMinus, - Poincareplane: Poincareplane, - Popf: Popf, - Pr: Pr, - Precedes: Precedes, - PrecedesEqual: PrecedesEqual, - PrecedesSlantEqual: PrecedesSlantEqual, - PrecedesTilde: PrecedesTilde, - Prime: Prime, - Product: Product, - Proportion: Proportion, - Proportional: Proportional, - Pscr: Pscr, - Psi: Psi, - QUO: QUO, - QUOT: QUOT, - Qfr: Qfr, - Qopf: Qopf, - Qscr: Qscr, - RBarr: RBarr, - RE: RE, - REG: REG, - Racute: Racute, - Rang: Rang, - Rarr: Rarr, - Rarrtl: Rarrtl, - Rcaron: Rcaron, - Rcedil: Rcedil, - Rcy: Rcy, - Re: Re, - ReverseElement: ReverseElement, - ReverseEquilibrium: ReverseEquilibrium, - ReverseUpEquilibrium: ReverseUpEquilibrium, - Rfr: Rfr, - Rho: Rho, - RightAngleBracket: RightAngleBracket, - RightArrow: RightArrow, - RightArrowBar: RightArrowBar, - RightArrowLeftArrow: RightArrowLeftArrow, - RightCeiling: RightCeiling, - RightDoubleBracket: RightDoubleBracket, - RightDownTeeVector: RightDownTeeVector, - RightDownVector: RightDownVector, - RightDownVectorBar: RightDownVectorBar, - RightFloor: RightFloor, - RightTee: RightTee, - RightTeeArrow: RightTeeArrow, - RightTeeVector: RightTeeVector, - RightTriangle: RightTriangle, - RightTriangleBar: RightTriangleBar, - RightTriangleEqual: RightTriangleEqual, - RightUpDownVector: RightUpDownVector, - RightUpTeeVector: RightUpTeeVector, - RightUpVector: RightUpVector, - RightUpVectorBar: RightUpVectorBar, - RightVector: RightVector, - RightVectorBar: RightVectorBar, - Rightarrow: Rightarrow, - Ropf: Ropf, - RoundImplies: RoundImplies, - Rrightarrow: Rrightarrow, - Rscr: Rscr, - Rsh: Rsh, - RuleDelayed: RuleDelayed, - SHCHcy: SHCHcy, - SHcy: SHcy, - SOFTcy: SOFTcy, - Sacute: Sacute, - Sc: Sc, - Scaron: Scaron, - Scedil: Scedil, - Scirc: Scirc, - Scy: Scy, - Sfr: Sfr, - ShortDownArrow: ShortDownArrow, - ShortLeftArrow: ShortLeftArrow, - ShortRightArrow: ShortRightArrow, - ShortUpArrow: ShortUpArrow, - Sigma: Sigma, - SmallCircle: SmallCircle, - Sopf: Sopf, - Sqrt: Sqrt, - Square: Square, - SquareIntersection: SquareIntersection, - SquareSubset: SquareSubset, - SquareSubsetEqual: SquareSubsetEqual, - SquareSuperset: SquareSuperset, - SquareSupersetEqual: SquareSupersetEqual, - SquareUnion: SquareUnion, - Sscr: Sscr, - Star: Star, - Sub: Sub, - Subset: Subset, - SubsetEqual: SubsetEqual, - Succeeds: Succeeds, - SucceedsEqual: SucceedsEqual, - SucceedsSlantEqual: SucceedsSlantEqual, - SucceedsTilde: SucceedsTilde, - SuchThat: SuchThat, - Sum: Sum, - Sup: Sup, - Superset: Superset, - SupersetEqual: SupersetEqual, - Supset: Supset, - THOR: THOR, - THORN: THORN, - TRADE: TRADE, - TSHcy: TSHcy, - TScy: TScy, - Tab: Tab, - Tau: Tau, - Tcaron: Tcaron, - Tcedil: Tcedil, - Tcy: Tcy, - Tfr: Tfr, - Therefore: Therefore, - Theta: Theta, - ThickSpace: ThickSpace, - ThinSpace: ThinSpace, - Tilde: Tilde, - TildeEqual: TildeEqual, - TildeFullEqual: TildeFullEqual, - TildeTilde: TildeTilde, - Topf: Topf, - TripleDot: TripleDot, - Tscr: Tscr, - Tstrok: Tstrok, - Uacut: Uacut, - Uacute: Uacute, - Uarr: Uarr, - Uarrocir: Uarrocir, - Ubrcy: Ubrcy, - Ubreve: Ubreve, - Ucir: Ucir, - Ucirc: Ucirc, - Ucy: Ucy, - Udblac: Udblac, - Ufr: Ufr, - Ugrav: Ugrav, - Ugrave: Ugrave, - Umacr: Umacr, - UnderBar: UnderBar, - UnderBrace: UnderBrace, - UnderBracket: UnderBracket, - UnderParenthesis: UnderParenthesis, - Union: Union, - UnionPlus: UnionPlus, - Uogon: Uogon, - Uopf: Uopf, - UpArrow: UpArrow, - UpArrowBar: UpArrowBar, - UpArrowDownArrow: UpArrowDownArrow, - UpDownArrow: UpDownArrow, - UpEquilibrium: UpEquilibrium, - UpTee: UpTee, - UpTeeArrow: UpTeeArrow, - Uparrow: Uparrow, - Updownarrow: Updownarrow, - UpperLeftArrow: UpperLeftArrow, - UpperRightArrow: UpperRightArrow, - Upsi: Upsi, - Upsilon: Upsilon, - Uring: Uring, - Uscr: Uscr, - Utilde: Utilde, - Uum: Uum, - Uuml: Uuml, - VDash: VDash, - Vbar: Vbar, - Vcy: Vcy, - Vdash: Vdash, - Vdashl: Vdashl, - Vee: Vee, - Verbar: Verbar, - Vert: Vert, - VerticalBar: VerticalBar, - VerticalLine: VerticalLine, - VerticalSeparator: VerticalSeparator, - VerticalTilde: VerticalTilde, - VeryThinSpace: VeryThinSpace, - Vfr: Vfr, - Vopf: Vopf, - Vscr: Vscr, - Vvdash: Vvdash, - Wcirc: Wcirc, - Wedge: Wedge, - Wfr: Wfr, - Wopf: Wopf, - Wscr: Wscr, - Xfr: Xfr, - Xi: Xi, - Xopf: Xopf, - Xscr: Xscr, - YAcy: YAcy, - YIcy: YIcy, - YUcy: YUcy, - Yacut: Yacut, - Yacute: Yacute, - Ycirc: Ycirc, - Ycy: Ycy, - Yfr: Yfr, - Yopf: Yopf, - Yscr: Yscr, - Yuml: Yuml, - ZHcy: ZHcy, - Zacute: Zacute, - Zcaron: Zcaron, - Zcy: Zcy, - Zdot: Zdot, - ZeroWidthSpace: ZeroWidthSpace, - Zeta: Zeta, - Zfr: Zfr, - Zopf: Zopf, - Zscr: Zscr, - aacut: aacut, - aacute: aacute, - abreve: abreve, - ac: ac, - acE: acE, - acd: acd, - acir: acir, - acirc: acirc, - acut: acut, - acute: acute, - acy: acy, - aeli: aeli, - aelig: aelig, - af: af, - afr: afr, - agrav: agrav, - agrave: agrave, - alefsym: alefsym, - aleph: aleph, - alpha: alpha, - amacr: amacr, - amalg: amalg, - am: am, - amp: amp, - and: and, - andand: andand, - andd: andd, - andslope: andslope, - andv: andv, - ang: ang, - ange: ange, - angle: angle, - angmsd: angmsd, - angmsdaa: angmsdaa, - angmsdab: angmsdab, - angmsdac: angmsdac, - angmsdad: angmsdad, - angmsdae: angmsdae, - angmsdaf: angmsdaf, - angmsdag: angmsdag, - angmsdah: angmsdah, - angrt: angrt, - angrtvb: angrtvb, - angrtvbd: angrtvbd, - angsph: angsph, - angst: angst, - angzarr: angzarr, - aogon: aogon, - aopf: aopf, - ap: ap, - apE: apE, - apacir: apacir, - ape: ape, - apid: apid, - apos: apos, - approx: approx, - approxeq: approxeq, - arin: arin, - aring: aring, - ascr: ascr, - ast: ast, - asymp: asymp, - asympeq: asympeq, - atild: atild, - atilde: atilde, - aum: aum, - auml: auml, - awconint: awconint, - awint: awint, - bNot: bNot, - backcong: backcong, - backepsilon: backepsilon, - backprime: backprime, - backsim: backsim, - backsimeq: backsimeq, - barvee: barvee, - barwed: barwed, - barwedge: barwedge, - bbrk: bbrk, - bbrktbrk: bbrktbrk, - bcong: bcong, - bcy: bcy, - bdquo: bdquo, - becaus: becaus, - because: because, - bemptyv: bemptyv, - bepsi: bepsi, - bernou: bernou, - beta: beta, - beth: beth, - between: between, - bfr: bfr, - bigcap: bigcap, - bigcirc: bigcirc, - bigcup: bigcup, - bigodot: bigodot, - bigoplus: bigoplus, - bigotimes: bigotimes, - bigsqcup: bigsqcup, - bigstar: bigstar, - bigtriangledown: bigtriangledown, - bigtriangleup: bigtriangleup, - biguplus: biguplus, - bigvee: bigvee, - bigwedge: bigwedge, - bkarow: bkarow, - blacklozenge: blacklozenge, - blacksquare: blacksquare, - blacktriangle: blacktriangle, - blacktriangledown: blacktriangledown, - blacktriangleleft: blacktriangleleft, - blacktriangleright: blacktriangleright, - blank: blank, - blk12: blk12, - blk14: blk14, - blk34: blk34, - block: block, - bne: bne, - bnequiv: bnequiv, - bnot: bnot, - bopf: bopf, - bot: bot, - bottom: bottom, - bowtie: bowtie, - boxDL: boxDL, - boxDR: boxDR, - boxDl: boxDl, - boxDr: boxDr, - boxH: boxH, - boxHD: boxHD, - boxHU: boxHU, - boxHd: boxHd, - boxHu: boxHu, - boxUL: boxUL, - boxUR: boxUR, - boxUl: boxUl, - boxUr: boxUr, - boxV: boxV, - boxVH: boxVH, - boxVL: boxVL, - boxVR: boxVR, - boxVh: boxVh, - boxVl: boxVl, - boxVr: boxVr, - boxbox: boxbox, - boxdL: boxdL, - boxdR: boxdR, - boxdl: boxdl, - boxdr: boxdr, - boxh: boxh, - boxhD: boxhD, - boxhU: boxhU, - boxhd: boxhd, - boxhu: boxhu, - boxminus: boxminus, - boxplus: boxplus, - boxtimes: boxtimes, - boxuL: boxuL, - boxuR: boxuR, - boxul: boxul, - boxur: boxur, - boxv: boxv, - boxvH: boxvH, - boxvL: boxvL, - boxvR: boxvR, - boxvh: boxvh, - boxvl: boxvl, - boxvr: boxvr, - bprime: bprime, - breve: breve, - brvba: brvba, - brvbar: brvbar, - bscr: bscr, - bsemi: bsemi, - bsim: bsim, - bsime: bsime, - bsol: bsol, - bsolb: bsolb, - bsolhsub: bsolhsub, - bull: bull, - bullet: bullet, - bump: bump, - bumpE: bumpE, - bumpe: bumpe, - bumpeq: bumpeq, - cacute: cacute, - cap: cap, - capand: capand, - capbrcup: capbrcup, - capcap: capcap, - capcup: capcup, - capdot: capdot, - caps: caps, - caret: caret, - caron: caron, - ccaps: ccaps, - ccaron: ccaron, - ccedi: ccedi, - ccedil: ccedil, - ccirc: ccirc, - ccups: ccups, - ccupssm: ccupssm, - cdot: cdot, - cedi: cedi, - cedil: cedil, - cemptyv: cemptyv, - cen: cen, - cent: cent, - centerdot: centerdot, - cfr: cfr, - chcy: chcy, - check: check$1, - checkmark: checkmark, - chi: chi, - cir: cir, - cirE: cirE, - circ: circ, - circeq: circeq, - circlearrowleft: circlearrowleft, - circlearrowright: circlearrowright, - circledR: circledR, - circledS: circledS, - circledast: circledast, - circledcirc: circledcirc, - circleddash: circleddash, - cire: cire, - cirfnint: cirfnint, - cirmid: cirmid, - cirscir: cirscir, - clubs: clubs, - clubsuit: clubsuit, - colon: colon, - colone: colone, - coloneq: coloneq, - comma: comma, - commat: commat, - comp: comp, - compfn: compfn, - complement: complement, - complexes: complexes, - cong: cong, - congdot: congdot, - conint: conint, - copf: copf, - coprod: coprod, - cop: cop, - copy: copy, - copysr: copysr, - crarr: crarr, - cross: cross, - cscr: cscr, - csub: csub, - csube: csube, - csup: csup, - csupe: csupe, - ctdot: ctdot, - cudarrl: cudarrl, - cudarrr: cudarrr, - cuepr: cuepr, - cuesc: cuesc, - cularr: cularr, - cularrp: cularrp, - cup: cup, - cupbrcap: cupbrcap, - cupcap: cupcap, - cupcup: cupcup, - cupdot: cupdot, - cupor: cupor, - cups: cups, - curarr: curarr, - curarrm: curarrm, - curlyeqprec: curlyeqprec, - curlyeqsucc: curlyeqsucc, - curlyvee: curlyvee, - curlywedge: curlywedge, - curre: curre, - curren: curren, - curvearrowleft: curvearrowleft, - curvearrowright: curvearrowright, - cuvee: cuvee, - cuwed: cuwed, - cwconint: cwconint, - cwint: cwint, - cylcty: cylcty, - dArr: dArr, - dHar: dHar, - dagger: dagger, - daleth: daleth, - darr: darr, - dash: dash, - dashv: dashv, - dbkarow: dbkarow, - dblac: dblac, - dcaron: dcaron, - dcy: dcy, - dd: dd, - ddagger: ddagger, - ddarr: ddarr, - ddotseq: ddotseq, - de: de, - deg: deg, - delta: delta, - demptyv: demptyv, - dfisht: dfisht, - dfr: dfr, - dharl: dharl, - dharr: dharr, - diam: diam, - diamond: diamond, - diamondsuit: diamondsuit, - diams: diams, - die: die, - digamma: digamma, - disin: disin, - div: div, - divid: divid, - divide: divide, - divideontimes: divideontimes, - divonx: divonx, - djcy: djcy, - dlcorn: dlcorn, - dlcrop: dlcrop, - dollar: dollar, - dopf: dopf, - dot: dot, - doteq: doteq, - doteqdot: doteqdot, - dotminus: dotminus, - dotplus: dotplus, - dotsquare: dotsquare, - doublebarwedge: doublebarwedge, - downarrow: downarrow, - downdownarrows: downdownarrows, - downharpoonleft: downharpoonleft, - downharpoonright: downharpoonright, - drbkarow: drbkarow, - drcorn: drcorn, - drcrop: drcrop, - dscr: dscr, - dscy: dscy, - dsol: dsol, - dstrok: dstrok, - dtdot: dtdot, - dtri: dtri, - dtrif: dtrif, - duarr: duarr, - duhar: duhar, - dwangle: dwangle, - dzcy: dzcy, - dzigrarr: dzigrarr, - eDDot: eDDot, - eDot: eDot, - eacut: eacut, - eacute: eacute, - easter: easter, - ecaron: ecaron, - ecir: ecir, - ecirc: ecirc, - ecolon: ecolon, - ecy: ecy, - edot: edot, - ee: ee, - efDot: efDot, - efr: efr, - eg: eg, - egrav: egrav, - egrave: egrave, - egs: egs, - egsdot: egsdot, - el: el, - elinters: elinters, - ell: ell, - els: els, - elsdot: elsdot, - emacr: emacr, - empty: empty, - emptyset: emptyset, - emptyv: emptyv, - emsp13: emsp13, - emsp14: emsp14, - emsp: emsp, - eng: eng, - ensp: ensp, - eogon: eogon, - eopf: eopf, - epar: epar, - eparsl: eparsl, - eplus: eplus, - epsi: epsi, - epsilon: epsilon, - epsiv: epsiv, - eqcirc: eqcirc, - eqcolon: eqcolon, - eqsim: eqsim, - eqslantgtr: eqslantgtr, - eqslantless: eqslantless, - equals: equals, - equest: equest, - equiv: equiv, - equivDD: equivDD, - eqvparsl: eqvparsl, - erDot: erDot, - erarr: erarr, - escr: escr, - esdot: esdot, - esim: esim, - eta: eta, - et: et, - eth: eth, - eum: eum, - euml: euml, - euro: euro, - excl: excl, - exist: exist, - expectation: expectation, - exponentiale: exponentiale, - fallingdotseq: fallingdotseq, - fcy: fcy, - female: female, - ffilig: ffilig, - fflig: fflig, - ffllig: ffllig, - ffr: ffr, - filig: filig, - fjlig: fjlig, - flat: flat, - fllig: fllig, - fltns: fltns, - fnof: fnof, - fopf: fopf, - forall: forall, - fork: fork, - forkv: forkv, - fpartint: fpartint, - frac1: frac1, - frac12: frac12, - frac13: frac13, - frac14: frac14, - frac15: frac15, - frac16: frac16, - frac18: frac18, - frac23: frac23, - frac25: frac25, - frac3: frac3, - frac34: frac34, - frac35: frac35, - frac38: frac38, - frac45: frac45, - frac56: frac56, - frac58: frac58, - frac78: frac78, - frasl: frasl, - frown: frown, - fscr: fscr, - gE: gE, - gEl: gEl, - gacute: gacute, - gamma: gamma, - gammad: gammad, - gap: gap, - gbreve: gbreve, - gcirc: gcirc, - gcy: gcy, - gdot: gdot, - ge: ge, - gel: gel, - geq: geq, - geqq: geqq, - geqslant: geqslant, - ges: ges, - gescc: gescc, - gesdot: gesdot, - gesdoto: gesdoto, - gesdotol: gesdotol, - gesl: gesl, - gesles: gesles, - gfr: gfr, - gg: gg, - ggg: ggg, - gimel: gimel, - gjcy: gjcy, - gl: gl, - glE: glE, - gla: gla, - glj: glj, - gnE: gnE, - gnap: gnap, - gnapprox: gnapprox, - gne: gne, - gneq: gneq, - gneqq: gneqq, - gnsim: gnsim, - gopf: gopf, - grave: grave, - gscr: gscr, - gsim: gsim, - gsime: gsime, - gsiml: gsiml, - g: g, - gt: gt, - gtcc: gtcc, - gtcir: gtcir, - gtdot: gtdot, - gtlPar: gtlPar, - gtquest: gtquest, - gtrapprox: gtrapprox, - gtrarr: gtrarr, - gtrdot: gtrdot, - gtreqless: gtreqless, - gtreqqless: gtreqqless, - gtrless: gtrless, - gtrsim: gtrsim, - gvertneqq: gvertneqq, - gvnE: gvnE, - hArr: hArr, - hairsp: hairsp, - half: half, - hamilt: hamilt, - hardcy: hardcy, - harr: harr, - harrcir: harrcir, - harrw: harrw, - hbar: hbar, - hcirc: hcirc, - hearts: hearts, - heartsuit: heartsuit, - hellip: hellip, - hercon: hercon, - hfr: hfr, - hksearow: hksearow, - hkswarow: hkswarow, - hoarr: hoarr, - homtht: homtht, - hookleftarrow: hookleftarrow, - hookrightarrow: hookrightarrow, - hopf: hopf, - horbar: horbar, - hscr: hscr, - hslash: hslash, - hstrok: hstrok, - hybull: hybull, - hyphen: hyphen, - iacut: iacut, - iacute: iacute, - ic: ic, - icir: icir, - icirc: icirc, - icy: icy, - iecy: iecy, - iexc: iexc, - iexcl: iexcl, - iff: iff, - ifr: ifr, - igrav: igrav, - igrave: igrave, - ii: ii, - iiiint: iiiint, - iiint: iiint, - iinfin: iinfin, - iiota: iiota, - ijlig: ijlig, - imacr: imacr, - image: image$1, - imagline: imagline, - imagpart: imagpart, - imath: imath, - imof: imof, - imped: imped, - "in": "∈", - incare: incare, - infin: infin, - infintie: infintie, - inodot: inodot, - int: int$1, - intcal: intcal, - integers: integers, - intercal: intercal, - intlarhk: intlarhk, - intprod: intprod, - iocy: iocy, - iogon: iogon, - iopf: iopf, - iota: iota, - iprod: iprod, - iques: iques, - iquest: iquest, - iscr: iscr, - isin: isin, - isinE: isinE, - isindot: isindot, - isins: isins, - isinsv: isinsv, - isinv: isinv, - it: it, - itilde: itilde, - iukcy: iukcy, - ium: ium, - iuml: iuml, - jcirc: jcirc, - jcy: jcy, - jfr: jfr, - jmath: jmath, - jopf: jopf, - jscr: jscr, - jsercy: jsercy, - jukcy: jukcy, - kappa: kappa, - kappav: kappav, - kcedil: kcedil, - kcy: kcy, - kfr: kfr, - kgreen: kgreen, - khcy: khcy, - kjcy: kjcy, - kopf: kopf, - kscr: kscr, - lAarr: lAarr, - lArr: lArr, - lAtail: lAtail, - lBarr: lBarr, - lE: lE, - lEg: lEg, - lHar: lHar, - lacute: lacute, - laemptyv: laemptyv, - lagran: lagran, - lambda: lambda, - lang: lang, - langd: langd, - langle: langle, - lap: lap, - laqu: laqu, - laquo: laquo, - larr: larr, - larrb: larrb, - larrbfs: larrbfs, - larrfs: larrfs, - larrhk: larrhk, - larrlp: larrlp, - larrpl: larrpl, - larrsim: larrsim, - larrtl: larrtl, - lat: lat, - latail: latail, - late: late, - lates: lates, - lbarr: lbarr, - lbbrk: lbbrk, - lbrace: lbrace, - lbrack: lbrack, - lbrke: lbrke, - lbrksld: lbrksld, - lbrkslu: lbrkslu, - lcaron: lcaron, - lcedil: lcedil, - lceil: lceil, - lcub: lcub, - lcy: lcy, - ldca: ldca, - ldquo: ldquo, - ldquor: ldquor, - ldrdhar: ldrdhar, - ldrushar: ldrushar, - ldsh: ldsh, - le: le, - leftarrow: leftarrow, - leftarrowtail: leftarrowtail, - leftharpoondown: leftharpoondown, - leftharpoonup: leftharpoonup, - leftleftarrows: leftleftarrows, - leftrightarrow: leftrightarrow, - leftrightarrows: leftrightarrows, - leftrightharpoons: leftrightharpoons, - leftrightsquigarrow: leftrightsquigarrow, - leftthreetimes: leftthreetimes, - leg: leg, - leq: leq, - leqq: leqq, - leqslant: leqslant, - les: les, - lescc: lescc, - lesdot: lesdot, - lesdoto: lesdoto, - lesdotor: lesdotor, - lesg: lesg, - lesges: lesges, - lessapprox: lessapprox, - lessdot: lessdot, - lesseqgtr: lesseqgtr, - lesseqqgtr: lesseqqgtr, - lessgtr: lessgtr, - lesssim: lesssim, - lfisht: lfisht, - lfloor: lfloor, - lfr: lfr, - lg: lg, - lgE: lgE, - lhard: lhard, - lharu: lharu, - lharul: lharul, - lhblk: lhblk, - ljcy: ljcy, - ll: ll, - llarr: llarr, - llcorner: llcorner, - llhard: llhard, - lltri: lltri, - lmidot: lmidot, - lmoust: lmoust, - lmoustache: lmoustache, - lnE: lnE, - lnap: lnap, - lnapprox: lnapprox, - lne: lne, - lneq: lneq, - lneqq: lneqq, - lnsim: lnsim, - loang: loang, - loarr: loarr, - lobrk: lobrk, - longleftarrow: longleftarrow, - longleftrightarrow: longleftrightarrow, - longmapsto: longmapsto, - longrightarrow: longrightarrow, - looparrowleft: looparrowleft, - looparrowright: looparrowright, - lopar: lopar, - lopf: lopf, - loplus: loplus, - lotimes: lotimes, - lowast: lowast, - lowbar: lowbar, - loz: loz, - lozenge: lozenge, - lozf: lozf, - lpar: lpar, - lparlt: lparlt, - lrarr: lrarr, - lrcorner: lrcorner, - lrhar: lrhar, - lrhard: lrhard, - lrm: lrm, - lrtri: lrtri, - lsaquo: lsaquo, - lscr: lscr, - lsh: lsh, - lsim: lsim, - lsime: lsime, - lsimg: lsimg, - lsqb: lsqb, - lsquo: lsquo, - lsquor: lsquor, - lstrok: lstrok, - l: l, - lt: lt$1, - ltcc: ltcc, - ltcir: ltcir, - ltdot: ltdot, - lthree: lthree, - ltimes: ltimes, - ltlarr: ltlarr, - ltquest: ltquest, - ltrPar: ltrPar, - ltri: ltri, - ltrie: ltrie, - ltrif: ltrif, - lurdshar: lurdshar, - luruhar: luruhar, - lvertneqq: lvertneqq, - lvnE: lvnE, - mDDot: mDDot, - mac: mac, - macr: macr, - male: male, - malt: malt, - maltese: maltese, - map: map$1, - mapsto: mapsto, - mapstodown: mapstodown, - mapstoleft: mapstoleft, - mapstoup: mapstoup, - marker: marker, - mcomma: mcomma, - mcy: mcy, - mdash: mdash, - measuredangle: measuredangle, - mfr: mfr, - mho: mho, - micr: micr, - micro: micro, - mid: mid, - midast: midast, - midcir: midcir, - middo: middo, - middot: middot, - minus: minus, - minusb: minusb, - minusd: minusd, - minusdu: minusdu, - mlcp: mlcp, - mldr: mldr, - mnplus: mnplus, - models: models, - mopf: mopf, - mp: mp, - mscr: mscr, - mstpos: mstpos, - mu: mu, - multimap: multimap, - mumap: mumap, - nGg: nGg, - nGt: nGt, - nGtv: nGtv, - nLeftarrow: nLeftarrow, - nLeftrightarrow: nLeftrightarrow, - nLl: nLl, - nLt: nLt, - nLtv: nLtv, - nRightarrow: nRightarrow, - nVDash: nVDash, - nVdash: nVdash, - nabla: nabla, - nacute: nacute, - nang: nang, - nap: nap, - napE: napE, - napid: napid, - napos: napos, - napprox: napprox, - natur: natur, - natural: natural, - naturals: naturals, - nbs: nbs, - nbsp: nbsp, - nbump: nbump, - nbumpe: nbumpe, - ncap: ncap, - ncaron: ncaron, - ncedil: ncedil, - ncong: ncong, - ncongdot: ncongdot, - ncup: ncup, - ncy: ncy, - ndash: ndash, - ne: ne, - neArr: neArr, - nearhk: nearhk, - nearr: nearr, - nearrow: nearrow, - nedot: nedot, - nequiv: nequiv, - nesear: nesear, - nesim: nesim, - nexist: nexist, - nexists: nexists, - nfr: nfr, - ngE: ngE, - nge: nge, - ngeq: ngeq, - ngeqq: ngeqq, - ngeqslant: ngeqslant, - nges: nges, - ngsim: ngsim, - ngt: ngt, - ngtr: ngtr, - nhArr: nhArr, - nharr: nharr, - nhpar: nhpar, - ni: ni, - nis: nis, - nisd: nisd, - niv: niv, - njcy: njcy, - nlArr: nlArr, - nlE: nlE, - nlarr: nlarr, - nldr: nldr, - nle: nle, - nleftarrow: nleftarrow, - nleftrightarrow: nleftrightarrow, - nleq: nleq, - nleqq: nleqq, - nleqslant: nleqslant, - nles: nles, - nless: nless, - nlsim: nlsim, - nlt: nlt, - nltri: nltri, - nltrie: nltrie, - nmid: nmid, - nopf: nopf, - no: no, - not: not, - notin: notin, - notinE: notinE, - notindot: notindot, - notinva: notinva, - notinvb: notinvb, - notinvc: notinvc, - notni: notni, - notniva: notniva, - notnivb: notnivb, - notnivc: notnivc, - npar: npar, - nparallel: nparallel, - nparsl: nparsl, - npart: npart, - npolint: npolint, - npr: npr, - nprcue: nprcue, - npre: npre, - nprec: nprec, - npreceq: npreceq, - nrArr: nrArr, - nrarr: nrarr, - nrarrc: nrarrc, - nrarrw: nrarrw, - nrightarrow: nrightarrow, - nrtri: nrtri, - nrtrie: nrtrie, - nsc: nsc, - nsccue: nsccue, - nsce: nsce, - nscr: nscr, - nshortmid: nshortmid, - nshortparallel: nshortparallel, - nsim: nsim, - nsime: nsime, - nsimeq: nsimeq, - nsmid: nsmid, - nspar: nspar, - nsqsube: nsqsube, - nsqsupe: nsqsupe, - nsub: nsub, - nsubE: nsubE, - nsube: nsube, - nsubset: nsubset, - nsubseteq: nsubseteq, - nsubseteqq: nsubseteqq, - nsucc: nsucc, - nsucceq: nsucceq, - nsup: nsup, - nsupE: nsupE, - nsupe: nsupe, - nsupset: nsupset, - nsupseteq: nsupseteq, - nsupseteqq: nsupseteqq, - ntgl: ntgl, - ntild: ntild, - ntilde: ntilde, - ntlg: ntlg, - ntriangleleft: ntriangleleft, - ntrianglelefteq: ntrianglelefteq, - ntriangleright: ntriangleright, - ntrianglerighteq: ntrianglerighteq, - nu: nu, - num: num, - numero: numero, - numsp: numsp, - nvDash: nvDash, - nvHarr: nvHarr, - nvap: nvap, - nvdash: nvdash, - nvge: nvge, - nvgt: nvgt, - nvinfin: nvinfin, - nvlArr: nvlArr, - nvle: nvle, - nvlt: nvlt, - nvltrie: nvltrie, - nvrArr: nvrArr, - nvrtrie: nvrtrie, - nvsim: nvsim, - nwArr: nwArr, - nwarhk: nwarhk, - nwarr: nwarr, - nwarrow: nwarrow, - nwnear: nwnear, - oS: oS, - oacut: oacut, - oacute: oacute, - oast: oast, - ocir: ocir, - ocirc: ocirc, - ocy: ocy, - odash: odash, - odblac: odblac, - odiv: odiv, - odot: odot, - odsold: odsold, - oelig: oelig, - ofcir: ofcir, - ofr: ofr, - ogon: ogon, - ograv: ograv, - ograve: ograve, - ogt: ogt, - ohbar: ohbar, - ohm: ohm, - oint: oint, - olarr: olarr, - olcir: olcir, - olcross: olcross, - oline: oline, - olt: olt, - omacr: omacr, - omega: omega, - omicron: omicron, - omid: omid, - ominus: ominus, - oopf: oopf, - opar: opar, - operp: operp, - oplus: oplus, - or: or, - orarr: orarr, - ord: ord, - order: order, - orderof: orderof, - ordf: ordf, - ordm: ordm, - origof: origof, - oror: oror, - orslope: orslope, - orv: orv, - oscr: oscr, - oslas: oslas, - oslash: oslash, - osol: osol, - otild: otild, - otilde: otilde, - otimes: otimes, - otimesas: otimesas, - oum: oum, - ouml: ouml, - ovbar: ovbar, - par: par, - para: para, - parallel: parallel, - parsim: parsim, - parsl: parsl, - part: part, - pcy: pcy, - percnt: percnt, - period: period, - permil: permil, - perp: perp, - pertenk: pertenk, - pfr: pfr, - phi: phi, - phiv: phiv, - phmmat: phmmat, - phone: phone, - pi: pi, - pitchfork: pitchfork, - piv: piv, - planck: planck, - planckh: planckh, - plankv: plankv, - plus: plus, - plusacir: plusacir, - plusb: plusb, - pluscir: pluscir, - plusdo: plusdo, - plusdu: plusdu, - pluse: pluse, - plusm: plusm, - plusmn: plusmn, - plussim: plussim, - plustwo: plustwo, - pm: pm, - pointint: pointint, - popf: popf, - poun: poun, - pound: pound, - pr: pr, - prE: prE, - prap: prap, - prcue: prcue, - pre: pre, - prec: prec, - precapprox: precapprox, - preccurlyeq: preccurlyeq, - preceq: preceq, - precnapprox: precnapprox, - precneqq: precneqq, - precnsim: precnsim, - precsim: precsim, - prime: prime, - primes: primes, - prnE: prnE, - prnap: prnap, - prnsim: prnsim, - prod: prod, - profalar: profalar, - profline: profline, - profsurf: profsurf, - prop: prop, - propto: propto, - prsim: prsim, - prurel: prurel, - pscr: pscr, - psi: psi, - puncsp: puncsp, - qfr: qfr, - qint: qint, - qopf: qopf, - qprime: qprime, - qscr: qscr, - quaternions: quaternions, - quatint: quatint, - quest: quest, - questeq: questeq, - quo: quo, - quot: quot, - rAarr: rAarr, - rArr: rArr, - rAtail: rAtail, - rBarr: rBarr, - rHar: rHar, - race: race, - racute: racute, - radic: radic, - raemptyv: raemptyv, - rang: rang, - rangd: rangd, - range: range, - rangle: rangle, - raqu: raqu, - raquo: raquo, - rarr: rarr, - rarrap: rarrap, - rarrb: rarrb, - rarrbfs: rarrbfs, - rarrc: rarrc, - rarrfs: rarrfs, - rarrhk: rarrhk, - rarrlp: rarrlp, - rarrpl: rarrpl, - rarrsim: rarrsim, - rarrtl: rarrtl, - rarrw: rarrw, - ratail: ratail, - ratio: ratio, - rationals: rationals, - rbarr: rbarr, - rbbrk: rbbrk, - rbrace: rbrace, - rbrack: rbrack, - rbrke: rbrke, - rbrksld: rbrksld, - rbrkslu: rbrkslu, - rcaron: rcaron, - rcedil: rcedil, - rceil: rceil, - rcub: rcub, - rcy: rcy, - rdca: rdca, - rdldhar: rdldhar, - rdquo: rdquo, - rdquor: rdquor, - rdsh: rdsh, - real: real, - realine: realine, - realpart: realpart, - reals: reals, - rect: rect, - re: re$4, - reg: reg, - rfisht: rfisht, - rfloor: rfloor, - rfr: rfr, - rhard: rhard, - rharu: rharu, - rharul: rharul, - rho: rho, - rhov: rhov, - rightarrow: rightarrow, - rightarrowtail: rightarrowtail, - rightharpoondown: rightharpoondown, - rightharpoonup: rightharpoonup, - rightleftarrows: rightleftarrows, - rightleftharpoons: rightleftharpoons, - rightrightarrows: rightrightarrows, - rightsquigarrow: rightsquigarrow, - rightthreetimes: rightthreetimes, - ring: ring, - risingdotseq: risingdotseq, - rlarr: rlarr, - rlhar: rlhar, - rlm: rlm, - rmoust: rmoust, - rmoustache: rmoustache, - rnmid: rnmid, - roang: roang, - roarr: roarr, - robrk: robrk, - ropar: ropar, - ropf: ropf, - roplus: roplus, - rotimes: rotimes, - rpar: rpar, - rpargt: rpargt, - rppolint: rppolint, - rrarr: rrarr, - rsaquo: rsaquo, - rscr: rscr, - rsh: rsh, - rsqb: rsqb, - rsquo: rsquo, - rsquor: rsquor, - rthree: rthree, - rtimes: rtimes, - rtri: rtri, - rtrie: rtrie, - rtrif: rtrif, - rtriltri: rtriltri, - ruluhar: ruluhar, - rx: rx, - sacute: sacute, - sbquo: sbquo, - sc: sc, - scE: scE, - scap: scap, - scaron: scaron, - sccue: sccue, - sce: sce, - scedil: scedil, - scirc: scirc, - scnE: scnE, - scnap: scnap, - scnsim: scnsim, - scpolint: scpolint, - scsim: scsim, - scy: scy, - sdot: sdot, - sdotb: sdotb, - sdote: sdote, - seArr: seArr, - searhk: searhk, - searr: searr, - searrow: searrow, - sec: sec, - sect: sect, - semi: semi, - seswar: seswar, - setminus: setminus, - setmn: setmn, - sext: sext, - sfr: sfr, - sfrown: sfrown, - sharp: sharp, - shchcy: shchcy, - shcy: shcy, - shortmid: shortmid, - shortparallel: shortparallel, - sh: sh, - shy: shy, - sigma: sigma, - sigmaf: sigmaf, - sigmav: sigmav, - sim: sim, - simdot: simdot, - sime: sime, - simeq: simeq, - simg: simg, - simgE: simgE, - siml: siml, - simlE: simlE, - simne: simne, - simplus: simplus, - simrarr: simrarr, - slarr: slarr, - smallsetminus: smallsetminus, - smashp: smashp, - smeparsl: smeparsl, - smid: smid, - smile: smile, - smt: smt, - smte: smte, - smtes: smtes, - softcy: softcy, - sol: sol, - solb: solb, - solbar: solbar, - sopf: sopf, - spades: spades, - spadesuit: spadesuit, - spar: spar, - sqcap: sqcap, - sqcaps: sqcaps, - sqcup: sqcup, - sqcups: sqcups, - sqsub: sqsub, - sqsube: sqsube, - sqsubset: sqsubset, - sqsubseteq: sqsubseteq, - sqsup: sqsup, - sqsupe: sqsupe, - sqsupset: sqsupset, - sqsupseteq: sqsupseteq, - squ: squ, - square: square, - squarf: squarf, - squf: squf, - srarr: srarr, - sscr: sscr, - ssetmn: ssetmn, - ssmile: ssmile, - sstarf: sstarf, - star: star, - starf: starf, - straightepsilon: straightepsilon, - straightphi: straightphi, - strns: strns, - sub: sub, - subE: subE, - subdot: subdot, - sube: sube, - subedot: subedot, - submult: submult, - subnE: subnE, - subne: subne, - subplus: subplus, - subrarr: subrarr, - subset: subset, - subseteq: subseteq, - subseteqq: subseteqq, - subsetneq: subsetneq, - subsetneqq: subsetneqq, - subsim: subsim, - subsub: subsub, - subsup: subsup, - succ: succ, - succapprox: succapprox, - succcurlyeq: succcurlyeq, - succeq: succeq, - succnapprox: succnapprox, - succneqq: succneqq, - succnsim: succnsim, - succsim: succsim, - sum: sum, - sung: sung, - sup: sup, - sup1: sup1, - sup2: sup2, - sup3: sup3, - supE: supE, - supdot: supdot, - supdsub: supdsub, - supe: supe, - supedot: supedot, - suphsol: suphsol, - suphsub: suphsub, - suplarr: suplarr, - supmult: supmult, - supnE: supnE, - supne: supne, - supplus: supplus, - supset: supset, - supseteq: supseteq, - supseteqq: supseteqq, - supsetneq: supsetneq, - supsetneqq: supsetneqq, - supsim: supsim, - supsub: supsub, - supsup: supsup, - swArr: swArr, - swarhk: swarhk, - swarr: swarr, - swarrow: swarrow, - swnwar: swnwar, - szli: szli, - szlig: szlig, - target: target, - tau: tau, - tbrk: tbrk, - tcaron: tcaron, - tcedil: tcedil, - tcy: tcy, - tdot: tdot, - telrec: telrec, - tfr: tfr, - there4: there4, - therefore: therefore, - theta: theta, - thetasym: thetasym, - thetav: thetav, - thickapprox: thickapprox, - thicksim: thicksim, - thinsp: thinsp, - thkap: thkap, - thksim: thksim, - thor: thor, - thorn: thorn, - tilde: tilde, - time: time, - times: times, - timesb: timesb, - timesbar: timesbar, - timesd: timesd, - tint: tint, - toea: toea, - top: top, - topbot: topbot, - topcir: topcir, - topf: topf, - topfork: topfork, - tosa: tosa, - tprime: tprime, - trade: trade, - triangle: triangle, - triangledown: triangledown, - triangleleft: triangleleft, - trianglelefteq: trianglelefteq, - triangleq: triangleq, - triangleright: triangleright, - trianglerighteq: trianglerighteq, - tridot: tridot, - trie: trie, - triminus: triminus, - triplus: triplus, - trisb: trisb, - tritime: tritime, - trpezium: trpezium, - tscr: tscr, - tscy: tscy, - tshcy: tshcy, - tstrok: tstrok, - twixt: twixt, - twoheadleftarrow: twoheadleftarrow, - twoheadrightarrow: twoheadrightarrow, - uArr: uArr, - uHar: uHar, - uacut: uacut, - uacute: uacute, - uarr: uarr, - ubrcy: ubrcy, - ubreve: ubreve, - ucir: ucir, - ucirc: ucirc, - ucy: ucy, - udarr: udarr, - udblac: udblac, - udhar: udhar, - ufisht: ufisht, - ufr: ufr, - ugrav: ugrav, - ugrave: ugrave, - uharl: uharl, - uharr: uharr, - uhblk: uhblk, - ulcorn: ulcorn, - ulcorner: ulcorner, - ulcrop: ulcrop, - ultri: ultri, - umacr: umacr, - um: um, - uml: uml, - uogon: uogon, - uopf: uopf, - uparrow: uparrow, - updownarrow: updownarrow, - upharpoonleft: upharpoonleft, - upharpoonright: upharpoonright, - uplus: uplus, - upsi: upsi, - upsih: upsih, - upsilon: upsilon, - upuparrows: upuparrows, - urcorn: urcorn, - urcorner: urcorner, - urcrop: urcrop, - uring: uring, - urtri: urtri, - uscr: uscr, - utdot: utdot, - utilde: utilde, - utri: utri, - utrif: utrif, - uuarr: uuarr, - uum: uum, - uuml: uuml, - uwangle: uwangle, - vArr: vArr, - vBar: vBar, - vBarv: vBarv, - vDash: vDash, - vangrt: vangrt, - varepsilon: varepsilon, - varkappa: varkappa, - varnothing: varnothing, - varphi: varphi, - varpi: varpi, - varpropto: varpropto, - varr: varr, - varrho: varrho, - varsigma: varsigma, - varsubsetneq: varsubsetneq, - varsubsetneqq: varsubsetneqq, - varsupsetneq: varsupsetneq, - varsupsetneqq: varsupsetneqq, - vartheta: vartheta, - vartriangleleft: vartriangleleft, - vartriangleright: vartriangleright, - vcy: vcy, - vdash: vdash, - vee: vee, - veebar: veebar, - veeeq: veeeq, - vellip: vellip, - verbar: verbar, - vert: vert, - vfr: vfr, - vltri: vltri, - vnsub: vnsub, - vnsup: vnsup, - vopf: vopf, - vprop: vprop, - vrtri: vrtri, - vscr: vscr, - vsubnE: vsubnE, - vsubne: vsubne, - vsupnE: vsupnE, - vsupne: vsupne, - vzigzag: vzigzag, - wcirc: wcirc, - wedbar: wedbar, - wedge: wedge, - wedgeq: wedgeq, - weierp: weierp, - wfr: wfr, - wopf: wopf, - wp: wp, - wr: wr, - wreath: wreath, - wscr: wscr, - xcap: xcap, - xcirc: xcirc, - xcup: xcup, - xdtri: xdtri, - xfr: xfr, - xhArr: xhArr, - xharr: xharr, - xi: xi, - xlArr: xlArr, - xlarr: xlarr, - xmap: xmap, - xnis: xnis, - xodot: xodot, - xopf: xopf, - xoplus: xoplus, - xotime: xotime, - xrArr: xrArr, - xrarr: xrarr, - xscr: xscr, - xsqcup: xsqcup, - xuplus: xuplus, - xutri: xutri, - xvee: xvee, - xwedge: xwedge, - yacut: yacut, - yacute: yacute, - yacy: yacy, - ycirc: ycirc, - ycy: ycy, - ye: ye, - yen: yen, - yfr: yfr, - yicy: yicy, - yopf: yopf, - yscr: yscr, - yucy: yucy, - yum: yum, - yuml: yuml, - zacute: zacute, - zcaron: zcaron, - zcy: zcy, - zdot: zdot, - zeetrf: zeetrf, - zeta: zeta, - zfr: zfr, - zhcy: zhcy, - zigrarr: zigrarr, - zopf: zopf, - zscr: zscr, - zwj: zwj, - zwnj: zwnj -}; + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code); + return completeEnd + } -var characterEntities = require$$0; + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code); + return completeAttributeName + } -var decodeEntity_1 = decodeEntity; + if (markdownSpace(code)) { + effects.consume(code); + return completeAttributeNameBefore + } -var own$5 = {}.hasOwnProperty; + return completeEnd(code) + } + /** @type {State} */ -function decodeEntity(characters) { - return own$5.call(characterEntities, characters) - ? characterEntities[characters] - : false -} + function completeAttributeName(code) { + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code); + return completeAttributeName + } -var association_1 = association$3; + return completeAttributeNameAfter(code) + } + /** @type {State} */ -var decode = decodeEntity_1; + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code); + return completeAttributeValueBefore + } -var characterEscape = /\\([!-/:-@[-`{-~])/g; -var characterReference = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; + if (markdownSpace(code)) { + effects.consume(code); + return completeAttributeNameAfter + } -// The `label` of an association is the string value: character escapes and -// references work, and casing is intact. -// The `identifier` is used to match one association to another: controversially, -// character escapes and references don’t work in this matching: `©` does -// not match `©`, and `\+` does not match `+`. -// But casing is ignored (and whitespace) is trimmed and collapsed: ` A\nb` -// matches `a b`. -// So, we do prefer the label when figuring out how we’re going to serialize: -// it has whitespace, casing, and we can ignore most useless character escapes -// and all character references. -function association$3(node) { - if (node.label || !node.identifier) { - return node.label || '' + return completeAttributeNameBefore(code) } + /** @type {State} */ - return node.identifier - .replace(characterEscape, '$1') - .replace(characterReference, decodeIfPossible) -} - -function decodeIfPossible($0, $1) { - return decode($1) || $0 -} + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } -var checkQuote_1 = checkQuote$3; + if (code === 34 || code === 39) { + effects.consume(code); + marker = code; + return completeAttributeValueQuoted + } -function checkQuote$3(context) { - var marker = context.options.quote || '"'; + if (markdownSpace(code)) { + effects.consume(code); + return completeAttributeValueBefore + } - if (marker !== '"' && marker !== "'") { - throw new Error( - 'Cannot serialize title with `' + - marker + - '` for `options.quote`, expected `"`, or `\'`' - ) + marker = null; + return completeAttributeValueUnquoted(code) } + /** @type {State} */ - return marker -} - -var definition_1 = definition; + function completeAttributeValueQuoted(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } -var association$2 = association_1; -var checkQuote$2 = checkQuote_1; -var safe$5 = safe_1; + if (code === marker) { + effects.consume(code); + return completeAttributeValueQuotedAfter + } -function definition(node, _, context) { - var marker = checkQuote$2(context); - var suffix = marker === '"' ? 'Quote' : 'Apostrophe'; - var exit = context.enter('definition'); - var subexit = context.enter('label'); - var value = - '[' + safe$5(context, association$2(node), {before: '[', after: ']'}) + ']: '; + effects.consume(code); + return completeAttributeValueQuoted + } + /** @type {State} */ - subexit(); + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } - if ( - // If there’s no url, or… - !node.url || - // If there’s whitespace, enclosed is prettier. - /[ \t\r\n]/.test(node.url) - ) { - subexit = context.enter('destinationLiteral'); - value += '<' + safe$5(context, node.url, {before: '<', after: '>'}) + '>'; - } else { - // No whitespace, raw is prettier. - subexit = context.enter('destinationRaw'); - value += safe$5(context, node.url, {before: ' ', after: ' '}); + effects.consume(code); + return completeAttributeValueUnquoted } + /** @type {State} */ - subexit(); + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } - if (node.title) { - subexit = context.enter('title' + suffix); - value += - ' ' + - marker + - safe$5(context, node.title, {before: marker, after: marker}) + - marker; - subexit(); + return nok(code) } + /** @type {State} */ - exit(); - - return value -} + function completeEnd(code) { + if (code === 62) { + effects.consume(code); + return completeAfter + } -var checkEmphasis_1 = checkEmphasis$1; + return nok(code) + } + /** @type {State} */ -function checkEmphasis$1(context) { - var marker = context.options.emphasis || '*'; + function completeAfter(code) { + if (markdownSpace(code)) { + effects.consume(code); + return completeAfter + } - if (marker !== '*' && marker !== '_') { - throw new Error( - 'Cannot serialize emphasis with `' + - marker + - '` for `options.emphasis`, expected `*`, or `_`' - ) + return code === null || markdownLineEnding(code) + ? continuation(code) + : nok(code) } + /** @type {State} */ - return marker -} + function continuation(code) { + if (code === 45 && kind === 2) { + effects.consume(code); + return continuationCommentInside + } -var containerPhrasing$1 = phrasing$6; + if (code === 60 && kind === 1) { + effects.consume(code); + return continuationRawTagOpen + } -function phrasing$6(parent, context, safeOptions) { - var children = parent.children || []; - var results = []; - var index = -1; - var before = safeOptions.before; - var after; - var handle; - var child; + if (code === 62 && kind === 4) { + effects.consume(code); + return continuationClose + } - while (++index < children.length) { - child = children[index]; + if (code === 63 && kind === 3) { + effects.consume(code); + return continuationDeclarationInside + } - if (index + 1 < children.length) { - handle = context.handle.handlers[children[index + 1].type]; - if (handle && handle.peek) handle = handle.peek; - after = handle - ? handle(children[index + 1], parent, context, { - before: '', - after: '' - }).charAt(0) - : ''; - } else { - after = safeOptions.after; + if (code === 93 && kind === 5) { + effects.consume(code); + return continuationCharacterDataInside } - // In some cases, html (text) can be found in phrasing right after an eol. - // When we’d serialize that, in most cases that would be seen as html - // (flow). - // As we can’t escape or so to prevent it from happening, we take a somewhat - // reasonable approach: replace that eol with a space. - // See: - if ( - results.length > 0 && - (before === '\r' || before === '\n') && - child.type === 'html' - ) { - results[results.length - 1] = results[results.length - 1].replace( - /(\r?\n|\r)$/, - ' ' - ); - before = ' '; + if (markdownLineEnding(code) && (kind === 6 || kind === 7)) { + return effects.check( + nextBlankConstruct, + continuationClose, + continuationAtLineEnding + )(code) } - results.push( - context.handle(child, parent, context, { - before: before, - after: after - }) - ); + if (code === null || markdownLineEnding(code)) { + return continuationAtLineEnding(code) + } - before = results[results.length - 1].slice(-1); + effects.consume(code); + return continuation } + /** @type {State} */ - return results.join('') -} - -var emphasis_1 = emphasis; -emphasis.peek = emphasisPeek; - -var checkEmphasis = checkEmphasis_1; -var phrasing$5 = containerPhrasing$1; + function continuationAtLineEnding(code) { + effects.exit('htmlFlowData'); + return htmlContinueStart(code) + } + /** @type {State} */ -// To do: there are cases where emphasis cannot “form” depending on the -// previous or next character of sequences. -// There’s no way around that though, except for injecting zero-width stuff. -// Do we need to safeguard against that? -function emphasis(node, _, context) { - var marker = checkEmphasis(context); - var exit = context.enter('emphasis'); - var value = phrasing$5(node, context, {before: marker, after: marker}); - exit(); - return marker + value + marker -} + function htmlContinueStart(code) { + if (code === null) { + return done(code) + } -function emphasisPeek(node, _, context) { - return context.options.emphasis || '*' -} + if (markdownLineEnding(code)) { + return effects.attempt( + { + tokenize: htmlLineEnd, + partial: true + }, + htmlContinueStart, + done + )(code) + } -var mdastUtilToString = toString$3; + effects.enter('htmlFlowData'); + return continuation(code) + } + /** @type {Tokenizer} */ -// Get the text content of a node. -// Prefer the node’s plain-text fields, otherwise serialize its children, -// and if the given value is an array, serialize the nodes in it. -function toString$3(node) { - return ( - (node && - (node.value || - node.alt || - node.title || - ('children' in node && all$1(node.children)) || - ('length' in node && all$1(node)))) || - '' - ) -} + function htmlLineEnd(effects, ok, nok) { + return start + /** @type {State} */ -function all$1(values) { - var result = []; - var index = -1; + function start(code) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return lineStart + } + /** @type {State} */ - while (++index < values.length) { - result[index] = toString$3(values[index]); + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } } + /** @type {State} */ - return result.join('') -} - -var formatHeadingAsSetext_1 = formatHeadingAsSetext$2; + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code); + return continuationDeclarationInside + } -var toString$2 = mdastUtilToString; + return continuation(code) + } + /** @type {State} */ -function formatHeadingAsSetext$2(node, context) { - return ( - context.options.setext && (!node.depth || node.depth < 3) && toString$2(node) - ) -} - -var heading_1 = heading; - -var repeat$3 = repeatString; -var formatHeadingAsSetext$1 = formatHeadingAsSetext_1; -var phrasing$4 = containerPhrasing$1; - -function heading(node, _, context) { - var rank = Math.max(Math.min(6, node.depth || 1), 1); - var exit; - var subexit; - var value; - var sequence; - - if (formatHeadingAsSetext$1(node, context)) { - exit = context.enter('headingSetext'); - subexit = context.enter('phrasing'); - value = phrasing$4(node, context, {before: '\n', after: '\n'}); - subexit(); - exit(); - - return ( - value + - '\n' + - repeat$3( - rank === 1 ? '=' : '-', - // The whole size… - value.length - - // Minus the position of the character after the last EOL (or - // 0 if there is none)… - (Math.max(value.lastIndexOf('\r'), value.lastIndexOf('\n')) + 1) - ) - ) - } + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code); + buffer = ''; + return continuationRawEndTag + } - sequence = repeat$3('#', rank); - exit = context.enter('headingAtx'); - subexit = context.enter('phrasing'); - value = phrasing$4(node, context, {before: '# ', after: '\n'}); - value = value ? sequence + ' ' + value : sequence; - if (context.options.closeAtx) { - value += ' ' + sequence; + return continuation(code) } + /** @type {State} */ - subexit(); - exit(); - - return value -} + function continuationRawEndTag(code) { + if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) { + effects.consume(code); + return continuationClose + } -var html_1 = html; -html.peek = htmlPeek; + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code); + buffer += String.fromCharCode(code); + return continuationRawEndTag + } -function html(node) { - return node.value || '' -} + return continuation(code) + } + /** @type {State} */ -function htmlPeek() { - return '<' -} + function continuationCharacterDataInside(code) { + if (code === 93) { + effects.consume(code); + return continuationDeclarationInside + } -var image_1 = image; -image.peek = imagePeek; + return continuation(code) + } + /** @type {State} */ -var checkQuote$1 = checkQuote_1; -var safe$4 = safe_1; + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code); + return continuationClose + } -function image(node, _, context) { - var quote = checkQuote$1(context); - var suffix = quote === '"' ? 'Quote' : 'Apostrophe'; - var exit = context.enter('image'); - var subexit = context.enter('label'); - var value = '![' + safe$4(context, node.alt, {before: '[', after: ']'}) + ']('; + return continuation(code) + } + /** @type {State} */ - subexit(); + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData'); + return done(code) + } - if ( - // If there’s no url but there is a title… - (!node.url && node.title) || - // Or if there’s markdown whitespace or an eol, enclose. - /[ \t\r\n]/.test(node.url) - ) { - subexit = context.enter('destinationLiteral'); - value += '<' + safe$4(context, node.url, {before: '<', after: '>'}) + '>'; - } else { - // No whitespace, raw is prettier. - subexit = context.enter('destinationRaw'); - value += safe$4(context, node.url, { - before: '(', - after: node.title ? ' ' : ')' - }); + effects.consume(code); + return continuationClose } + /** @type {State} */ - subexit(); - - if (node.title) { - subexit = context.enter('title' + suffix); - value += - ' ' + - quote + - safe$4(context, node.title, {before: quote, after: quote}) + - quote; - subexit(); + function done(code) { + effects.exit('htmlFlow'); + return ok(code) } +} +/** @type {Tokenizer} */ - value += ')'; - exit(); +function tokenizeNextBlank(effects, ok, nok) { + return start + /** @type {State} */ - return value + function start(code) { + effects.exit('htmlFlowData'); + effects.enter('lineEndingBlank'); + effects.consume(code); + effects.exit('lineEndingBlank'); + return effects.attempt(blankLine, ok, nok) + } } -function imagePeek() { - return '!' -} +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ -var imageReference_1 = imageReference; -imageReference.peek = imageReferencePeek; +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +}; +/** @type {Tokenizer} */ -var association$1 = association_1; -var safe$3 = safe_1; +function tokenizeHtmlText(effects, ok, nok) { + const self = this; + /** @type {NonNullable|undefined} */ -function imageReference(node, _, context) { - var type = node.referenceType; - var exit = context.enter('imageReference'); - var subexit = context.enter('label'); - var alt = safe$3(context, node.alt, {before: '[', after: ']'}); - var value = '![' + alt + ']'; - var reference; - var stack; + let marker; + /** @type {string} */ - subexit(); - // Hide the fact that we’re in phrasing, because escapes don’t work. - stack = context.stack; - context.stack = []; - subexit = context.enter('reference'); - reference = safe$3(context, association$1(node), {before: '[', after: ']'}); - subexit(); - context.stack = stack; - exit(); + let buffer; + /** @type {number} */ - if (type === 'full' || !alt || alt !== reference) { - value += '[' + reference + ']'; - } else if (type !== 'shortcut') { - value += '[]'; - } + let index; + /** @type {State} */ - return value -} + let returnState; + return start + /** @type {State} */ -function imageReferencePeek() { - return '!' -} + function start(code) { + effects.enter('htmlText'); + effects.enter('htmlTextData'); + effects.consume(code); + return open + } + /** @type {State} */ -var inlineCode_1 = inlineCode$1; -inlineCode$1.peek = inlineCodePeek$1; + function open(code) { + if (code === 33) { + effects.consume(code); + return declarationOpen + } -var patternCompile$1 = patternCompile_1; + if (code === 47) { + effects.consume(code); + return tagCloseStart + } -function inlineCode$1(node, parent, context) { - var value = node.value || ''; - var sequence = '`'; - var index = -1; - var pattern; - var expression; - var match; - var position; + if (code === 63) { + effects.consume(code); + return instruction + } - // If there is a single grave accent on its own in the code, use a fence of - // two. - // If there are two in a row, use one. - while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) { - sequence += '`'; - } + if (asciiAlpha(code)) { + effects.consume(code); + return tagOpen + } - // If this is not just spaces or eols (tabs don’t count), and either the - // first or last character are a space, eol, or tick, then pad with spaces. - if ( - /[^ \r\n]/.test(value) && - (/[ \r\n`]/.test(value.charAt(0)) || - /[ \r\n`]/.test(value.charAt(value.length - 1))) - ) { - value = ' ' + value + ' '; + return nok(code) } + /** @type {State} */ - // We have a potential problem: certain characters after eols could result in - // blocks being seen. - // For example, if someone injected the string `'\n# b'`, then that would - // result in an ATX heading. - // We can’t escape characters in `inlineCode`, but because eols are - // transformed to spaces when going from markdown to HTML anyway, we can swap - // them out. - while (++index < context.unsafe.length) { - pattern = context.unsafe[index]; - - // Only look for `atBreak`s. - // Btw: note that `atBreak` patterns will always start the regex at LF or - // CR. - if (!pattern.atBreak) continue + function declarationOpen(code) { + if (code === 45) { + effects.consume(code); + return commentOpen + } - expression = patternCompile$1(pattern); + if (code === 91) { + effects.consume(code); + buffer = 'CDATA['; + index = 0; + return cdataOpen + } - while ((match = expression.exec(value))) { - position = match.index; + if (asciiAlpha(code)) { + effects.consume(code); + return declaration + } - // Support CRLF (patterns only look for one of the characters). - if ( - value.charCodeAt(position) === 10 /* `\n` */ && - value.charCodeAt(position - 1) === 13 /* `\r` */ - ) { - position--; - } + return nok(code) + } + /** @type {State} */ - value = value.slice(0, position) + ' ' + value.slice(match.index + 1); + function commentOpen(code) { + if (code === 45) { + effects.consume(code); + return commentStart } - } - return sequence + value + sequence -} + return nok(code) + } + /** @type {State} */ -function inlineCodePeek$1() { - return '`' -} + function commentStart(code) { + if (code === null || code === 62) { + return nok(code) + } -var formatLinkAsAutolink_1 = formatLinkAsAutolink$1; + if (code === 45) { + effects.consume(code); + return commentStartDash + } -var toString$1 = mdastUtilToString; + return comment(code) + } + /** @type {State} */ -function formatLinkAsAutolink$1(node, context) { - var raw = toString$1(node); + function commentStartDash(code) { + if (code === null || code === 62) { + return nok(code) + } - return ( - !context.options.resourceLink && - // If there’s a url… - node.url && - // And there’s a no title… - !node.title && - // And the content of `node` is a single text node… - node.children && - node.children.length === 1 && - node.children[0].type === 'text' && - // And if the url is the same as the content… - (raw === node.url || 'mailto:' + raw === node.url) && - // And that starts w/ a protocol… - /^[a-z][a-z+.-]+:/i.test(node.url) && - // And that doesn’t contain ASCII control codes (character escapes and - // references don’t work) or angle brackets… - !/[\0- <>\u007F]/.test(node.url) - ) -} + return comment(code) + } + /** @type {State} */ -var link_1 = link; -link.peek = linkPeek; + function comment(code) { + if (code === null) { + return nok(code) + } -var checkQuote = checkQuote_1; -var formatLinkAsAutolink = formatLinkAsAutolink_1; -var phrasing$3 = containerPhrasing$1; -var safe$2 = safe_1; + if (code === 45) { + effects.consume(code); + return commentClose + } -function link(node, _, context) { - var quote = checkQuote(context); - var suffix = quote === '"' ? 'Quote' : 'Apostrophe'; - var exit; - var subexit; - var value; - var stack; + if (markdownLineEnding(code)) { + returnState = comment; + return atLineEnding(code) + } - if (formatLinkAsAutolink(node, context)) { - // Hide the fact that we’re in phrasing, because escapes don’t work. - stack = context.stack; - context.stack = []; - exit = context.enter('autolink'); - value = '<' + phrasing$3(node, context, {before: '<', after: '>'}) + '>'; - exit(); - context.stack = stack; - return value + effects.consume(code); + return comment } + /** @type {State} */ - exit = context.enter('link'); - subexit = context.enter('label'); - value = '[' + phrasing$3(node, context, {before: '[', after: ']'}) + ']('; - subexit(); + function commentClose(code) { + if (code === 45) { + effects.consume(code); + return end + } - if ( - // If there’s no url but there is a title… - (!node.url && node.title) || - // Or if there’s markdown whitespace or an eol, enclose. - /[ \t\r\n]/.test(node.url) - ) { - subexit = context.enter('destinationLiteral'); - value += '<' + safe$2(context, node.url, {before: '<', after: '>'}) + '>'; - } else { - // No whitespace, raw is prettier. - subexit = context.enter('destinationRaw'); - value += safe$2(context, node.url, { - before: '(', - after: node.title ? ' ' : ')' - }); + return comment(code) } + /** @type {State} */ - subexit(); + function cdataOpen(code) { + if (code === buffer.charCodeAt(index++)) { + effects.consume(code); + return index === buffer.length ? cdata : cdataOpen + } - if (node.title) { - subexit = context.enter('title' + suffix); - value += - ' ' + - quote + - safe$2(context, node.title, {before: quote, after: quote}) + - quote; - subexit(); + return nok(code) } + /** @type {State} */ - value += ')'; - - exit(); - return value -} - -function linkPeek(node, _, context) { - return formatLinkAsAutolink(node, context) ? '<' : '[' -} - -var linkReference_1 = linkReference; -linkReference.peek = linkReferencePeek; - -var association = association_1; -var phrasing$2 = containerPhrasing$1; -var safe$1 = safe_1; + function cdata(code) { + if (code === null) { + return nok(code) + } -function linkReference(node, _, context) { - var type = node.referenceType; - var exit = context.enter('linkReference'); - var subexit = context.enter('label'); - var text = phrasing$2(node, context, {before: '[', after: ']'}); - var value = '[' + text + ']'; - var reference; - var stack; + if (code === 93) { + effects.consume(code); + return cdataClose + } - subexit(); - // Hide the fact that we’re in phrasing, because escapes don’t work. - stack = context.stack; - context.stack = []; - subexit = context.enter('reference'); - reference = safe$1(context, association(node), {before: '[', after: ']'}); - subexit(); - context.stack = stack; - exit(); + if (markdownLineEnding(code)) { + returnState = cdata; + return atLineEnding(code) + } - if (type === 'full' || !text || text !== reference) { - value += '[' + reference + ']'; - } else if (type !== 'shortcut') { - value += '[]'; + effects.consume(code); + return cdata } + /** @type {State} */ - return value -} + function cdataClose(code) { + if (code === 93) { + effects.consume(code); + return cdataEnd + } -function linkReferencePeek() { - return '[' -} + return cdata(code) + } + /** @type {State} */ -var list_1 = list; + function cdataEnd(code) { + if (code === 62) { + return end(code) + } -var flow$2 = containerFlow$1; + if (code === 93) { + effects.consume(code); + return cdataEnd + } -function list(node, _, context) { - var exit = context.enter('list'); - var value = flow$2(node, context); - exit(); - return value -} + return cdata(code) + } + /** @type {State} */ -var checkBullet_1 = checkBullet$2; + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } -function checkBullet$2(context) { - var marker = context.options.bullet || '*'; + if (markdownLineEnding(code)) { + returnState = declaration; + return atLineEnding(code) + } - if (marker !== '*' && marker !== '+' && marker !== '-') { - throw new Error( - 'Cannot serialize items with `' + - marker + - '` for `options.bullet`, expected `*`, `+`, or `-`' - ) + effects.consume(code); + return declaration } + /** @type {State} */ - return marker -} + function instruction(code) { + if (code === null) { + return nok(code) + } -var checkListItemIndent_1 = checkListItemIndent$2; + if (code === 63) { + effects.consume(code); + return instructionClose + } -function checkListItemIndent$2(context) { - var style = context.options.listItemIndent || 'tab'; + if (markdownLineEnding(code)) { + returnState = instruction; + return atLineEnding(code) + } - if (style === 1 || style === '1') { - return 'one' + effects.consume(code); + return instruction } + /** @type {State} */ - if (style !== 'tab' && style !== 'one' && style !== 'mixed') { - throw new Error( - 'Cannot serialize items with `' + - style + - '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`' - ) + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) } + /** @type {State} */ - return style -} - -var listItem_1 = listItem$1; - -var repeat$2 = repeatString; -var checkBullet$1 = checkBullet_1; -var checkListItemIndent$1 = checkListItemIndent_1; -var flow$1 = containerFlow$1; -var indentLines$1 = indentLines_1; - -function listItem$1(node, parent, context) { - var bullet = checkBullet$1(context); - var listItemIndent = checkListItemIndent$1(context); - var size; - var value; - var exit; + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code); + return tagClose + } - if (parent && parent.ordered) { - bullet = - (parent.start > -1 ? parent.start : 1) + - (context.options.incrementListMarker === false - ? 0 - : parent.children.indexOf(node)) + - '.'; + return nok(code) } + /** @type {State} */ - size = bullet.length + 1; + function tagClose(code) { + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code); + return tagClose + } - if ( - listItemIndent === 'tab' || - (listItemIndent === 'mixed' && ((parent && parent.spread) || node.spread)) - ) { - size = Math.ceil(size / 4) * 4; + return tagCloseBetween(code) } + /** @type {State} */ - exit = context.enter('listItem'); - value = indentLines$1(flow$1(node, context), map); - exit(); - - return value + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween; + return atLineEnding(code) + } - function map(line, index, blank) { - if (index) { - return (blank ? '' : repeat$2(' ', size)) + line + if (markdownSpace(code)) { + effects.consume(code); + return tagCloseBetween } - return (blank ? bullet : bullet + repeat$2(' ', size - bullet.length)) + line + return end(code) } -} + /** @type {State} */ -var paragraph_1 = paragraph; + function tagOpen(code) { + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code); + return tagOpen + } -var phrasing$1 = containerPhrasing$1; + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } -function paragraph(node, _, context) { - var exit = context.enter('paragraph'); - var subexit = context.enter('phrasing'); - var value = phrasing$1(node, context, {before: '\n', after: '\n'}); - subexit(); - exit(); - return value -} + return nok(code) + } + /** @type {State} */ -var root_1 = root; + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code); + return end + } -var flow = containerFlow$1; + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code); + return tagOpenAttributeName + } -function root(node, _, context) { - return flow(node, context) -} + if (markdownLineEnding(code)) { + returnState = tagOpenBetween; + return atLineEnding(code) + } -var checkStrong_1 = checkStrong$1; + if (markdownSpace(code)) { + effects.consume(code); + return tagOpenBetween + } -function checkStrong$1(context) { - var marker = context.options.strong || '*'; + return end(code) + } + /** @type {State} */ - if (marker !== '*' && marker !== '_') { - throw new Error( - 'Cannot serialize strong with `' + - marker + - '` for `options.strong`, expected `*`, or `_`' - ) + function tagOpenAttributeName(code) { + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code); + return tagOpenAttributeName + } + + return tagOpenAttributeNameAfter(code) } + /** @type {State} */ - return marker -} + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code); + return tagOpenAttributeValueBefore + } -var strong_1 = strong; -strong.peek = strongPeek; + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter; + return atLineEnding(code) + } -var checkStrong = checkStrong_1; -var phrasing = containerPhrasing$1; + if (markdownSpace(code)) { + effects.consume(code); + return tagOpenAttributeNameAfter + } -// To do: there are cases where emphasis cannot “form” depending on the -// previous or next character of sequences. -// There’s no way around that though, except for injecting zero-width stuff. -// Do we need to safeguard against that? -function strong(node, _, context) { - var marker = checkStrong(context); - var exit = context.enter('strong'); - var value = phrasing(node, context, {before: marker, after: marker}); - exit(); - return marker + marker + value + marker + marker -} + return tagOpenBetween(code) + } + /** @type {State} */ -function strongPeek(node, _, context) { - return context.options.strong || '*' -} + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } -var text_1 = text$1; + if (code === 34 || code === 39) { + effects.consume(code); + marker = code; + return tagOpenAttributeValueQuoted + } -var safe = safe_1; + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore; + return atLineEnding(code) + } -function text$1(node, parent, context, safeOptions) { - return safe(context, node.value, safeOptions) -} + if (markdownSpace(code)) { + effects.consume(code); + return tagOpenAttributeValueBefore + } -var checkRuleRepeat = checkRule$2; + effects.consume(code); + marker = undefined; + return tagOpenAttributeValueUnquoted + } + /** @type {State} */ -function checkRule$2(context) { - var repetition = context.options.ruleRepetition || 3; + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code); + return tagOpenAttributeValueQuotedAfter + } - if (repetition < 3) { - throw new Error( - 'Cannot serialize rules with repetition `' + - repetition + - '` for `options.ruleRepetition`, expected `3` or more' - ) + if (code === null) { + return nok(code) + } + + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted; + return atLineEnding(code) + } + + effects.consume(code); + return tagOpenAttributeValueQuoted } + /** @type {State} */ - return repetition -} + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } -var checkRule_1 = checkRule$1; + return nok(code) + } + /** @type {State} */ -function checkRule$1(context) { - var marker = context.options.rule || '*'; + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } - if (marker !== '*' && marker !== '-' && marker !== '_') { - throw new Error( - 'Cannot serialize rules with `' + - marker + - '` for `options.rule`, expected `*`, `-`, or `_`' + if (code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + + effects.consume(code); + return tagOpenAttributeValueUnquoted + } // We can’t have blank lines in content, so no need to worry about empty + // tokens. + + /** @type {State} */ + + function atLineEnding(code) { + effects.exit('htmlTextData'); + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace( + effects, + afterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 ) } + /** @type {State} */ - return marker + function afterPrefix(code) { + effects.enter('htmlTextData'); + return returnState(code) + } + /** @type {State} */ + + function end(code) { + if (code === 62) { + effects.consume(code); + effects.exit('htmlTextData'); + effects.exit('htmlText'); + return ok + } + + return nok(code) + } } -var thematicBreak_1 = thematicBreak; +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +}; +/** @type {Construct} */ -var repeat$1 = repeatString; -var checkRepeat = checkRuleRepeat; -var checkRule = checkRule_1; +const resourceConstruct = { + tokenize: tokenizeResource +}; +/** @type {Construct} */ -function thematicBreak(node, parent, context) { - var value = repeat$1( - checkRule(context) + (context.options.ruleSpaces ? ' ' : ''), - checkRepeat(context) - ); +const fullReferenceConstruct = { + tokenize: tokenizeFullReference +}; +/** @type {Construct} */ - return context.options.ruleSpaces ? value.slice(0, -1) : value -} +const collapsedReferenceConstruct = { + tokenize: tokenizeCollapsedReference +}; +/** @type {Resolver} */ -handle.blockquote = blockquote_1; -handle.break = _break; -handle.code = code_1; -handle.definition = definition_1; -handle.emphasis = emphasis_1; -handle.hardBreak = _break; -handle.heading = heading_1; -handle.html = html_1; -handle.image = image_1; -handle.imageReference = imageReference_1; -handle.inlineCode = inlineCode_1; -handle.link = link_1; -handle.linkReference = linkReference_1; -handle.list = list_1; -handle.listItem = listItem_1; -handle.paragraph = paragraph_1; -handle.root = root_1; -handle.strong = strong_1; -handle.text = text_1; -handle.thematicBreak = thematicBreak_1; - -var join = [joinDefaults]; - -var formatCodeAsIndented = formatCodeAsIndented_1; -var formatHeadingAsSetext = formatHeadingAsSetext_1; +function resolveAllLabelEnd(events) { + let index = -1; + /** @type {Token} */ -function joinDefaults(left, right, parent, context) { - if ( - // Two lists with the same marker. - (right.type === 'list' && - right.type === left.type && - Boolean(left.ordered) === Boolean(right.ordered)) || - // Indented code after list or another indented code. - (right.type === 'code' && - formatCodeAsIndented(right, context) && - (left.type === 'list' || - (left.type === right.type && formatCodeAsIndented(left, context)))) - ) { - return false - } + let token; + + while (++index < events.length) { + token = events[index][1]; - // Join children of a list or an item. - // In which case, `parent` has a `spread` field. - if (typeof parent.spread === 'boolean') { if ( - left.type === 'paragraph' && - // Two paragraphs. - (left.type === right.type || - right.type === 'definition' || - // Paragraph followed by a setext heading. - (right.type === 'heading' && formatHeadingAsSetext(right, context))) + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' ) { - return + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2); + token.type = 'data'; + index++; } - - return parent.spread ? 1 : 0 } + + return events } +/** @type {Resolver} */ -var unsafe = [ - { - character: '\t', - inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde'] - }, - { - character: '\r', - inConstruct: [ - 'codeFencedLangGraveAccent', - 'codeFencedLangTilde', - 'codeFencedMetaGraveAccent', - 'codeFencedMetaTilde', - 'destinationLiteral', - 'headingAtx' - ] - }, - { - character: '\n', - inConstruct: [ - 'codeFencedLangGraveAccent', - 'codeFencedLangTilde', - 'codeFencedMetaGraveAccent', - 'codeFencedMetaTilde', - 'destinationLiteral', - 'headingAtx' - ] - }, - { - character: ' ', - inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde'] - }, - // An exclamation mark can start an image, if it is followed by a link or - // a link reference. - {character: '!', after: '\\[', inConstruct: 'phrasing'}, - // A quote can break out of a title. - {character: '"', inConstruct: 'titleQuote'}, - // A number sign could start an ATX heading if it starts a line. - {atBreak: true, character: '#'}, - {character: '#', inConstruct: 'headingAtx', after: '(?:[\r\n]|$)'}, - // Dollar sign and percentage are not used in markdown. - // An ampersand could start a character reference. - {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'}, - // An apostrophe can break out of a title. - {character: "'", inConstruct: 'titleApostrophe'}, - // A left paren could break out of a destination raw. - {character: '(', inConstruct: 'destinationRaw'}, - {before: '\\]', character: '(', inConstruct: 'phrasing'}, - // A right paren could start a list item or break out of a destination - // raw. - {atBreak: true, before: '\\d+', character: ')'}, - {character: ')', inConstruct: 'destinationRaw'}, - // An asterisk can start thematic breaks, list items, emphasis, strong. - {atBreak: true, character: '*'}, - {character: '*', inConstruct: 'phrasing'}, - // A plus sign could start a list item. - {atBreak: true, character: '+'}, - // A dash can start thematic breaks, list items, and setext heading - // underlines. - {atBreak: true, character: '-'}, - // A dot could start a list item. - {atBreak: true, before: '\\d+', character: '.', after: '(?:[ \t\r\n]|$)'}, - // Slash, colon, and semicolon are not used in markdown for constructs. - // A less than can start html (flow or text) or an autolink. - // HTML could start with an exclamation mark (declaration, cdata, comment), - // slash (closing tag), question mark (instruction), or a letter (tag). - // An autolink also starts with a letter. - // Finally, it could break out of a destination literal. - {atBreak: true, character: '<', after: '[!/?A-Za-z]'}, - {character: '<', after: '[!/?A-Za-z]', inConstruct: 'phrasing'}, - {character: '<', inConstruct: 'destinationLiteral'}, - // An equals to can start setext heading underlines. - {atBreak: true, character: '='}, - // A greater than can start block quotes and it can break out of a - // destination literal. - {atBreak: true, character: '>'}, - {character: '>', inConstruct: 'destinationLiteral'}, - // Question mark and at sign are not used in markdown for constructs. - // A left bracket can start definitions, references, labels, - {atBreak: true, character: '['}, - {character: '[', inConstruct: ['phrasing', 'label', 'reference']}, - // A backslash can start an escape (when followed by punctuation) or a - // hard break (when followed by an eol). - // Note: typical escapes are handled in `safe`! - {character: '\\', after: '[\\r\\n]', inConstruct: 'phrasing'}, - // A right bracket can exit labels. - { - character: ']', - inConstruct: ['label', 'reference'] - }, - // Caret is not used in markdown for constructs. - // An underscore can start emphasis, strong, or a thematic break. - {atBreak: true, character: '_'}, - {before: '[^A-Za-z]', character: '_', inConstruct: 'phrasing'}, - {character: '_', after: '[^A-Za-z]', inConstruct: 'phrasing'}, - // A grave accent can start code (fenced or text), or it can break out of - // a grave accent code fence. - {atBreak: true, character: '`'}, - { - character: '`', - inConstruct: [ - 'codeFencedLangGraveAccent', - 'codeFencedMetaGraveAccent', - 'phrasing' - ] - }, - // Left brace, vertical bar, right brace are not used in markdown for - // constructs. - // A tilde can start code (fenced). - {atBreak: true, character: '~'} -]; +function resolveToLabelEnd(events, context) { + let index = events.length; + let offset = 0; + /** @type {Token} */ -var lib = toMarkdown$1; + let token; + /** @type {number|undefined} */ -var zwitch = zwitch$1; -var configure = configure_1; -var defaultHandlers = handle; -var defaultJoin = join; -var defaultUnsafe = unsafe; + let open; + /** @type {number|undefined} */ -function toMarkdown$1(tree, options) { - var settings = options || {}; - var context = { - enter: enter, - stack: [], - unsafe: [], - join: [], - handlers: {}, - options: {} - }; - var result; + let close; + /** @type {Event[]} */ - configure(context, { - unsafe: defaultUnsafe, - join: defaultJoin, - handlers: defaultHandlers - }); - configure(context, settings); + let media; // Find an opening. - if (context.options.tightDefinitions) { - context.join = [joinDefinition].concat(context.join); - } + while (index--) { + token = events[index][1]; - context.handle = zwitch('type', { - invalid: invalid, - unknown: unknown, - handlers: context.handlers - }); + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } // Mark other link openings as inactive, as we can’t have links in + // links. - result = context.handle(tree, null, context, {before: '\n', after: '\n'}); + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true; + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index; - if ( - result && - result.charCodeAt(result.length - 1) !== 10 && - result.charCodeAt(result.length - 1) !== 13 - ) { - result += '\n'; + if (token.type !== 'labelLink') { + offset = 2; + break + } + } + } else if (token.type === 'labelEnd') { + close = index; + } } - return result + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + }; + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + }; + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + }; + media = [ + ['enter', group, context], + ['enter', label, context] + ]; // Opening marker. - function enter(name) { - context.stack.push(name); - return exit + media = push(media, events.slice(open + 1, open + offset + 3)); // Text open. - function exit() { - context.stack.pop(); - } - } -} + media = push(media, [['enter', text, context]]); // Between. -function invalid(value) { - throw new Error('Cannot handle value `' + value + '`, expected node') -} + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ); // Text close, marker close, label close. -function unknown(node) { - throw new Error('Cannot handle unknown node `' + node.type + '`') -} + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]); // Reference, resource, or so. -function joinDefinition(left, right) { - // No blank line between adjacent definitions. - if (left.type === 'definition' && left.type === right.type) { - return 0 - } + media = push(media, events.slice(close + 1)); // Media close. + + media = push(media, [['exit', group, context]]); + splice(events, open, events.length, media); + return events } +/** @type {Tokenizer} */ -var mdastUtilToMarkdown = lib; +function tokenizeLabelEnd(effects, ok, nok) { + const self = this; + let index = self.events.length; + /** @type {Token} */ -var remarkStringify = stringify$1; + let labelStart; + /** @type {boolean} */ -var toMarkdown = mdastUtilToMarkdown; + let defined; // Find an opening. -function stringify$1(options) { - var self = this; + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1]; + break + } + } - this.Compiler = compile; + return start + /** @type {State} */ - function compile(tree) { - return toMarkdown( - tree, - Object.assign({}, self.data('settings'), options, { - // Note: this option is not in the readme. - // The goal is for it to be set by plugins on `data` instead of being - // passed by users. - extensions: self.data('toMarkdownExtensions') || [] - }) - ) + function start(code) { + if (!labelStart) { + return nok(code) + } // It’s a balanced bracket, but contains a link. + + if (labelStart._inactive) return balanced(code) + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ); + effects.enter('labelEnd'); + effects.enter('labelMarker'); + effects.consume(code); + effects.exit('labelMarker'); + effects.exit('labelEnd'); + return afterLabelEnd } -} + /** @type {State} */ -var unified = unified_1; -var parse$1 = remarkParse; -var stringify = remarkStringify; + function afterLabelEnd(code) { + // Resource: `[asd](fgh)`. + if (code === 40) { + return effects.attempt( + resourceConstruct, + ok, + defined ? ok : balanced + )(code) + } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference? -var remark = unified().use(parse$1).use(stringify).freeze(); + if (code === 91) { + return effects.attempt( + fullReferenceConstruct, + ok, + defined + ? effects.attempt(collapsedReferenceConstruct, ok, balanced) + : balanced + )(code) + } // Shortcut reference: `[asd]`? -const name$1 = "remark"; -const version$1 = "13.0.0"; -const description$1 = "Markdown processor powered by plugins part of the unified collective"; -const license = "MIT"; -const keywords = [ - "unified", - "remark", - "markdown", - "mdast", - "abstract", - "syntax", - "tree", - "ast", - "parse", - "stringify", - "serialize", - "compile", - "process" -]; -const homepage = "https://remark.js.org"; -const repository = "https://github.com/remarkjs/remark/tree/main/packages/remark"; -const bugs = "https://github.com/remarkjs/remark/issues"; -const funding = { - type: "opencollective", - url: "https://opencollective.com/unified" -}; -const author = "Titus Wormer (https://wooorm.com)"; -const contributors = [ - "Titus Wormer (https://wooorm.com)" -]; -const files = [ - "index.js", - "types/index.d.ts" -]; -const types$1 = "types/index.d.ts"; -const dependencies$1 = { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - unified: "^9.1.0" -}; -const scripts$1 = { - test: "tape test.js" -}; -const xo = false; -var require$$3 = { - name: name$1, - version: version$1, - description: description$1, - license: license, - keywords: keywords, - homepage: homepage, - repository: repository, - bugs: bugs, - funding: funding, - author: author, - contributors: contributors, - files: files, - types: types$1, - dependencies: dependencies$1, - scripts: scripts$1, - xo: xo -}; - -const name = "node-lint-md-cli-rollup"; -const description = "remark packaged for Node.js Markdown linting"; -const version = "2.0.2"; -const devDependencies = { - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.0.4", - rollup: "^2.52.7", - shx: "^0.3.3" -}; -const dependencies = { - "markdown-extensions": "^1.1.1", - remark: "^13.0.0", - "remark-gfm": "^2.0.0", - "remark-preset-lint-node": "^3.0.0", - "unified-args": "^8.1.0" -}; -const main = "dist/index.js"; -const scripts = { - build: "npx rollup -c", - "build-node": "npm run build && npx shx cp dist/index.js ../lint-md.js" -}; -var require$$4 = { - name: name, - description: description, - version: version, - devDependencies: devDependencies, - dependencies: dependencies, - main: main, - scripts: scripts -}; + return defined ? ok(code) : balanced(code) + } + /** @type {State} */ -/** - * @typedef {import('unist').Point} Point - * @typedef {import('vfile').VFile} VFile - * - * @typedef {Pick} PositionalPoint - * @typedef {Required} FullPoint - * @typedef {NonNullable} Offset - */ + function balanced(code) { + labelStart._balanced = true; + return nok(code) + } +} +/** @type {Tokenizer} */ -/** - * Get transform functions for the given `document`. - * - * @param {string|Uint8Array|VFile} file - */ -function location(file) { - var value = String(file); - /** @type {Array.} */ - var indices = []; - var search = /\r?\n|\r/g; +function tokenizeResource(effects, ok, nok) { + return start + /** @type {State} */ - while (search.test(value)) { - indices.push(search.lastIndex); + function start(code) { + effects.enter('resource'); + effects.enter('resourceMarker'); + effects.consume(code); + effects.exit('resourceMarker'); + return factoryWhitespace(effects, open) } + /** @type {State} */ - indices.push(value.length + 1); + function open(code) { + if (code === 41) { + return end(code) + } - return {toPoint, toOffset} + return factoryDestination( + effects, + destinationAfter, + nok, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 3 + )(code) + } + /** @type {State} */ - /** - * Get the line and column-based `point` for `offset` in the bound indices. - * Returns a point with `undefined` values when given invalid or out of bounds - * input. - * - * @param {Offset} offset - * @returns {FullPoint} - */ - function toPoint(offset) { - var index = -1; + function destinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, between)(code) + : end(code) + } + /** @type {State} */ - if (offset > -1 && offset < indices[indices.length - 1]) { - while (++index < indices.length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset - } - } - } + function between(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + factoryWhitespace(effects, end), + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) } - return {line: undefined, column: undefined, offset: undefined} + return end(code) } + /** @type {State} */ - /** - * Get the `offset` for a line and column-based `point` in the bound indices. - * Returns `-1` when given invalid or out of bounds input. - * - * @param {PositionalPoint} point - * @returns {Offset} - */ - function toOffset(point) { - var line = point && point.line; - var column = point && point.column; - /** @type {number} */ - var offset; - - if ( - typeof line === 'number' && - typeof column === 'number' && - !Number.isNaN(line) && - !Number.isNaN(column) && - line - 1 in indices - ) { - offset = (indices[line - 2] || 0) + column - 1 || 0; + function end(code) { + if (code === 41) { + effects.enter('resourceMarker'); + effects.consume(code); + effects.exit('resourceMarker'); + effects.exit('resource'); + return ok } - return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 + return nok(code) } } +/** @type {Tokenizer} */ -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * - * @typedef {string} Type - * @typedef {Object} Props - * - * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test - */ +function tokenizeFullReference(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ -const convert$2 = - /** - * @type {( - * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & - * ((test?: Test) => AssertAnything) - * )} - */ - ( - /** - * Generate an assertion from a check. - * @param {Test} [test] - * When nullish, checks if `node` is a `Node`. - * When `string`, works like passing `function (node) {return node.type === test}`. - * When `function` checks if function passed the node is true. - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. - * When `array`, checks any one of the subtests pass. - * @returns {AssertAnything} - */ - function (test) { - if (test === undefined || test === null) { - return ok$1 - } + function start(code) { + return factoryLabel.call( + self, + effects, + afterLabel, + nok, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + /** @type {State} */ - if (typeof test === 'string') { - return typeFactory$1(test) - } + function afterLabel(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } +} +/** @type {Tokenizer} */ - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$1(test) : propsFactory(test) - } +function tokenizeCollapsedReference(effects, ok, nok) { + return start + /** @type {State} */ - if (typeof test === 'function') { - return castFactory(test) - } + function start(code) { + effects.enter('reference'); + effects.enter('referenceMarker'); + effects.consume(code); + effects.exit('referenceMarker'); + return open + } + /** @type {State} */ - throw new Error('Expected function, string, or object as test') + function open(code) { + if (code === 93) { + effects.enter('referenceMarker'); + effects.consume(code); + effects.exit('referenceMarker'); + effects.exit('reference'); + return ok } - ); + + return nok(code) + } +} + /** - * @param {Array.} tests - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State */ -function anyFactory$1(tests) { - /** @type {Array.} */ - const checks = []; - let index = -1; +/** @type {Construct} */ - while (++index < tests.length) { - checks[index] = convert$2(tests[index]); - } +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +}; +/** @type {Tokenizer} */ - return castFactory(any) +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ - /** - * @this {unknown} - * @param {unknown[]} parameters - * @returns {boolean} - */ - function any(...parameters) { - let index = -1; + function start(code) { + effects.enter('labelImage'); + effects.enter('labelImageMarker'); + effects.consume(code); + effects.exit('labelImageMarker'); + return open + } + /** @type {State} */ - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + function open(code) { + if (code === 91) { + effects.enter('labelMarker'); + effects.consume(code); + effects.exit('labelMarker'); + effects.exit('labelImage'); + return after } - return false + return nok(code) + } + /** @type {State} */ + + function after(code) { + /* Hidden footnotes hook */ + + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) } } /** - * Utility to assert each property in `test` is represented in `node`, and each - * values are strictly equal. - * - * @param {Props} check - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State */ -function propsFactory(check) { - return castFactory(all) +/** @type {Construct} */ - /** - * @param {Node} node - * @returns {boolean} - */ - function all(node) { - /** @type {string} */ - let key; +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +}; +/** @type {Tokenizer} */ - for (key in check) { - // @ts-expect-error: hush, it sure works as an index. - if (node[key] !== check[key]) return false - } +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this; + return start + /** @type {State} */ - return true + function start(code) { + effects.enter('labelLink'); + effects.enter('labelMarker'); + effects.consume(code); + effects.exit('labelMarker'); + effects.exit('labelLink'); + return after + } + /** @type {State} */ + + function after(code) { + /* Hidden footnotes hook. */ + + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) } } /** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * - * @param {Type} check - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State */ -function typeFactory$1(check) { - return castFactory(type) - /** - * @param {Node} node - */ - function type(node) { - return node && node.type === check +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +}; +/** @type {Tokenizer} */ + +function tokenizeLineEnding(effects, ok) { + return start + /** @type {State} */ + + function start(code) { + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + return factorySpace(effects, ok, 'linePrefix') } } /** - * Utility to convert a string into a function which checks a given node’s type - * for said string. - * @param {TestFunctionAnything} check - * @returns {AssertAnything} + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code */ -function castFactory(check) { - return assertion - /** - * @this {unknown} - * @param {Array.} parameters - * @returns {boolean} - */ - function assertion(...parameters) { - // @ts-expect-error: spreading is fine. - return Boolean(check.call(this, ...parameters)) +/** @type {Construct} */ +const thematicBreak$1 = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +}; +/** @type {Tokenizer} */ + +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0; + /** @type {NonNullable} */ + + let marker; + return start + /** @type {State} */ + + function start(code) { + effects.enter('thematicBreak'); + marker = code; + return atBreak(code) } -} + /** @type {State} */ -// Utility to return true. -function ok$1() { - return true -} + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence'); + return sequence(code) + } -/** - * @param {string} d - * @returns {string} - */ -function color$3(d) { - return '\u001B[33m' + d + '\u001B[39m' + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + if (size < 3 || (code !== null && !markdownLineEnding(code))) { + return nok(code) + } + + effects.exit('thematicBreak'); + return ok(code) + } + /** @type {State} */ + + function sequence(code) { + if (code === marker) { + effects.consume(code); + size++; + return sequence + } + + effects.exit('thematicBreakSequence'); + return atBreak(code) + } } /** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code */ +/** @type {Construct} */ +const list$1 = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +}; +/** @type {Construct} */ + +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +}; +/** @type {Construct} */ + +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +}; /** - * Continue traversing as normal - */ -const CONTINUE$3 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$3 = 'skip'; -/** - * Stop traversing immediately + * @type {Tokenizer} + * @this {TokenizeContextWithState} */ -const EXIT$3 = false; -const visitParents$3 = - /** - * @type {( - * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) - * )} - */ - ( - /** - * Visit children of tree which pass a test - * - * @param {Node} tree Abstract syntax tree to walk - * @param {Test} test test Test node - * @param {Visitor} visitor Function to run for each node - * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-ignore no visitor given, so `visitor` is test. - visitor = test; - test = null; - } - - var is = convert$2(test); - var step = reverse ? -1 : 1; - - factory(tree, null, [])(); - - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - var value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string} */ - var name; +function tokenizeListStart(effects, ok, nok) { + const self = this; + const tail = self.events[self.events.length - 1]; + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0; + let size = 0; + return start + /** @type {State} */ - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered'); - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$3(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind; + effects.enter(kind, { + _container: true + }); + } - return visit + if (kind === 'listUnordered') { + effects.enter('listItemPrefix'); + return code === 42 || code === 45 + ? effects.check(thematicBreak$1, nok, atMarker)(code) + : atMarker(code) + } - function visit() { - /** @type {ActionTuple} */ - var result = []; - /** @type {ActionTuple} */ - var subresult; - /** @type {number} */ - var offset; - /** @type {Array.} */ - var grandparents; + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix'); + effects.enter('listItemValue'); + return inside(code) + } + } - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$2(visitor(node, parents)); + return nok(code) + } + /** @type {State} */ - if (result[0] === EXIT$3) { - return result - } - } + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code); + return inside + } - if (node.children && result[0] !== SKIP$3) { - // @ts-ignore looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-ignore looks like a parent. - grandparents = parents.concat(node); + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue'); + return atMarker(code) + } - // @ts-ignore looks like a parent. - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); + return nok(code) + } + /** + * @type {State} + **/ - if (subresult[0] === EXIT$3) { - return subresult - } + function atMarker(code) { + effects.enter('listItemMarker'); + effects.consume(code); + effects.exit('listItemMarker'); + self.containerState.marker = self.containerState.marker || code; + return effects.check( + blankLine, // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + /** @type {State} */ - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + function onBlank(code) { + self.containerState.initialBlankLine = true; + initialSize++; + return endOfPrefix(code) + } + /** @type {State} */ - return result - } - } + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace'); + effects.consume(code); + effects.exit('listItemPrefixWhitespace'); + return endOfPrefix } - ); -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$2(value) { - if (Array.isArray(value)) { - return value + return nok(code) } + /** @type {State} */ - if (typeof value === 'number') { - return [CONTINUE$3, value] + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length; + return ok(code) } - - return [value] } - /** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + * @type {Tokenizer} + * @this {TokenizeContextWithState} */ -const visit$3 = - /** - * @type {( - * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & - * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) - * )} - */ - ( - /** - * Visit children of tree which pass a test - * - * @param {Node} tree Abstract syntax tree to walk - * @param {Test} test test Test node - * @param {Visitor} visitor Function to run for each node - * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +function tokenizeListContinuation(effects, ok, nok) { + const self = this; + self.containerState._closeFlow = undefined; + return effects.check(blankLine, onBlank, notBlank) + /** @type {State} */ - visitParents$3(tree, test, overload, reverse); + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine; // We have a blank line. + // Still, try to consume at most the items size. - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - var parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + /** @type {State} */ + + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined; + self.containerState.initialBlankLine = undefined; + return notInCurrentItem(code) } - ); -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist').Point} Point - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('vfile').VFile} VFile - * @typedef {import('vfile-message').VFileMessage} VFileMessage - * - * @typedef {OptionsWithoutReset|OptionsWithReset} Options - * @typedef {OptionsBaseFields & OptionsWithoutResetFields} OptionsWithoutReset - * @typedef {OptionsBaseFields & OptionsWithResetFields} OptionsWithReset - * - * @typedef OptionsWithoutResetFields - * @property {false} [reset] - * Whether to treat all messages as turned off initially. - * @property {string[]} [disable] - * List of `ruleId`s to turn off. - * - * @typedef OptionsWithResetFields - * @property {true} reset - * Whether to treat all messages as turned off initially. - * @property {string[]} [enable] - * List of `ruleId`s to initially turn on. - * - * @typedef OptionsBaseFields - * @property {string} name - * Name of markers that can control the message sources. - * - * For example, `{name: 'alpha'}` controls `alpha` markers: - * - * ```html - * - * ``` - * @property {MarkerParser} marker - * Parse a possible marker to a comment marker object (Marker). - * If the marker isn't a marker, should return `null`. - * @property {Test} [test] - * Test for possible markers - * @property {string[]} [known] - * List of allowed `ruleId`s. When given a warning is shown - * when someone tries to control an unknown rule. - * - * For example, `{name: 'alpha', known: ['bravo']}` results in a warning if - * `charlie` is configured: - * - * ```html - * - * ``` - * @property {string|string[]} [source] - * Sources that can be controlled with `name` markers. - * Defaults to `name`. - * - * @callback MarkerParser - * Parse a possible comment marker node to a Marker. - * @param {Node} node - * Node to parse - * - * @typedef Marker - * A comment marker. - * @property {string} name - * Name of marker. - * @property {string} attributes - * Value after name. - * @property {Record} parameters - * Parsed attributes. - * @property {Node} node - * Reference to given node. - * - * @typedef Mark - * @property {Point|undefined} point - * @property {boolean} state - */ + self.containerState.furtherBlankLines = undefined; + self.containerState.initialBlankLine = undefined; + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + /** @type {State} */ -const own$4 = {}.hasOwnProperty; + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true; // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined; + return factorySpace( + effects, + effects.attempt(list$1, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} /** - * @type {import('unified').Plugin<[Options]>} - * @returns {(tree: Node, file: VFile) => void} + * @type {Tokenizer} + * @this {TokenizeContextWithState} */ -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 + '`' - ) +function tokenizeIndent(effects, ok, nok) { + const self = this; + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + /** @type {State} */ + + function afterPrefix(code) { + const tail = self.events[self.events.length - 1]; + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) } +} +/** + * @type {Exiter} + * @this {TokenizeContextWithState} + */ - 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]; +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type); +} +/** + * @type {Tokenizer} + * @this {TokenizeContextWithState} + */ - return transformer +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this; + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + /** @type {State} */ - /** - * @param {Node} tree - * @param {VFile} file - */ - function transformer(tree, file) { - const toOffset = location(file).toOffset; - const initial = !reset; - const gaps = detectGaps(tree, file); - /** @type {Record} */ - const scope = {}; - /** @type {Mark[]} */ - const globals = []; + function afterPrefix(code) { + const tail = self.events[self.events.length - 1]; + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} - visit$3(tree, options.test, visitor); +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ - file.messages = file.messages.filter((m) => filter(m)); +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +}; +/** @type {Resolver} */ - /** - * @param {Node} node - * @param {number|null} position - * @param {Parent|null} parent - */ - function visitor(node, position, parent) { - /** @type {Marker|null} */ - const mark = options.marker(node); +function resolveToSetextUnderline(events, context) { + let index = events.length; + /** @type {number|undefined} */ - if (!mark || mark.name !== options.name) { - return - } + let content; + /** @type {number|undefined} */ - 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; + let text; + /** @type {number|undefined} */ - /** @type {string} */ - // @ts-expect-error: we’ll check for unknown values next. - const verb = ruleIds.shift(); + let definition; // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. - if (verb !== 'enable' && verb !== 'disable' && verb !== 'ignore') { - file.fail( - 'Unknown keyword `' + - verb + - '`: expected ' + - "`'enable'`, `'disable'`, or `'ignore'`", - mark.node - ); + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index; + break } - // Apply to all rules. - if (ruleIds.length > 0) { - while (++index < ruleIds.length) { - const ruleId = ruleIds[index]; - - if (isKnown(ruleId, verb, mark.node)) { - toggle(point, verb === 'enable', ruleId); + if (events[index][1].type === 'paragraph') { + text = index; + } + } // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1); + } - 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'; + if (!definition && events[index][1].type === 'definition') { + definition = index; } } + } - /** - * @param {VFileMessage} message - * @returns {boolean} - */ - function filter(message) { - let gapIndex = gaps.length; + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + }; // Change the paragraph to setext heading text. - // Keep messages from a different source. - if (!message.source || !sources.includes(message.source)) { - return true - } + events[text][1].type = 'setextHeadingText'; // If we have definitions in the content, we’ll keep on having content, + // but we need move it. - // We only ignore messages if they‘re disabled, *not* when they’re not in - // the document. - if (!message.line) { - message.line = 1; - } + if (definition) { + events.splice(text, 0, ['enter', heading, context]); + events.splice(definition + 1, 0, ['exit', events[content][1], context]); + events[content][1].end = Object.assign({}, events[definition][1].end); + } else { + events[content][1] = heading; + } // Add the heading exit at the end. - if (!message.column) { - message.column = 1; - } + events.push(['exit', heading, context]); + return events +} +/** @type {Tokenizer} */ - // Check whether the warning is inside a gap. - // @ts-expect-error: we just normalized `null` to `number`s. - const offset = toOffset(message); +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this; + let index = self.events.length; + /** @type {NonNullable} */ - while (gapIndex--) { - if (gaps[gapIndex][0] <= offset && gaps[gapIndex][1] > offset) { - return false - } - } + let marker; + /** @type {boolean} */ - // Check whether allowed by specific and global states. - return ( - (!message.ruleId || - check(message, scope[message.ruleId], message.ruleId)) && - check(message, globals) - ) + let paragraph; // Find an opening. + + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph'; + break } + } - /** - * Helper to check (and possibly warn) if a `ruleId` is unknown. - * - * @param {string} ruleId - * @param {string} verb - * @param {Node} node - * @returns {boolean} - */ - function isKnown(ruleId, verb, node) { - const result = options.known ? options.known.includes(ruleId) : true; + return start + /** @type {State} */ - if (!result) { - file.message( - 'Unknown rule: cannot ' + verb + " `'" + ruleId + "'`", - node - ); - } + function start(code) { + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine'); + effects.enter('setextHeadingLineSequence'); + marker = code; + return closingSequence(code) + } - return result + return nok(code) + } + /** @type {State} */ + + function closingSequence(code) { + if (code === marker) { + effects.consume(code); + return closingSequence } - /** - * Get the latest state of a rule. - * When without `ruleId`, gets global state. - * - * @param {string|undefined} ruleId - * @returns {boolean} - */ - function getState(ruleId) { - const ranges = ruleId ? scope[ruleId] : globals; + effects.exit('setextHeadingLineSequence'); + return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code) + } + /** @type {State} */ - if (ranges && ranges.length > 0) { - return ranges[ranges.length - 1].state - } + function closingSequenceEnd(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine'); + return ok(code) + } - if (!ruleId) { - return !reset - } + return nok(code) + } +} - return reset ? enable.includes(ruleId) : !disable.includes(ruleId) +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + */ + +/** @type {InitialConstruct} */ +const flow$1 = { + tokenize: initializeFlow +}; +/** @type {Initializer} */ + +function initializeFlow(effects) { + const self = this; + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content, afterConstruct) + ), + 'linePrefix' + ) + ) + ); + return initial + /** @type {State} */ + + function atBlankEnding(code) { + if (code === null) { + effects.consume(code); + return } - /** - * Handle a rule. - * - * @param {Point|undefined} point - * @param {boolean} state - * @param {string|undefined} [ruleId] - * @returns {void} - */ - function toggle(point, state, ruleId) { - let markers = ruleId ? scope[ruleId] : globals; + effects.enter('lineEndingBlank'); + effects.consume(code); + effects.exit('lineEndingBlank'); + self.currentConstruct = undefined; + return initial + } + /** @type {State} */ - if (!markers) { - markers = []; - scope[String(ruleId)] = markers; - } + function afterConstruct(code) { + if (code === null) { + effects.consume(code); + return + } - const previousState = getState(ruleId); + effects.enter('lineEnding'); + effects.consume(code); + effects.exit('lineEnding'); + self.currentConstruct = undefined; + return initial + } +} - if (state !== previousState) { - markers.push({state, point}); - } +/** + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Code} Code + */ +const resolver = { + resolveAll: createResolver() +}; +const string$1 = initializeFactory('string'); +const text$3 = initializeFactory('text'); +/** + * @param {'string'|'text'} field + * @returns {InitialConstruct} + */ - // Toggle all known rules. - if (!ruleId) { - for (ruleId in scope) { - if (own$4.call(scope, ruleId)) { - toggle(point, state, ruleId); - } - } +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + /** @type {Initializer} */ + + function initializeText(effects) { + const self = this; + const constructs = this.parser.constructs[field]; + const text = effects.attempt(constructs, start, notText); + return start + /** @type {State} */ + + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + /** @type {State} */ + + function notText(code) { + if (code === null) { + effects.consume(code); + return } + + effects.enter('data'); + effects.consume(code); + return data } + /** @type {State} */ + + function data(code) { + if (atBreak(code)) { + effects.exit('data'); + return text(code) + } // Data. + effects.consume(code); + return data + } /** - * Check all `ranges` for `message`. - * - * @param {VFileMessage} message - * @param {Mark[]|undefined} ranges - * @param {string|undefined} [ruleId] + * @param {Code} code * @returns {boolean} */ - function check(message, ranges, ruleId) { - if (ranges && ranges.length > 0) { - // Check the state at the message’s position. - let index = ranges.length; - while (index--) { - const range = ranges[index]; + function atBreak(code) { + if (code === null) { + return true + } - 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 + const list = constructs[code]; + let index = -1; + + if (list) { + while (++index < list.length) { + const item = list[index]; + + if (!item.previous || item.previous.call(self, self.previous)) { + return true } } } - // The first marker ocurred after the first message, so we check the - // initial state. - if (!ruleId) { - return Boolean(initial || reset) - } - - return reset ? enable.includes(ruleId) : !disable.includes(ruleId) + return false } } } - /** - * Detect gaps in `tree`. - * - * @param {Node} tree - * @param {VFile} file + * @param {Resolver} [extraResolver] + * @returns {Resolver} */ -function detectGaps(tree, file) { - /** @type {Node[]} */ - // @ts-expect-error: fine. - const children = tree.children || []; - const lastNode = children[children.length - 1]; - /** @type {[number, number][]} */ - const gaps = []; - let offset = 0; - /** @type {boolean|undefined} */ - let gap; - - // Find all gaps. - visit$3(tree, one); - - // Get the end of the document. - // This detects if the last node was the last node. - // If not, there’s an extra gap between the last node and the end of the - // document. - if ( - lastNode && - lastNode.position && - lastNode.position.end && - offset === lastNode.position.end.offset && - file.toString().slice(offset).trim() !== '' - ) { - update(); - update( - tree && - tree.position && - tree.position.end && - tree.position.end.offset && - tree.position.end.offset - 1 - ); - } +function createResolver(extraResolver) { + return resolveAllText + /** @type {Resolver} */ - return gaps + function resolveAllText(events, context) { + let index = -1; + /** @type {number|undefined} */ - /** - * @param {Node} node - */ - function one(node) { - update(node.position && node.position.start && node.position.start.offset); + let enter; // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. - if (!('children' in node)) { - update(node.position && node.position.end && node.position.end.offset); - } - } + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index; + index++; + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end; + events.splice(enter + 2, index - enter - 2); + index = enter + 2; + } - /** - * Detect a new position. - * - * @param {number|undefined} [latest] - * @returns {void} - */ - function update(latest) { - if (latest === null || latest === undefined) { - gap = true; - } else if (offset < latest) { - if (gap) { - gaps.push([offset, latest]); - gap = undefined; + enter = undefined; } - - offset = latest; } + + return extraResolver ? extraResolver(events, context) : events } } - /** - * @typedef {string|number|boolean} MarkerParameterValue - * @typedef {Object.} MarkerParameters - * - * @typedef HtmlNode - * @property {'html'} type - * @property {string} value - * - * @typedef CommentNode - * @property {'comment'} type - * @property {string} value + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) * - * @typedef Marker - * @property {string} name - * @property {string} attributes - * @property {MarkerParameters|null} parameters - * @property {HtmlNode|CommentNode} node + * @type {Resolver} */ -var commentExpression = /\s*([a-zA-Z\d-]+)(\s+([\s\S]*))?\s*/; +function resolveAllLineSuffixes(events, context) { + let eventIndex = -1; -var markerExpression = new RegExp( - '(\\s*\\s*)' -); + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1]; + const chunks = context.sliceStream(data); + let index = chunks.length; + let bufferIndex = -1; + let size = 0; + /** @type {boolean|undefined} */ -/** - * Parse a comment marker. - * @param {unknown} node - * @returns {Marker|null} - */ -function commentMarker(node) { - /** @type {RegExpMatchArray} */ - var match; - /** @type {number} */ - var offset; - /** @type {MarkerParameters} */ - var parameters; + let tabs; - if ( - node && - typeof node === 'object' && - // @ts-ignore hush - (node.type === 'html' || node.type === 'comment') - ) { - // @ts-ignore hush - match = node.value.match( - // @ts-ignore hush - node.type === 'comment' ? commentExpression : markerExpression - ); + while (index--) { + const chunk = chunks[index]; - // @ts-ignore hush - if (match && match[0].length === node.value.length) { - // @ts-ignore hush - offset = node.type === 'comment' ? 1 : 2; - parameters = parseParameters(match[offset + 1] || ''); + if (typeof chunk === 'string') { + bufferIndex = chunk.length; - if (parameters) { - return { - name: match[offset], - attributes: match[offset + 2] || '', - parameters, - // @ts-ignore hush - node + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++; + bufferIndex--; + } + + if (bufferIndex) break + bufferIndex = -1; + } // Number + else if (chunk === -2) { + tabs = true; + size++; + } else if (chunk === -1) ; else { + // Replacement character, exit. + index++; + break + } + } + + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + }; + data.end = Object.assign({}, token.start); + + if (data.start.offset === data.end.offset) { + Object.assign(data, token); + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ); + eventIndex += 2; } } + + eventIndex++; } } - return null + return events } /** - * Parse `value` into an object. - * - * @param {string} value - * @returns {MarkerParameters|null} - */ -function parseParameters(value) { - /** @type {MarkerParameters} */ - var parameters = {}; + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').ParseContext} ParseContext + */ + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ); + /** @type {Record} */ - return value - .replace( - /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])+)"|'((?:\\[\s\S]|[^'])+)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, - replacer - ) - .replace(/\s+/g, '') - ? null - : parameters + const columnStart = {}; + /** @type {Construct[]} */ + + const resolveAllConstructs = []; + /** @type {Chunk[]} */ + let chunks = []; + /** @type {Token[]} */ + + let stack = []; /** - * @param {string} _ - * @param {string} $1 - * @param {string} $2 - * @param {string} $3 - * @param {string} $4 + * Tools used for tokenizing. + * + * @type {Effects} */ - // eslint-disable-next-line max-params - function replacer(_, $1, $2, $3, $4) { - /** @type {MarkerParameterValue} */ - var value = $2 || $3 || $4 || ''; - if (value === 'true' || value === '') { - value = true; - } else if (value === 'false') { - value = false; - } else if (!Number.isNaN(Number(value))) { - value = Number(value); - } + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + }; + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ - parameters[$1] = value; + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + }; + /** + * The state function. + * + * @type {State|void} + */ - return '' + let state = initialize.tokenize.call(context, effects); + + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize); } -} -/** - * @typedef {import('mdast').Root} Root - * @typedef {import('vfile').VFile} VFile - * @typedef {import('unified-message-control')} MessageControl - * @typedef {Omit|Omit} Options - */ + return context + /** @type {TokenizeContext['write']} */ -const test = [ - 'html', // Comments are `html` nodes in mdast. - 'comment' // In MDX, comments have their own node. -]; + function write(slice) { + chunks = push(chunks, slice); + main(); // Exit if we’re not done, resolve might change stuff. -/** - * Plugin to enable, disable, and ignore messages. - * - * @type {import('unified').Plugin<[Options], Root>} - * @returns {(node: Root, file: VFile) => void} - */ -function remarkMessageControl(options) { - return messageControl( - Object.assign({marker: commentMarker, test}, options) - ) -} + if (chunks[chunks.length - 1] !== null) { + return [] + } -/** - * @typedef {import('mdast').Root} Root - */ + addResult(initialize, 0); // Otherwise, resolve, and exit. -/** - * The core plugin for `remark-lint`. - * This adds support for ignoring stuff from messages (``). - * All rules are in their own packages and presets. - * - * @type {import('unified').Plugin} - */ -function remarkLint() { - this.use(lintMessageControl); -} + context.events = resolveAll(resolveAllConstructs, context.events, context); + return context.events + } // + // Tools. + // -/** @type {import('unified').Plugin} */ -function lintMessageControl() { - return remarkMessageControl({name: 'lint', source: 'remark-lint'}) -} + /** @type {TokenizeContext['sliceSerialize']} */ -/** - * @typedef {(error?: Error|null|undefined, ...output: any[]) => void} Callback - * @typedef {(...input: any[]) => any} Middleware - * - * @typedef {(...input: any[]) => void} Run Call all middleware. - * @typedef {(fn: Middleware) => Pipeline} Use Add `fn` (middleware) to the list. - * @typedef {{run: Run, use: Use}} Pipeline - */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + /** @type {TokenizeContext['sliceStream']} */ -/** - * Wrap `middleware`. - * Can be sync or async; return a promise, receive a callback, or return new - * values and errors. - * - * @param {Middleware} middleware - * @param {Callback} callback - */ -function wrap(middleware, callback) { - /** @type {boolean} */ - let called; + function sliceStream(token) { + return sliceChunks(chunks, token) + } + /** @type {TokenizeContext['now']} */ - return wrapped + function now() { + return Object.assign({}, point) + } + /** @type {TokenizeContext['defineSkip']} */ + + function defineSkip(value) { + columnStart[value.line] = value.column; + accountForPotentialSkip(); + } // + // State management. + // /** - * Call `middleware`. - * @param {any[]} parameters + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * * @returns {void} */ - function wrapped(...parameters) { - const fnExpectsCallback = middleware.length > parameters.length; - /** @type {any} */ - let result; - if (fnExpectsCallback) { - parameters.push(done); - } + function main() { + /** @type {number} */ + let chunkIndex; - try { - result = middleware(...parameters); - } catch (error) { - /** @type {Error} */ - const exception = error; + while (point._index < chunks.length) { + const chunk = chunks[point._index]; // If we’re in a buffer chunk, loop through it. - // Well, this is quite the pickle. - // `middleware` received a callback and called it synchronously, but that - // threw an error. - // The only thing left to do is to throw the thing instead. - if (fnExpectsCallback && called) { - throw exception - } + if (typeof chunk === 'string') { + chunkIndex = point._index; - return done(exception) - } + if (point._bufferIndex < 0) { + point._bufferIndex = 0; + } - if (!fnExpectsCallback) { - if (result instanceof Promise) { - result.then(then, done); - } else if (result instanceof Error) { - done(result); + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)); + } } else { - then(result); + go(chunk); } } } - /** - * Call `callback`, only once. - * @type {Callback} + * Deal with one code. + * + * @param {Code} code + * @returns {void} */ - function done(error, ...output) { - if (!called) { - called = true; - callback(error, ...output); - } + + function go(code) { + state = state(code); + } + /** @type {Effects['consume']} */ + + function consume(code) { + if (markdownLineEnding(code)) { + point.line++; + point.column = 1; + point.offset += code === -3 ? 2 : 1; + accountForPotentialSkip(); + } else if (code !== -1) { + point.column++; + point.offset++; + } // Not in a string chunk. + + if (point._bufferIndex < 0) { + point._index++; + } else { + point._bufferIndex++; // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1; + point._index++; + } + } // Expose the previous character. + + context.previous = code; // Mark as consumed. + } + /** @type {Effects['enter']} */ + + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {}; + token.type = type; + token.start = now(); + context.events.push(['enter', token, context]); + stack.push(token); + return token } + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop(); + token.end = now(); + context.events.push(['exit', token, context]); + return token + } /** - * Call `done` with one value. + * Use results. * - * @param {any} [value] + * @type {ReturnHandle} */ - function then(value) { - done(null, value); - } -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('vfile').VFile} VFile - * - * @typedef {0|1|2} Severity - * @typedef {'warn'|'on'|'off'|'error'} Label - * @typedef {[Severity, ...unknown[]]} SeverityTuple - * - * @callback Rule - * @param {Node} tree - * @param {VFile} file - * @param {unknown} options - * @returns {void} - */ -const primitives = new Set(['string', 'number', 'boolean']); + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from); + } + /** + * Discard results. + * + * @type {ReturnHandle} + */ -/** - * @param {string} id - * @param {Rule} rule - */ -function lintRule(id, rule) { - const parts = id.split(':'); - // Possibly useful if externalised later. - /* c8 ignore next */ - const source = parts[1] ? parts[0] : undefined; - const ruleId = parts[1]; + function onsuccessfulcheck(_, info) { + info.restore(); + } + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {Record} [fields] + */ - Object.defineProperty(plugin, 'name', {value: id}); + function constructFactory(onreturn, fields) { + return hook + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Construct|Construct[]|ConstructRecord} constructs + * @param {State} returnState + * @param {State} [bogusState] + * @returns {State} + */ - return plugin + function hook(constructs, returnState, bogusState) { + /** @type {Construct[]} */ + let listOfConstructs; + /** @type {number} */ - /** @type {import('unified').Plugin<[unknown]|void[]>} */ - function plugin(raw) { - const [severity, options] = coerce$2(ruleId, raw); + let constructIndex; + /** @type {Construct} */ - if (!severity) return + let currentConstruct; + /** @type {Info} */ - const fatal = severity === 2; + let info; + return Array.isArray(constructs) + ? /* c8 ignore next 1 */ + handleListOfConstructs(constructs) + : 'tokenize' in constructs // @ts-expect-error Looks like a construct. + ? handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ - return (tree, file, next) => { - let index = file.messages.length - 1; + function handleMapOfConstructs(map) { + return start + /** @type {State} */ - wrap(rule, (error) => { - const messages = file.messages; + function start(code) { + const def = code !== null && map[code]; + const all = code !== null && map.null; + const list = [ + // To do: add more extension tests. - // Add the error, if not already properly added. - // Only happens for incorrect plugins. - /* c8 ignore next 6 */ - // @ts-expect-error: errors could be `messages`. - if (error && !messages.includes(error)) { - try { - file.fail(error); - } catch {} + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ]; + return handleListOfConstructs(list)(code) } + } + /** + * Handle a list of construct. + * + * @param {Construct[]} list + * @returns {State} + */ - while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal}); - } + function handleListOfConstructs(list) { + listOfConstructs = list; + constructIndex = 0; - next(); - })(tree, file, options); - } - } -} + if (list.length === 0) { + return bogusState + } -/** - * Coerce a value to a severity--options tuple. - * - * @param {string} name - * @param {unknown} value - * @returns {SeverityTuple} - */ -function coerce$2(name, value) { - /** @type {unknown[]} */ - let result; + return handleConstruct(list[constructIndex]) + } + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ - if (typeof value === 'boolean') { - result = [value]; - } else if (value === null || value === undefined) { - result = [1]; - } else if ( - Array.isArray(value) && - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - primitives.has(typeof value[0]) - ) { - // `isArray(unknown)` is turned into `any[]`: - // type-coverage:ignore-next-line - result = [...value]; - } else { - result = [1, value]; - } + function handleConstruct(construct) { + return start + /** @type {State} */ - let level = result[0]; + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store(); + currentConstruct = construct; - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } + if (!construct.partial) { + context.currentConstruct = construct; + } - if (typeof level !== 'number' || level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok() + } - result[0] = level; + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + /** @type {State} */ - // @ts-expect-error: it’s now a valid tuple. - return result -} + function ok(code) { + onreturn(currentConstruct, info); + return returnState + } + /** @type {State} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module final-newline - * @fileoverview - * Warn when a line feed at the end of a file is missing. - * Empty files are allowed. - * - * See [StackExchange](https://unix.stackexchange.com/questions/18743) for why. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * always adds a final line feed to files. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * ## Example - * - * ##### `ok.md` - * - * ###### In - * - * Note: `␊` represents LF. - * - * ```markdown - * Alpha␊ - * ``` - * - * ###### Out - * - * No messages. - * - * ##### `not-ok.md` - * - * ###### In - * - * Note: The below file does not have a final newline. - * - * ```markdown - * Bravo - * ``` - * - * ###### Out - * - * ```text - * 1:1: Missing newline character at end of file - * ``` - */ + function nok(code) { + info.restore(); -const remarkLintFinalNewline = lintRule( - 'remark-lint:final-newline', - /** @type {import('unified-lint-rule').Rule} */ - (_, file) => { - const value = String(file); - const last = value.length - 1; + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } - if (last > -1 && value.charAt(last) !== '\n') { - file.message('Missing newline character at end of file'); + return bogusState + } } } -); - -var remarkLintFinalNewline$1 = remarkLintFinalNewline; + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ -var pluralize = {exports: {}}; + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct); + } -/* global define */ + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ); + } -(function (module, exports) { -(function (root, pluralize) { - /* istanbul ignore else */ - if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { - // Node. - module.exports = pluralize(); - } else { - // Browser global. - root.pluralize = pluralize(); + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context); + } } -})(commonjsGlobal, function () { - // Rule storage - pluralize and singularize need to be run sequentially, - // while other rules can be optimized using an object for instant lookups. - var pluralRules = []; - var singularRules = []; - var uncountables = {}; - var irregularPlurals = {}; - var irregularSingles = {}; - /** - * Sanitize a pluralization rule to a usable regular expression. + * Store state. * - * @param {(RegExp|string)} rule - * @return {RegExp} + * @returns {Info} */ - function sanitizeRule (rule) { - if (typeof rule === 'string') { - return new RegExp('^' + rule + '$', 'i'); + + function store() { + const startPoint = now(); + const startPrevious = context.previous; + const startCurrentConstruct = context.currentConstruct; + const startEventsIndex = context.events.length; + const startStack = Array.from(stack); + return { + restore, + from: startEventsIndex } + /** + * Restore state. + * + * @returns {void} + */ - return rule; + function restore() { + point = startPoint; + context.previous = startPrevious; + context.currentConstruct = startCurrentConstruct; + context.events.length = startEventsIndex; + stack = startStack; + accountForPotentialSkip(); + } } - /** - * Pass in a word token to produce a function that can replicate the case on - * another word. + * Move the current point a bit forward in the line when it’s on a column + * skip. * - * @param {string} word - * @param {string} token - * @return {Function} + * @returns {void} */ - function restoreCase (word, token) { - // Tokens are an exact match. - if (word === token) return token; - // Lower cased words. E.g. "hello". - if (word === word.toLowerCase()) return token.toLowerCase(); + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line]; + point.offset += columnStart[point.line] - 1; + } + } +} +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Chunk[]} chunks + * @param {Pick} token + * @returns {Chunk[]} + */ - // Upper cased words. E.g. "WHISKY". - if (word === word.toUpperCase()) return token.toUpperCase(); +function sliceChunks(chunks, token) { + const startIndex = token.start._index; + const startBufferIndex = token.start._bufferIndex; + const endIndex = token.end._index; + const endBufferIndex = token.end._bufferIndex; + /** @type {Chunk[]} */ - // Title cased words. E.g. "Title". - if (word[0] === word[0].toUpperCase()) { - return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); + let view; + + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]; + } else { + view = chunks.slice(startIndex, endIndex); + + if (startBufferIndex > -1) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view[0] = view[0].slice(startBufferIndex); } - // Lower cased words. E.g. "test". - return token.toLowerCase(); + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)); + } } - /** - * Interpolate a regexp string. - * - * @param {string} str - * @param {Array} args - * @return {string} - */ - function interpolate (str, args) { - return str.replace(/\$(\d{1,2})/g, function (match, index) { - return args[index] || ''; - }); - } + return view +} +/** + * Get the string value of a slice of chunks. + * + * @param {Chunk[]} chunks + * @param {boolean} [expandTabs=false] + * @returns {string} + */ - /** - * Replace a word using a rule. - * - * @param {string} word - * @param {Array} rule - * @return {string} - */ - function replace (word, rule) { - return word.replace(rule[0], function (match, index) { - var result = interpolate(rule[1], arguments); +function serializeChunks(chunks, expandTabs) { + let index = -1; + /** @type {string[]} */ - if (match === '') { - return restoreCase(word[index - 1], result); + const result = []; + /** @type {boolean|undefined} */ + + let atTab; + + while (++index < chunks.length) { + const chunk = chunks[index]; + /** @type {string} */ + + let value; + + if (typeof chunk === 'string') { + value = chunk; + } else + switch (chunk) { + case -5: { + value = '\r'; + break + } + + case -4: { + value = '\n'; + break + } + + case -3: { + value = '\r' + '\n'; + break + } + + case -2: { + value = expandTabs ? ' ' : '\t'; + break + } + + case -1: { + if (!expandTabs && atTab) continue + value = ' '; + break + } + + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk); + } } - return restoreCase(match, result); - }); + atTab = chunk === -2; + result.push(value); } + return result.join('') +} + +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ +/** @type {Extension['document']} */ + +const document$1 = { + [42]: list$1, + [43]: list$1, + [45]: list$1, + [48]: list$1, + [49]: list$1, + [50]: list$1, + [51]: list$1, + [52]: list$1, + [53]: list$1, + [54]: list$1, + [55]: list$1, + [56]: list$1, + [57]: list$1, + [62]: blockQuote +}; +/** @type {Extension['contentInitial']} */ + +const contentInitial = { + [91]: definition$1 +}; +/** @type {Extension['flowInitial']} */ + +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +}; +/** @type {Extension['flow']} */ + +const flow = { + [35]: headingAtx, + [42]: thematicBreak$1, + [45]: [setextUnderline, thematicBreak$1], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak$1, + [96]: codeFenced, + [126]: codeFenced +}; +/** @type {Extension['string']} */ + +const string = { + [38]: characterReference$1, + [92]: characterEscape$1 +}; +/** @type {Extension['text']} */ + +const text$2 = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference$1, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape$1], + [93]: labelEnd, + [95]: attention, + [96]: codeText +}; +/** @type {Extension['insideSpan']} */ + +const insideSpan = { + null: [attention, resolver] +}; +/** @type {Extension['disable']} */ + +const disable = { + null: [] +}; + +var defaultConstructs = /*#__PURE__*/Object.freeze({ + __proto__: null, + document: document$1, + contentInitial: contentInitial, + flowInitial: flowInitial, + flow: flow, + string: string, + text: text$2, + insideSpan: insideSpan, + disable: disable +}); + +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Create} Create + */ +/** + * @param {ParseOptions} [options] + * @returns {ParseContext} + */ + +function parse(options = {}) { + /** @type {FullNormalizedExtension} */ + // @ts-expect-error `defaultConstructs` is full, so the result will be too. + const constructs = combineExtensions( + // @ts-expect-error Same as above. + [defaultConstructs].concat(options.extensions || []) + ); + /** @type {ParseContext} */ + + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content$1), + document: create(document$2), + flow: create(flow$1), + string: create(string$1), + text: create(text$3) + }; + return parser /** - * Sanitize a word by passing in the word and sanitization rules. - * - * @param {string} token - * @param {string} word - * @param {Array} rules - * @return {string} + * @param {InitialConstruct} initial */ - function sanitizeWord (token, word, rules) { - // Empty string or doesn't need fixing. - if (!token.length || uncountables.hasOwnProperty(token)) { - return word; + + function create(initial) { + return creator + /** @type {Create} */ + + function creator(from) { + return createTokenizer(parser, initial, from) } + } +} - var len = rules.length; +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + */ - // Iterate over the sanitization rules and use the first one to match. - while (len--) { - var rule = rules[len]; +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding} [encoding] + * @param {boolean} [end=false] + * @returns {Chunk[]} + */ +const search = /[\0\t\n\r]/g; +/** + * @returns {Preprocessor} + */ - if (rule[0].test(word)) return replace(word, rule); - } +function preprocess() { + let column = 1; + let buffer = ''; + /** @type {boolean|undefined} */ - return word; - } + let start = true; + /** @type {boolean|undefined} */ - /** - * Replace a word with the updated word. - * - * @param {Object} replaceMap - * @param {Object} keepMap - * @param {Array} rules - * @return {Function} - */ - function replaceWord (replaceMap, keepMap, rules) { - return function (word) { - // Get the correct token and case restoration functions. - var token = word.toLowerCase(); + let atCarriageReturn; + return preprocessor + /** @type {Preprocessor} */ - // Check against the keep object map. - if (keepMap.hasOwnProperty(token)) { - return restoreCase(word, token); + function preprocessor(value, encoding, end) { + /** @type {Chunk[]} */ + const chunks = []; + /** @type {RegExpMatchArray|null} */ + + let match; + /** @type {number} */ + + let next; + /** @type {number} */ + + let startPosition; + /** @type {number} */ + + let endPosition; + /** @type {Code} */ + + let code; // @ts-expect-error `Buffer` does allow an encoding. + + value = buffer + value.toString(encoding); + startPosition = 0; + buffer = ''; + + if (start) { + if (value.charCodeAt(0) === 65279) { + startPosition++; } - // Check against the replacement map for a direct word replacement. - if (replaceMap.hasOwnProperty(token)) { - return restoreCase(word, replaceMap[token]); + start = undefined; + } + + while (startPosition < value.length) { + search.lastIndex = startPosition; + match = search.exec(value); + endPosition = + match && match.index !== undefined ? match.index : value.length; + code = value.charCodeAt(endPosition); + + if (!match) { + buffer = value.slice(startPosition); + break } - // Run all the rules against the word. - return sanitizeWord(token, word, rules); - }; - } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3); + atCarriageReturn = undefined; + } else { + if (atCarriageReturn) { + chunks.push(-5); + atCarriageReturn = undefined; + } - /** - * Check if a word is part of the map. - */ - function checkWord (replaceMap, keepMap, rules, bool) { - return function (word) { - var token = word.toLowerCase(); + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)); + column += endPosition - startPosition; + } - if (keepMap.hasOwnProperty(token)) return true; - if (replaceMap.hasOwnProperty(token)) return false; + switch (code) { + case 0: { + chunks.push(65533); + column++; + break + } - return sanitizeWord(token, token, rules) === token; - }; + case 9: { + next = Math.ceil(column / 4) * 4; + chunks.push(-2); + + while (column++ < next) chunks.push(-1); + + break + } + + case 10: { + chunks.push(-4); + column = 1; + break + } + + default: { + atCarriageReturn = true; + column = 1; + } + } + } + + startPosition = endPosition + 1; + } + + if (end) { + if (atCarriageReturn) chunks.push(-5); + if (buffer) chunks.push(buffer); + chunks.push(null); + } + + return chunks } +} - /** - * Pluralize or singularize a word based on the passed in count. - * - * @param {string} word The word to pluralize - * @param {number} count How many of the word exist - * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks) - * @return {string} - */ - function pluralize (word, count, inclusive) { - var pluralized = count === 1 - ? pluralize.singular(word) : pluralize.plural(word); +/** + * @typedef {import('micromark-util-types').Event} Event + */ +/** + * @param {Event[]} events + * @returns {Event[]} + */ - return (inclusive ? count + ' ' : '') + pluralized; +function postprocess(events) { + while (!subtokenize(events)) { + // Empty } - /** - * Pluralize a word. - * - * @type {Function} - */ - pluralize.plural = replaceWord( - irregularSingles, irregularPlurals, pluralRules - ); + return events +} - /** - * Check if a word is plural. - * - * @type {Function} - */ - pluralize.isPlural = checkWord( - irregularSingles, irregularPlurals, pluralRules - ); +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base); - /** - * Singularize a word. - * - * @type {Function} - */ - pluralize.singular = replaceWord( - irregularPlurals, irregularSingles, singularRules - ); + if ( + // C0 except for HT, LF, FF, CR, space + code < 9 || + code === 11 || + (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls. + (code > 126 && code < 160) || // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || // Noncharacters. + (code > 64975 && code < 65008) || + (code & 65535) === 65535 || + (code & 65535) === 65534 || // Out of range + code > 1114111 + ) { + return '\uFFFD' + } - /** - * Check if a word is singular. - * - * @type {Function} - */ - pluralize.isSingular = checkWord( - irregularPlurals, irregularSingles, singularRules - ); + return String.fromCharCode(code) +} - /** - * Add a pluralization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement - */ - pluralize.addPluralRule = function (rule, replacement) { - pluralRules.push([sanitizeRule(rule), replacement]); - }; +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * @typedef {Root|Root['children'][number]} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist').Point} Point + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + */ +const own$4 = {}.hasOwnProperty; +/** + * @param value Markdown to parse (`string` or `Buffer`). + * @param [encoding] Character encoding to understand `value` as when it’s a `Buffer` (`string`, default: `'utf8'`). + * @param [options] Configuration + */ +const fromMarkdown = /** - * Add a singularization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement + * @type {( + * ((value: Value, encoding: Encoding, options?: Options) => Root) & + * ((value: Value, options?: Options) => Root) + * )} */ - pluralize.addSingularRule = function (rule, replacement) { - singularRules.push([sanitizeRule(rule), replacement]); - }; /** - * Add an uncountable word rule. - * - * @param {(string|RegExp)} word + * @param {Value} value + * @param {Encoding} [encoding] + * @param {Options} [options] + * @returns {Root} */ - pluralize.addUncountableRule = function (word) { - if (typeof word === 'string') { - uncountables[word.toLowerCase()] = true; - return; + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding; + encoding = undefined; } - // Set singular and plural references for the word. - pluralize.addPluralRule(word, '$0'); - pluralize.addSingularRule(word, '$0'); + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) }; +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options} [options] + */ + +function compiler(options = {}) { + /** @type {NormalizedExtension} */ + // @ts-expect-error: our base has all required fields, so the result will too. + const config = configure$1( + { + transforms: [], + canContainEols: [ + 'emphasis', + 'fragment', + 'heading', + 'paragraph', + 'strong' + ], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + }, + options.mdastExtensions || [] + ); + /** @type {CompileData} */ + const data = {}; + return compile /** - * Add an irregular word definition. - * - * @param {string} single - * @param {string} plural + * @param {Array.} events + * @returns {Root} */ - pluralize.addIrregularRule = function (single, plural) { - plural = plural.toLowerCase(); - single = single.toLowerCase(); - irregularSingles[single] = plural; - irregularPlurals[plural] = single; - }; + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + }; + /** @type {CompileContext['stack']} */ + + const stack = [tree]; + /** @type {CompileContext['tokenStack']} */ + + const tokenStack = []; + /** @type {Array.} */ + + const listStack = []; + /** @type {Omit} */ + + const context = { + stack, + tokenStack, + config, + enter, + exit, + buffer, + resume, + setData, + getData + }; + let index = -1; + + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index); + } else { + const tail = listStack.pop(); + index = prepareList(events, tail, index); + } + } + } + + index = -1; + + while (++index < events.length) { + const handler = config[events[index][0]]; + + if (own$4.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ); + } + } + + if (tokenStack.length > 0) { + throw new Error( + 'Cannot close document, a token (`' + + tokenStack[tokenStack.length - 1].type + + '`, ' + + stringifyPosition$1({ + start: tokenStack[tokenStack.length - 1].start, + end: tokenStack[tokenStack.length - 1].end + }) + + ') is still open' + ) + } // Figure out `root` position. + + tree.position = { + start: point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + }; + index = -1; + + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree; + } + return tree + } /** - * Irregular rules. + * @param {Array.} events + * @param {number} start + * @param {number} length + * @returns {number} */ - [ - // Pronouns. - ['I', 'we'], - ['me', 'us'], - ['he', 'they'], - ['she', 'they'], - ['them', 'them'], - ['myself', 'ourselves'], - ['yourself', 'yourselves'], - ['itself', 'themselves'], - ['herself', 'themselves'], - ['himself', 'themselves'], - ['themself', 'themselves'], - ['is', 'are'], - ['was', 'were'], - ['has', 'have'], - ['this', 'these'], - ['that', 'those'], - // Words ending in with a consonant and `o`. - ['echo', 'echoes'], - ['dingo', 'dingoes'], - ['volcano', 'volcanoes'], - ['tornado', 'tornadoes'], - ['torpedo', 'torpedoes'], - // Ends with `us`. - ['genus', 'genera'], - ['viscus', 'viscera'], - // Ends with `ma`. - ['stigma', 'stigmata'], - ['stoma', 'stomata'], - ['dogma', 'dogmata'], - ['lemma', 'lemmata'], - ['schema', 'schemata'], - ['anathema', 'anathemata'], - // Other irregular rules. - ['ox', 'oxen'], - ['axe', 'axes'], - ['die', 'dice'], - ['yes', 'yeses'], - ['foot', 'feet'], - ['eave', 'eaves'], - ['goose', 'geese'], - ['tooth', 'teeth'], - ['quiz', 'quizzes'], - ['human', 'humans'], - ['proof', 'proofs'], - ['carve', 'carves'], - ['valve', 'valves'], - ['looey', 'looies'], - ['thief', 'thieves'], - ['groove', 'grooves'], - ['pickaxe', 'pickaxes'], - ['passerby', 'passersby'] - ].forEach(function (rule) { - return pluralize.addIrregularRule(rule[0], rule[1]); - }); - /** - * Pluralization rules. - */ - [ - [/s?$/i, 's'], - [/[^\u0000-\u007F]$/i, '$0'], - [/([^aeiou]ese)$/i, '$1'], - [/(ax|test)is$/i, '$1es'], - [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], - [/(e[mn]u)s?$/i, '$1s'], - [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], - [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], - [/(seraph|cherub)(?:im)?$/i, '$1im'], - [/(her|at|gr)o$/i, '$1oes'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], - [/sis$/i, 'ses'], - [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], - [/([^aeiouy]|qu)y$/i, '$1ies'], - [/([^ch][ieo][ln])ey$/i, '$1ies'], - [/(x|ch|ss|sh|zz)$/i, '$1es'], - [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], - [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], - [/(pe)(?:rson|ople)$/i, '$1ople'], - [/(child)(?:ren)?$/i, '$1ren'], - [/eaux$/i, '$0'], - [/m[ae]n$/i, 'men'], - ['thou', 'you'] - ].forEach(function (rule) { - return pluralize.addPluralRule(rule[0], rule[1]); - }); + function prepareList(events, start, length) { + let index = start - 1; + let containerBalance = -1; + let listSpread = false; + /** @type {Token|undefined} */ - /** - * Singularization rules. - */ - [ - [/s$/i, ''], - [/(ss)$/i, '$1'], - [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], - [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], - [/ies$/i, 'y'], - [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], - [/\b(mon|smil)ies$/i, '$1ey'], - [/\b((?:tit)?m|l)ice$/i, '$1ouse'], - [/(seraph|cherub)im$/i, '$1'], - [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], - [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], - [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], - [/(test)(?:is|es)$/i, '$1is'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], - [/(alumn|alg|vertebr)ae$/i, '$1a'], - [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], - [/(matr|append)ices$/i, '$1ix'], - [/(pe)(rson|ople)$/i, '$1rson'], - [/(child)ren$/i, '$1'], - [/(eau)x?$/i, '$1'], - [/men$/i, 'man'] - ].forEach(function (rule) { - return pluralize.addSingularRule(rule[0], rule[1]); - }); + let listItem; + /** @type {number|undefined} */ - /** - * Uncountable rules. - */ - [ - // Singular words with no plurals. - 'adulthood', - 'advice', - 'agenda', - 'aid', - 'aircraft', - 'alcohol', - 'ammo', - 'analytics', - 'anime', - 'athletics', - 'audio', - 'bison', - 'blood', - 'bream', - 'buffalo', - 'butter', - 'carp', - 'cash', - 'chassis', - 'chess', - 'clothing', - 'cod', - 'commerce', - 'cooperation', - 'corps', - 'debris', - 'diabetes', - 'digestion', - 'elk', - 'energy', - 'equipment', - 'excretion', - 'expertise', - 'firmware', - 'flounder', - 'fun', - 'gallows', - 'garbage', - 'graffiti', - 'hardware', - 'headquarters', - 'health', - 'herpes', - 'highjinks', - 'homework', - 'housework', - 'information', - 'jeans', - 'justice', - 'kudos', - 'labour', - 'literature', - 'machinery', - 'mackerel', - 'mail', - 'media', - 'mews', - 'moose', - 'music', - 'mud', - 'manga', - 'news', - 'only', - 'personnel', - 'pike', - 'plankton', - 'pliers', - 'police', - 'pollution', - 'premises', - 'rain', - 'research', - 'rice', - 'salmon', - 'scissors', - 'series', - 'sewage', - 'shambles', - 'shrimp', - 'software', - 'species', - 'staff', - 'swine', - 'tennis', - 'traffic', - 'transportation', - 'trout', - 'tuna', - 'wealth', - 'welfare', - 'whiting', - 'wildebeest', - 'wildlife', - 'you', - /pok[eé]mon$/i, - // Regexes. - /[^aeiou]ese$/i, // "chinese", "japanese" - /deer$/i, // "deer", "reindeer" - /fish$/i, // "fish", "blowfish", "angelfish" - /measles$/i, - /o[iu]s$/i, // "carnivorous" - /pox$/i, // "chickpox", "smallpox" - /sheep$/i - ].forEach(pluralize.addUncountableRule); + let lineIndex; + /** @type {number|undefined} */ - return pluralize; -}); -}(pluralize)); + let firstBlankLineIndex; + /** @type {boolean|undefined} */ -var plural = pluralize.exports; + let atMarker; -/** - * @param {string} d - * @returns {string} - */ -function color$2(d) { - return '\u001B[33m' + d + '\u001B[39m' -} + while (++index <= length) { + const event = events[index]; -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - */ + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++; + } else { + containerBalance--; + } -/** - * Continue traversing as normal - */ -const CONTINUE$2 = true; -/** - * Do not traverse this node’s children - */ -const SKIP$2 = 'skip'; -/** - * Stop traversing immediately - */ -const EXIT$2 = false; + atMarker = undefined; + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index; + } -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test node, optional - * @param visitor Function to run for each node - * @param reverse Visit the tree in reverse order, defaults to false - */ -const visitParents$2 = - /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} - */ - ( - /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] - */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - // @ts-expect-error no visitor given, so `visitor` is test. - visitor = test; - test = null; + atMarker = undefined; + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) ; else { + atMarker = undefined; } - const is = convert$2(test); - const step = reverse ? -1 : 1; - - factory(tree, null, [])(); - - /** - * @param {Node} node - * @param {number?} index - * @param {Array.} parents - */ - function factory(node, index, parents) { - /** @type {Object.} */ - // @ts-expect-error: hush - const value = typeof node === 'object' && node !== null ? node : {}; - /** @type {string|undefined} */ - let 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$2(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index; + lineIndex = undefined; - return visit + while (tailIndex--) { + const tailEvent = events[tailIndex]; - function visit() { - /** @type {ActionTuple} */ - let result = []; - /** @type {ActionTuple} */ - let subresult; - /** @type {number} */ - let offset; - /** @type {Array.} */ - let grandparents; + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$1(visitor(node, parents)); + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank'; + listSpread = true; + } - if (result[0] === EXIT$2) { - return result + tailEvent[1].type = 'lineEnding'; + lineIndex = tailIndex; + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) ; else { + break } } - // @ts-expect-error looks like a parent. - if (node.children && result[0] !== SKIP$2) { - // @ts-expect-error looks like a parent. - offset = (reverse ? node.children.length : -1) + step; - // @ts-expect-error looks like a parent. - grandparents = parents.concat(node); - - // @ts-expect-error looks like a parent. - while (offset > -1 && offset < node.children.length) { - // @ts-expect-error looks like a parent. - subresult = factory(node.children[offset], offset, grandparents)(); + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + // @ts-expect-error Patched. + listItem._spread = true; + } // Fix position. - if (subresult[0] === EXIT$2) { - return subresult - } + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ); + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]); + index++; + length++; + } // Create a new list item. - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + // @ts-expect-error Patched + _spread: false, + start: Object.assign({}, event[1].start) + }; // @ts-expect-error: `listItem` is most definitely defined, TS... - return result + events.splice(index, 0, ['enter', listItem, event[2]]); + index++; + length++; + firstBlankLineIndex = undefined; + atMarker = true; } } - } - ); + } // @ts-expect-error Patched. -/** - * @param {VisitorResult} value - * @returns {ActionTuple} - */ -function toResult$1(value) { - if (Array.isArray(value)) { - return value + events[start][1]._spread = listSpread; + return length } + /** + * @type {CompileContext['setData']} + * @param [value] + */ - if (typeof value === 'number') { - return [CONTINUE$2, value] + function setData(key, value) { + data[key] = value; } + /** + * @type {CompileContext['getData']} + * @template {string} K + * @param {K} key + * @returns {CompileData[K]} + */ - return [value] -} - -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Parent} Parent - * @typedef {import('unist-util-is').Test} Test - * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult - */ + function getData(key) { + return data[key] + } + /** + * @param {Point} d + * @returns {Point} + */ -/** - * Visit children of tree which pass a test - * - * @param tree Abstract syntax tree to walk - * @param test Test, optional - * @param visitor Function to run for each node - * @param reverse Fisit the tree in reverse, defaults to false - */ -const visit$2 = + function point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } + } /** - * @type {( - * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & - * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) - * )} + * @param {(token: Token) => Node} create + * @param {Handle} [and] + * @returns {Handle} */ - ( + + function opener(create, and) { + return open /** - * @param {Node} tree - * @param {Test} test - * @param {Visitor} visitor - * @param {boolean} [reverse] + * @this {CompileContext} + * @param {Token} token + * @returns {void} */ - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - visitParents$2(tree, test, overload, reverse); - /** - * @param {Node} node - * @param {Array.} parents - */ - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } + function open(token) { + enter.call(this, create(token), token); + if (and) and.call(this, token); } - ); - -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module list-item-bullet-indent - * @fileoverview - * Warn when list item bullets are indented. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * removes all indentation before bullets. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * Paragraph. - * - * * List item - * * List item - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * Paragraph. - * - * ·* List item - * ·* List item - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 3:2: Incorrect indentation before bullet: remove 1 space - * 4:2: Incorrect indentation before bullet: remove 1 space - */ - -const remarkLintListItemBulletIndent = lintRule( - 'remark-lint:list-item-bullet-indent', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'list', (list, _, grandparent) => { - let index = -1; + } + /** @type {CompileContext['buffer']} */ - while (++index < list.children.length) { - const item = list.children[index]; + function buffer() { + // @ts-expect-error: Custom node type to collect text. + this.stack.push({ + type: 'fragment', + children: [] + }); + } + /** + * @type {CompileContext['enter']} + * @template {Node} N + * @this {CompileContext} + * @param {N} node + * @param {Token} token + * @returns {N} + */ - 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; + function enter(node, token) { + /** @type {Parent} */ + // @ts-expect-error: Assume parent. + const parent = this.stack[this.stack.length - 1]; + parent.children.push(node); + this.stack.push(node); + this.tokenStack.push(token); // @ts-expect-error: `end` will be patched later. - if (indent) { - file.message( - 'Incorrect indentation before bullet: remove ' + - indent + - ' ' + - plural('space', indent), - item.position.start - ); - } - } - } - }); + node.position = { + start: point(token.start) + }; + return node } -); + /** + * @param {Handle} [and] + * @returns {Handle} + */ -var remarkLintListItemBulletIndent$1 = remarkLintListItemBulletIndent; + function closer(and) { + return close + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ -/** - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - * - * @typedef {Partial} PointLike - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ + function close(token) { + if (and) and.call(this, token); + exit.call(this, token); + } + } + /** @type {CompileContext['exit']} */ -var pointStart = point$2('start'); -var pointEnd = point$2('end'); + function exit(token) { + const node = this.stack.pop(); + const open = this.tokenStack.pop(); -/** - * Get the positional info of `node`. - * - * @param {'start'|'end'} type - */ -function point$2(type) { - return point + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition$1({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open.type !== token.type) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition$1({ + start: token.start, + end: token.end + }) + + '): a different token (`' + + open.type + + '`, ' + + stringifyPosition$1({ + start: open.start, + end: open.end + }) + + ') is open' + ) + } + node.position.end = point(token.end); + return node + } /** - * Get the positional info of `node`. - * - * @param {NodeLike} [node] - * @returns {Point} + * @this {CompileContext} + * @returns {string} */ - function point(node) { - /** @type {Point} */ - // @ts-ignore looks like a point - var point = (node && node.position && node.position[type]) || {}; - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null + function resume() { + return toString(this.stack.pop()) + } // + // Handlers. + // + + /** @type {Handle} */ + + function onenterlistordered() { + setData('expectingFirstListItemValue', true); + } + /** @type {Handle} */ + + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + this.stack[this.stack.length - 2].start = Number.parseInt( + this.sliceSerialize(token), + 10 + ); + setData('expectingFirstListItemValue'); } } -} + /** @type {Handle} */ -/** - * @typedef {Object} PointLike - * @property {number} [line] - * @property {number} [column] - * @property {number} [offset] - * - * @typedef {Object} PositionLike - * @property {PointLike} [start] - * @property {PointLike} [end] - * - * @typedef {Object} NodeLike - * @property {PositionLike} [position] - */ + function onexitcodefencedfenceinfo() { + const data = this.resume(); + this.stack[this.stack.length - 1].lang = data; + } + /** @type {Handle} */ -/** - * Check if `node` is *generated*. - * - * @param {NodeLike} [node] - * @returns {boolean} - */ -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 - ) -} + function onexitcodefencedfencemeta() { + const data = this.resume(); + this.stack[this.stack.length - 1].meta = data; + } + /** @type {Handle} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module list-item-indent - * @fileoverview - * Warn when the spacing between a list item’s bullet and its content violates - * a given style. - * - * Options: `'tab-size'`, `'mixed'`, or `'space'`, default: `'tab-size'`. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * uses `'tab-size'` (named `'tab'` there) by default to ensure Markdown is - * seen the same way across vendors. - * This can be configured with the - * [`listItemIndent`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionslistitemindent) - * option. - * This rule’s `'space'` option is named `'1'` there. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * *···List - * ····item. - * - * Paragraph. - * - * 11.·List - * ····item. - * - * Paragraph. - * - * *···List - * ····item. - * - * *···List - * ····item. - * - * @example - * {"name": "ok.md", "setting": "mixed"} - * - * *·List item. - * - * Paragraph. - * - * 11.·List item - * - * Paragraph. - * - * *···List - * ····item. - * - * *···List - * ····item. - * - * @example - * {"name": "ok.md", "setting": "space"} - * - * *·List item. - * - * Paragraph. - * - * 11.·List item - * - * Paragraph. - * - * *·List - * ··item. - * - * *·List - * ··item. - * - * @example - * {"name": "not-ok.md", "setting": "space", "label": "input"} - * - * *···List - * ····item. - * - * @example - * {"name": "not-ok.md", "setting": "space", "label": "output"} - * - * 1:5: Incorrect list-item indent: remove 2 spaces - * - * @example - * {"name": "not-ok.md", "setting": "tab-size", "label": "input"} - * - * *·List - * ··item. - * - * @example - * {"name": "not-ok.md", "setting": "tab-size", "label": "output"} - * - * 1:3: Incorrect list-item indent: add 2 spaces - * - * @example - * {"name": "not-ok.md", "setting": "mixed", "label": "input"} - * - * *···List item. - * - * @example - * {"name": "not-ok.md", "setting": "mixed", "label": "output"} - * - * 1:5: Incorrect list-item indent: remove 2 spaces - * - * @example - * {"name": "not-ok.md", "setting": "💩", "label": "output", "positionless": true} - * - * 1:1: Incorrect list-item indent style `💩`: use either `'tab-size'`, `'space'`, or `'mixed'` - */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer(); + setData('flowCodeInside', true); + } + /** @type {Handle} */ -const remarkLintListItemIndent = lintRule( - 'remark-lint:list-item-indent', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'tab-size') => { - const value = String(file); + function onexitcodefenced() { + const data = this.resume(); + this.stack[this.stack.length - 1].value = data.replace( + /^(\r?\n|\r)|(\r?\n|\r)$/g, + '' + ); + setData('flowCodeInside'); + } + /** @type {Handle} */ - if (option !== 'tab-size' && option !== 'space' && option !== 'mixed') { - file.fail( - 'Incorrect list-item indent style `' + - option + - "`: use either `'tab-size'`, `'space'`, or `'mixed'`" - ); + function onexitcodeindented() { + const data = this.resume(); + this.stack[this.stack.length - 1].value = data.replace(/(\r?\n|\r)$/g, ''); + } + /** @type {Handle} */ + + function onexitdefinitionlabelstring(token) { + // Discard label, use the source content instead. + const label = this.resume(); + this.stack[this.stack.length - 1].label = label; + this.stack[this.stack.length - 1].identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase(); + } + /** @type {Handle} */ + + function onexitdefinitiontitlestring() { + const data = this.resume(); + this.stack[this.stack.length - 1].title = data; + } + /** @type {Handle} */ + + function onexitdefinitiondestinationstring() { + const data = this.resume(); + this.stack[this.stack.length - 1].url = data; + } + /** @type {Handle} */ + + function onexitatxheadingsequence(token) { + if (!this.stack[this.stack.length - 1].depth) { + this.stack[this.stack.length - 1].depth = + this.sliceSerialize(token).length; } + } + /** @type {Handle} */ - visit$2(tree, 'list', (node) => { - if (generated(node)) return + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true); + } + /** @type {Handle} */ - const spread = node.spread; - let index = -1; + function onexitsetextheadinglinesequence(token) { + this.stack[this.stack.length - 1].depth = + this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2; + } + /** @type {Handle} */ - while (++index < node.children.length) { - const item = node.children[index]; - const head = item.children[0]; - const final = pointStart(head); + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding'); + } + /** @type {Handle} */ - const marker = value - .slice(pointStart(item).offset, final.offset) - .replace(/\[[x ]?]\s*$/i, ''); + function onenterdata(token) { + /** @type {Parent} */ + // @ts-expect-error: assume parent. + const parent = this.stack[this.stack.length - 1]; + /** @type {Node} */ + // @ts-expect-error: assume child. - const bulletSize = marker.replace(/\s+$/, '').length; + let tail = parent.children[parent.children.length - 1]; - const style = - option === 'tab-size' || (option === 'mixed' && spread) - ? Math.ceil(bulletSize / 4) * 4 - : bulletSize + 1; + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text(); // @ts-expect-error: we’ll add `end` later. - if (marker.length !== style) { - const diff = style - marker.length; - const abs = Math.abs(diff); + tail.position = { + start: point(token.start) + }; + parent.children.push(tail); + } - file.message( - 'Incorrect list-item indent: ' + - (diff > 0 ? 'add' : 'remove') + - ' ' + - abs + - ' ' + - plural('space', abs), - final - ); - } - } - }); + this.stack.push(tail); } -); + /** @type {Handle} */ -var remarkLintListItemIndent$1 = remarkLintListItemIndent; + function onexitdata(token) { + const tail = this.stack.pop(); + tail.value += this.sliceSerialize(token); + tail.position.end = point(token.end); + } + /** @type {Handle} */ -/** - * @typedef Options - * @property {boolean} [includeImageAlt=true] - */ + function onexitlineending(token) { + /** @type {Parent} */ + // @ts-expect-error: supposed to be a parent. + const context = this.stack[this.stack.length - 1]; -/** - * Get the text content of a node. - * Prefer the node’s plain-text fields, otherwise serialize its children, - * and if the given value is an array, serialize the nodes in it. - * - * @param {unknown} node - * @param {Options} [options] - * @returns {string} - */ -function toString(node, options) { - var {includeImageAlt = true} = options || {}; - return one(node, includeImageAlt) -} + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1]; + tail.position.end = point(token.end); + setData('atHardBreak'); + return + } -/** - * @param {unknown} node - * @param {boolean} includeImageAlt - * @returns {string} - */ -function one(node, includeImageAlt) { - return ( - (node && - typeof node === 'object' && - // @ts-ignore looks like a literal. - (node.value || - // @ts-ignore looks like an image. - (includeImageAlt ? node.alt : '') || - // @ts-ignore looks like a parent. - ('children' in node && all(node.children, includeImageAlt)) || - (Array.isArray(node) && all(node, includeImageAlt)))) || - '' - ) -} + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token); + onexitdata.call(this, token); + } + } + /** @type {Handle} */ -/** - * @param {Array.} values - * @param {boolean} includeImageAlt - * @returns {string} - */ -function all(values, includeImageAlt) { - /** @type {Array.} */ - var result = []; - var index = -1; + function onexithardbreak() { + setData('atHardBreak', true); + } + /** @type {Handle} */ - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt); + function onexithtmlflow() { + const data = this.resume(); + this.stack[this.stack.length - 1].value = data; } + /** @type {Handle} */ - return result.join('') -} + function onexithtmltext() { + const data = this.resume(); + this.stack[this.stack.length - 1].value = data; + } + /** @type {Handle} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-auto-link-without-protocol - * @fileoverview - * Warn for autolinks without protocol. - * Autolinks are URLs enclosed in `<` (less than) and `>` (greater than) - * characters. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * adds a protocol where needed. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * - * - * - * Most Markdown vendors don’t recognize the following as a link: - * - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:1-1:14: All automatic links must start with a protocol - */ + function onexitcodetext() { + const data = this.resume(); + this.stack[this.stack.length - 1].value = data; + } + /** @type {Handle} */ -// Protocol expression. -// See: . -const protocol = /^[a-z][a-z+.-]+:\/?/i; + function onexitlink() { + const context = this.stack[this.stack.length - 1]; // To do: clean. -const remarkLintNoAutoLinkWithoutProtocol = lintRule( - 'remark-lint:no-auto-link-without-protocol', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'link', (node) => { - if ( - !generated(node) && - pointStart(node).column === pointStart(node.children[0]).column - 1 && - pointEnd(node).column === - pointEnd(node.children[node.children.length - 1]).column + 1 && - !protocol.test(toString(node)) - ) { - file.message('All automatic links must start with a protocol', node); - } - }); - } -); + if (getData('inReference')) { + context.type += 'Reference'; + context.referenceType = getData('referenceType') || 'shortcut'; + delete context.url; + delete context.title; + } else { + delete context.identifier; + delete context.label; + delete context.referenceType; + } -var remarkLintNoAutoLinkWithoutProtocol$1 = remarkLintNoAutoLinkWithoutProtocol; + setData('referenceType'); + } + /** @type {Handle} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-blockquote-without-marker - * @fileoverview - * Warn when blank lines without `>` (greater than) markers are found in a - * block quote. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * adds markers to every line in a block quote. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * > Foo… - * > …bar… - * > …baz. - * - * @example - * {"name": "ok-tabs.md"} - * - * >»Foo… - * >»…bar… - * >»…baz. - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * > Foo… - * …bar… - * > …baz. - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 2:1: Missing marker in block quote - * - * @example - * {"name": "not-ok-tabs.md", "label": "input"} - * - * >»Foo… - * »…bar… - * …baz. - * - * @example - * {"name": "not-ok-tabs.md", "label": "output"} - * - * 2:1: Missing marker in block quote - * 3:1: Missing marker in block quote - */ + function onexitimage() { + const context = this.stack[this.stack.length - 1]; // To do: clean. -const remarkLintNoBlockquoteWithoutMarker = lintRule( - 'remark-lint:no-blockquote-without-marker', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - const value = String(file); - const loc = location(file); + if (getData('inReference')) { + context.type += 'Reference'; + context.referenceType = getData('referenceType') || 'shortcut'; + delete context.url; + delete context.title; + } else { + delete context.identifier; + delete context.label; + delete context.referenceType; + } - visit$2(tree, 'blockquote', (node) => { - let index = -1; + setData('referenceType'); + } + /** @type {Handle} */ - while (++index < node.children.length) { - const child = node.children[index]; + function onexitlabeltext(token) { + this.stack[this.stack.length - 2].identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase(); + } + /** @type {Handle} */ - if (child.type === 'paragraph' && !generated(child)) { - const end = pointEnd(child).line; - const column = pointStart(child).column; - let line = pointStart(child).line; + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1]; + const value = this.resume(); + this.stack[this.stack.length - 1].label = value; // Assume a reference. - // Skip past the first line. - while (++line <= end) { - const offset = loc.toOffset({line, column}); + setData('inReference', true); - if (/>[\t ]+$/.test(value.slice(offset - 5, offset))) { - continue - } + if (this.stack[this.stack.length - 1].type === 'link') { + this.stack[this.stack.length - 1].children = fragment.children; + } else { + this.stack[this.stack.length - 1].alt = value; + } + } + /** @type {Handle} */ - // Roughly here. - file.message('Missing marker in block quote', { - line, - column: column - 2 - }); - } - } - } - }); + function onexitresourcedestinationstring() { + const data = this.resume(); + this.stack[this.stack.length - 1].url = data; } -); + /** @type {Handle} */ -var remarkLintNoBlockquoteWithoutMarker$1 = remarkLintNoBlockquoteWithoutMarker; + function onexitresourcetitlestring() { + const data = this.resume(); + this.stack[this.stack.length - 1].title = data; + } + /** @type {Handle} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-literal-urls - * @fileoverview - * Warn for literal URLs in text. - * URLs are treated as links in some Markdown vendors, but not in others. - * To make sure they are always linked, wrap them in `<` (less than) and `>` - * (greater than). - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * never creates literal URLs and always uses `<` (less than) and `>` - * (greater than). - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * - * - * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} - * - * http://foo.bar/baz - * - * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} - * - * 1:1-1:19: Don’t use literal URLs without angle brackets - */ + function onexitresource() { + setData('inReference'); + } + /** @type {Handle} */ -const remarkLintNoLiteralUrls = lintRule( - 'remark-lint:no-literal-urls', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'link', (node) => { - const value = toString(node); + function onenterreference() { + setData('referenceType', 'collapsed'); + } + /** @type {Handle} */ - 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 onexitreferencestring(token) { + const label = this.resume(); + this.stack[this.stack.length - 1].label = label; + this.stack[this.stack.length - 1].identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase(); + setData('referenceType', 'full'); } -); + /** @type {Handle} */ -var remarkLintNoLiteralUrls$1 = remarkLintNoLiteralUrls; + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type); + } + /** @type {Handle} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module ordered-list-marker-style - * @fileoverview - * Warn when the list item marker style of ordered lists violate a given style. - * - * Options: `'consistent'`, `'.'`, or `')'`, default: `'consistent'`. - * - * `'consistent'` detects the first used list style and warns when subsequent - * lists use different styles. - * - * @example - * {"name": "ok.md"} - * - * 1. Foo - * - * - * 1. Bar - * - * Unordered lists are not affected by this rule. - * - * * Foo - * - * @example - * {"name": "ok.md", "setting": "."} - * - * 1. Foo - * - * 2. Bar - * - * @example - * {"name": "ok.md", "setting": ")"} - * - * 1) Foo - * - * 2) Bar - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * 1. Foo - * - * 2) Bar - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 3:1-3:8: Marker style should be `.` - * - * @example - * {"name": "not-ok.md", "label": "output", "setting": "💩", "positionless": true} - * - * 1:1: Incorrect ordered list item marker style `💩`: use either `'.'` or `')'` - */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token); + const type = getData('characterReferenceType'); + /** @type {string} */ -const remarkLintOrderedListMarkerStyle = lintRule( - 'remark-lint:ordered-list-marker-style', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); + let value; - if (option !== 'consistent' && option !== '.' && option !== ')') { - file.fail( - 'Incorrect ordered list item marker style `' + - option + - "`: use either `'.'` or `')'`" + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 ); + setData('characterReferenceType'); + } else { + // @ts-expect-error `decodeEntity` can return false for invalid named + // character references, but everything we’ve tokenized is valid. + value = decodeEntity(data); } - visit$2(tree, 'list', (node) => { - let index = -1; + const tail = this.stack.pop(); + tail.value += value; + tail.position.end = point(token.end); + } + /** @type {Handle} */ - if (!node.ordered) return + function onexitautolinkprotocol(token) { + onexitdata.call(this, token); + this.stack[this.stack.length - 1].url = this.sliceSerialize(token); + } + /** @type {Handle} */ - while (++index < node.children.length) { - const child = node.children[index]; + function onexitautolinkemail(token) { + onexitdata.call(this, token); + this.stack[this.stack.length - 1].url = + 'mailto:' + this.sliceSerialize(token); + } // + // Creaters. + // - if (!generated(child)) { - const marker = /** @type {Marker} */ ( - value - .slice( - pointStart(child).offset, - pointStart(child.children[0]).offset - ) - .replace(/\s|\d/g, '') - .replace(/\[[x ]?]\s*$/i, '') - ); + /** @returns {Blockquote} */ - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Marker style should be `' + option + '`', child); - } - } - } - }); + function blockQuote() { + return { + type: 'blockquote', + children: [] + } } -); + /** @returns {Code} */ -var remarkLintOrderedListMarkerStyle$1 = remarkLintOrderedListMarkerStyle; + function codeFlow() { + // @ts-expect-error: we’ve always used `null`. + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + /** @returns {InlineCode} */ -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module hard-break-spaces - * @fileoverview - * Warn when too many spaces are used to create a hard break. - * - * @example - * {"name": "ok.md"} - * - * Lorem ipsum·· - * dolor sit amet - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * Lorem ipsum··· - * dolor sit amet. - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:12-2:1: Use two spaces for hard line breaks - */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + /** @returns {Definition} */ -const remarkLintHardBreakSpaces = lintRule( - 'remark-lint:hard-break-spaces', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - const value = String(file); + function definition() { + return { + type: 'definition', + identifier: '', + // @ts-expect-error: we’ve always used `null`. + label: null, + // @ts-expect-error: we’ve always used `null`. + title: null, + url: '' + } + } + /** @returns {Emphasis} */ - visit$2(tree, 'break', (node) => { - if (!generated(node)) { - const slice = value - .slice(pointStart(node).offset, pointEnd(node).offset) - .split('\n', 1)[0] - .replace(/\r$/, ''); + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + /** @returns {Heading} */ - if (slice.length > 2) { - file.message('Use two spaces for hard line breaks', node); - } - } - }); + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } } -); + /** @returns {Break} */ -var remarkLintHardBreakSpaces$1 = remarkLintHardBreakSpaces; + function hardBreak() { + return { + type: 'break' + } + } + /** @returns {HTML} */ -var own$3 = {}.hasOwnProperty; + function html() { + return { + type: 'html', + value: '' + } + } + /** @returns {Image} */ -/** - * @typedef {import('unist').Node} Node - * @typedef {import('unist').Position} Position - * @typedef {import('unist').Point} Point - */ + function image() { + // @ts-expect-error: we’ve always used `null`. + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + /** @returns {Link} */ -/** - * Stringify one point, a position (start and end points), or a node’s - * positional information. - * - * @param {Node|Position|Point} [value] - * @returns {string} - */ -function stringifyPosition$1(value) { - // Nothing. - if (!value || typeof value !== 'object') { - return '' + function link() { + // @ts-expect-error: we’ve always used `null`. + return { + type: 'link', + title: null, + url: '', + children: [] + } } + /** + * @param {Token} token + * @returns {List} + */ - // Node. - if (own$3.call(value, 'position') || own$3.call(value, 'type')) { - // @ts-ignore looks like a node. - return position$3(value.position) + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + // @ts-expect-error: we’ve always used `null`. + start: null, + // @ts-expect-error Patched. + spread: token._spread, + children: [] + } } + /** + * @param {Token} token + * @returns {ListItem} + */ - // Position. - if (own$3.call(value, 'start') || own$3.call(value, 'end')) { - // @ts-ignore looks like a position. - return position$3(value) + function listItem(token) { + return { + type: 'listItem', + // @ts-expect-error Patched. + spread: token._spread, + // @ts-expect-error: we’ve always used `null`. + checked: null, + children: [] + } } + /** @returns {Paragraph} */ - // Point. - if (own$3.call(value, 'line') || own$3.call(value, 'column')) { - // @ts-ignore looks like a point. - return point$1(value) + function paragraph() { + return { + type: 'paragraph', + children: [] + } } + /** @returns {Strong} */ - // ? - return '' -} + function strong() { + return { + type: 'strong', + children: [] + } + } + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + /** @returns {ThematicBreak} */ + + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} /** - * @param {Point} point - * @returns {string} + * @param {Extension} combined + * @param {Array.>} extensions + * @returns {Extension} */ -function point$1(point) { - return index$1(point && point.line) + ':' + index$1(point && point.column) -} +function configure$1(combined, extensions) { + let index = -1; + + while (++index < extensions.length) { + const value = extensions[index]; + + if (Array.isArray(value)) { + configure$1(combined, value); + } else { + extension(combined, value); + } + } + + return combined +} /** - * @param {Position} pos - * @returns {string} + * @param {Extension} combined + * @param {Extension} extension + * @returns {void} */ -function position$3(pos) { - return point$1(pos && pos.start) + '-' + point$1(pos && pos.end) -} -/** - * @param {number} value - * @returns {number} +function extension(combined, extension) { + /** @type {string} */ + let key; + + for (key in extension) { + if (own$4.call(extension, key)) { + const list = key === 'canContainEols' || key === 'transforms'; + const maybe = own$4.call(combined, key) ? combined[key] : undefined; + /* c8 ignore next */ + + const left = maybe || (combined[key] = list ? [] : {}); + const right = extension[key]; + + if (right) { + if (list) { + // @ts-expect-error: `left` is an array. + combined[key] = [...left, ...right]; + } else { + Object.assign(left, right); + } + } + } + } +} + +/** + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast-util-from-markdown').Options} Options */ -function index$1(value) { - return value && typeof value === 'number' ? value : 1 + +/** @type {import('unified').Plugin<[Options?] | void[], string, Root>} */ +function remarkParse(options) { + /** @type {import('unified').ParserFunction} */ + const parser = (doc) => { + // Assume options. + const settings = /** @type {Options} */ (this.data('settings')); + + return fromMarkdown( + doc, + Object.assign({}, settings, options, { + // Note: these options are not in the readme. + // The goal is for them to be set by plugins on `data` instead of being + // passed by users. + extensions: this.data('micromarkExtensions') || [], + mdastExtensions: this.data('fromMarkdownExtensions') || [] + }) + ) + }; + + Object.assign(this, {Parser: parser}); } +var own$3 = {}.hasOwnProperty; + /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-duplicate-definitions - * @fileoverview - * Warn when duplicate definitions are found. - * - * @example - * {"name": "ok.md"} - * - * [foo]: bar - * [baz]: qux - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * [foo]: bar - * [foo]: qux + * @callback Handler + * @param {...unknown} value + * @return {unknown} * - * @example - * {"name": "not-ok.md", "label": "output"} + * @typedef {Record} Handlers * - * 2:1-2:11: Do not use definitions with the same identifier (1:1) + * @typedef {Object} Options + * @property {Handler} [unknown] + * @property {Handler} [invalid] + * @property {Handlers} [handlers] */ -const remarkLintNoDuplicateDefinitions = lintRule( - 'remark-lint:no-duplicate-definitions', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - /** @type {Record} */ - const map = Object.create(null); +/** + * Handle values based on a property. + * + * @param {string} key + * @param {Options} [options] + */ +function zwitch(key, options) { + var settings = options || {}; - visit$2(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - const identifier = node.identifier; - const duplicate = map[identifier]; + /** + * Handle one value. + * Based on the bound `key`, a respective handler will be called. + * If `value` is not an object, or doesn’t have a `key` property, the special + * “invalid” handler will be called. + * If `value` has an unknown `key`, the special “unknown” handler will be + * called. + * + * All arguments, and the context object, are passed through to the handler, + * and it’s result is returned. + * + * @param {...unknown} [value] + * @this {unknown} + * @returns {unknown} + * @property {Handler} invalid + * @property {Handler} unknown + * @property {Handlers} handlers + */ + function one(value) { + var fn = one.invalid; + var handlers = one.handlers; - if (duplicate) { - file.message( - 'Do not use definitions with the same identifier (' + - duplicate + - ')', - node - ); - } + if (value && own$3.call(value, key)) { + fn = own$3.call(handlers, value[key]) ? handlers[value[key]] : one.unknown; + } - map[identifier] = stringifyPosition$1(pointStart(node)); - } - }); + if (fn) { + return fn.apply(this, arguments) + } } -); -var remarkLintNoDuplicateDefinitions$1 = remarkLintNoDuplicateDefinitions; + one.handlers = settings.handlers || {}; + one.invalid = settings.invalid; + one.unknown = settings.unknown; + + return one +} /** - * @typedef {import('mdast').Heading} Heading - * @typedef {'atx'|'atx-closed'|'setext'} Style + * @typedef {import('./types.js').Options} Options + * @typedef {import('./types.js').Context} Context */ /** - * @param {Heading} node - * @param {Style} [relative] - * @returns {Style|null} + * @param {Context} base + * @param {Options} extension + * @returns {Context} */ -function headingStyle(node, relative) { - var last = node.children[node.children.length - 1]; - var depth = node.depth; - var pos = node && node.position && node.position.end; - var final = last && last.position && last.position.end; - - if (!pos) { - return null - } +function configure(base, extension) { + let index = -1; + /** @type {string} */ + let key; - // This can only occur for `'atx'` and `'atx-closed'` headings. - // This might incorrectly match `'atx'` headings with lots of trailing white - // space as an `'atx-closed'` heading. - if (!last) { - if (pos.column - 1 <= depth * 2) { - return consolidate(depth, relative) + // First do subextensions. + if (extension.extensions) { + while (++index < extension.extensions.length) { + configure(base, extension.extensions[index]); } - - return 'atx-closed' - } - - if (final.line + 1 === pos.line) { - return 'setext' } - if (final.column + depth < pos.column) { - return 'atx-closed' + for (key in extension) { + if (key === 'extensions') ; else if (key === 'unsafe' || key === 'join') { + /* c8 ignore next 2 */ + // @ts-expect-error: hush. + base[key] = [...(base[key] || []), ...(extension[key] || [])]; + } else if (key === 'handlers') { + base[key] = Object.assign(base[key], extension[key] || {}); + } else { + // @ts-expect-error: hush. + base.options[key] = extension[key]; + } } - return consolidate(depth, relative) + return base } /** - * Get the probable style of an atx-heading, depending on preferred style. - * - * @param {number} depth - * @param {Style} relative - * @returns {Style|null} + * @typedef {import('../types.js').Node} Node + * @typedef {import('../types.js').Parent} Parent + * @typedef {import('../types.js').Join} Join + * @typedef {import('../types.js').Context} Context */ -function consolidate(depth, relative) { - return depth < 3 - ? 'atx' - : relative === 'atx' || relative === 'setext' - ? relative - : null -} /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-heading-content-indent - * @fileoverview - * Warn when content of headings is indented. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * removes all unneeded padding around content in headings. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * #·Foo - * - * ## Bar·## - * - * ##·Baz - * - * Setext headings are not affected. - * - * Baz - * === - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * #··Foo - * - * ## Bar··## - * - * ##··Baz - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 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 - * - * @example - * {"name": "empty-heading.md"} - * - * #·· + * @param {Parent} parent + * @param {Context} context + * @returns {string} */ +function containerFlow(parent, context) { + const children = parent.children || []; + /** @type {Array.} */ + const results = []; + let index = -1; -const remarkLintNoHeadingContentIndent = lintRule( - 'remark-lint:no-heading-content-indent', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'heading', (node) => { - if (generated(node)) { - return - } + while (++index < children.length) { + const child = children[index]; - const type = headingStyle(node, 'atx'); + results.push( + context.handle(child, parent, context, {before: '\n', after: '\n'}) + ); - if (type === 'atx' || type === 'atx-closed') { - const head = pointStart(node.children[0]).column; + if (index < children.length - 1) { + results.push(between(child, children[index + 1])); + } + } - // Ignore empty headings. - if (!head) { - return - } + return results.join('') - const diff = head - pointStart(node).column - 1 - node.depth; + /** + * @param {Node} left + * @param {Node} right + * @returns {string} + */ + function between(left, right) { + let index = context.join.length; + /** @type {ReturnType} */ + let result; - if (diff) { - file.message( - 'Remove ' + - Math.abs(diff) + - ' ' + - plural('space', Math.abs(diff)) + - ' before this heading’s content', - pointStart(node.children[0]) - ); - } + while (index--) { + result = context.join[index](left, right, parent, context); + + if (result === true || result === 1) { + break } - // Closed ATX headings always must have a space between their content and - // the final hashes, thus, there is no `add x spaces`. - if (type === 'atx-closed') { - const final = pointEnd(node.children[node.children.length - 1]); - const diff = pointEnd(node).column - final.column - 1 - node.depth; + if (typeof result === 'number') { + return '\n'.repeat(1 + result) + } - if (diff) { - file.message( - 'Remove ' + - diff + - ' ' + - plural('space', diff) + - ' after this heading’s content', - final - ); - } + if (result === false) { + return '\n\n\n\n' } - }); - } -); + } -var remarkLintNoHeadingContentIndent$1 = remarkLintNoHeadingContentIndent; + return '\n\n' + } +} /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-inline-padding - * @fileoverview - * Warn when phrasing content is padded with spaces between their markers and - * content. - * - * Warns for emphasis, strong, delete, image, and link. - * - * @example - * {"name": "ok.md"} - * - * Alpha [bravo](http://echo.fox/trot) - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * Alpha [ bravo ](http://echo.fox/trot) - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:7-1:38: Don’t pad `link` with inner spaces + * @callback Map + * @param {string} value + * @param {number} line + * @param {boolean} blank + * @returns {string} */ -const remarkLintNoInlinePadding = lintRule( - 'remark-lint:no-inline-padding', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - // Note: `emphasis`, `strong`, `delete` (GFM) can’t have padding anymore - // since CM. - visit$2(tree, (node) => { - if ( - (node.type === 'link' || node.type === 'linkReference') && - !generated(node) - ) { - const value = toString(node); +const eol = /\r?\n|\r/g; - if (value.charAt(0) === ' ' || value.charAt(value.length - 1) === ' ') { - file.message('Don’t pad `' + node.type + '` with inner spaces', node); - } - } - }); +/** + * @param {string} value + * @param {Map} map + * @returns {string} + */ +function indentLines(value, map) { + /** @type {Array.} */ + const result = []; + let start = 0; + let line = 0; + /** @type {RegExpExecArray|null} */ + let match; + + while ((match = eol.exec(value))) { + one(value.slice(start, match.index)); + result.push(match[0]); + start = match.index + match[0].length; + line++; } -); -var remarkLintNoInlinePadding$1 = remarkLintNoInlinePadding; + one(value.slice(start)); -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-shortcut-reference-image - * @fileoverview - * Warn when shortcut reference images are used. - * - * Shortcut references render as images when a definition is found, and as - * plain text without definition. - * Sometimes, you don’t intend to create an image from the reference, but this - * rule still warns anyway. - * In that case, you can escape the reference like so: `!\[foo]`. - * - * @example - * {"name": "ok.md"} - * - * ![foo][] - * - * [foo]: http://foo.bar/baz.png - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * ![foo] - * - * [foo]: http://foo.bar/baz.png - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:1-1:7: Use the trailing [] on reference images - */ + return result.join('') -const remarkLintNoShortcutReferenceImage = lintRule( - 'remark-lint:no-shortcut-reference-image', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'imageReference', (node) => { - if (!generated(node) && node.referenceType === 'shortcut') { - file.message('Use the trailing [] on reference images', node); - } - }); + /** + * @param {string} value + */ + function one(value) { + result.push(map(value, line, !value)); } -); +} -var remarkLintNoShortcutReferenceImage$1 = remarkLintNoShortcutReferenceImage; +/** + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('../util/indent-lines.js').Map} Map + */ /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module no-shortcut-reference-link - * @fileoverview - * Warn when shortcut reference links are used. - * - * Shortcut references render as links when a definition is found, and as - * plain text without definition. - * Sometimes, you don’t intend to create a link from the reference, but this - * rule still warns anyway. - * In that case, you can escape the reference like so: `\[foo]`. - * - * @example - * {"name": "ok.md"} - * - * [foo][] - * - * [foo]: http://foo.bar/baz - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * [foo] - * - * [foo]: http://foo.bar/baz - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:1-1:6: Use the trailing `[]` on reference links + * @type {Handle} + * @param {Blockquote} node */ +function blockquote(node, _, context) { + const exit = context.enter('blockquote'); + const value = indentLines(containerFlow(node, context), map$1); + exit(); + return value +} -const remarkLintNoShortcutReferenceLink = lintRule( - 'remark-lint:no-shortcut-reference-link', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - visit$2(tree, 'linkReference', (node) => { - if (!generated(node) && node.referenceType === 'shortcut') { - file.message('Use the trailing `[]` on reference links', node); - } - }); - } -); +/** @type {Map} */ +function map$1(line, _, blank) { + return '>' + (blank ? '' : ' ') + line +} -var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; +/** + * @typedef {import('../types.js').Unsafe} Unsafe + */ /** - * Normalize an identifier (such as used in definitions). - * - * @param {string} value - * @returns {string} + * @param {Array.} stack + * @param {Unsafe} pattern + * @returns {boolean} */ -function normalizeIdentifier(value) { +function patternInScope(stack, pattern) { return ( - value // Collapse Markdown whitespace. - .replace(/[\t\n\r ]+/g, ' ') // Trim. - .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() + listInScope(stack, pattern.inConstruct, true) && + !listInScope(stack, pattern.notInConstruct, false) ) } /** - * @author Titus Wormer - * @copyright 2016 Titus Wormer - * @license MIT - * @module no-undefined-references - * @fileoverview - * Warn when references to undefined definitions are found. - * - * Options: `Object`, optional. - * - * The object can have an `allow` field, set to an array of strings that may - * appear between `[` and `]`, but that should not be treated as link - * identifiers. - * - * @example - * {"name": "ok.md"} - * - * [foo][] - * - * Just a [ bracket. - * - * Typically, you’d want to use escapes (with a backslash: \\) to escape what - * could turn into a \[reference otherwise]. - * - * Just two braces can’t link: []. - * - * [foo]: https://example.com - * - * @example - * {"name": "ok-allow.md", "setting": {"allow": ["...", "…"]}} - * - * > Eliding a portion of a quoted passage […] is acceptable. - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * [bar] - * - * [baz][] - * - * [text][qux] - * - * Spread [over - * lines][] - * - * > in [a - * > block quote][] - * - * [asd][a - * - * Can include [*emphasis*]. - * - * Multiple pairs: [a][b][c]. - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 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 + * @param {Array.} stack + * @param {Unsafe['inConstruct']} list + * @param {boolean} none + * @returns {boolean} */ +function listInScope(stack, list, none) { + if (!list) { + return none + } -const remarkLintNoUndefinedReferences = lintRule( - 'remark-lint:no-undefined-references', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = {}) => { - const contents = String(file); - const loc = location(file); - const lineEnding = /(\r?\n|\r)[\t ]*(>[\t ]*)*/g; - const allow = new Set( - (option.allow || []).map((d) => normalizeIdentifier(d)) - ); - /** @type {Record} */ - const map = Object.create(null); + if (typeof list === 'string') { + list = [list]; + } - visit$2(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - map[normalizeIdentifier(node.identifier)] = true; - } - }); + let index = -1; - visit$2(tree, (node) => { - // CM specifiers that references only form when defined. - // Still, they could be added by plugins, so let’s keep it. - /* c8 ignore next 10 */ - if ( - (node.type === 'imageReference' || - node.type === 'linkReference' || - node.type === 'footnoteReference') && - !generated(node) && - !(normalizeIdentifier(node.identifier) in map) && - !allow.has(normalizeIdentifier(node.identifier)) - ) { - file.message('Found reference to undefined definition', node); - } + while (++index < list.length) { + if (stack.includes(list[index])) { + return true + } + } - if (node.type === 'paragraph' || node.type === 'heading') { - findInPhrasing(node); - } - }); + return false +} - /** - * @param {Heading|Paragraph} node - */ - function findInPhrasing(node) { - /** @type {Range[]} */ - let ranges = []; +/** + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('mdast').Break} Break + */ - visit$2(node, (child) => { - // Ignore the node itself. - if (child === node) return +/** + * @type {Handle} + * @param {Break} _ + */ +function hardBreak(_, _1, context, safe) { + let index = -1; - // Can’t have links in links, so reset ranges. - if (child.type === 'link' || child.type === 'linkReference') { - ranges = []; - return SKIP$2 - } + while (++index < context.unsafe.length) { + // If we can’t put eols in this construct (setext headings, tables), use a + // space instead. + if ( + context.unsafe[index].character === '\n' && + patternInScope(context.stack, context.unsafe[index]) + ) { + return /[ \t]/.test(safe.before) ? '' : ' ' + } + } - // Enter non-text. - if (child.type !== 'text') return + return '\\\n' +} - const start = pointStart(child).offset; - const end = pointEnd(child).offset; +/** + * Get the count of the longest repeating streak of `character` in `value`. + * + * @param {string} value Content. + * @param {string} character Single character to look for + * @returns {number} Count of most frequent adjacent `character`s in `value` + */ +function longestStreak(value, character) { + var source = String(value); + var index = source.indexOf(character); + var expected = index; + var count = 0; + var max = 0; - // Bail if there’s no positional info. - if (typeof start !== 'number' || typeof end !== 'number') { - return EXIT$2 - } + if (typeof character !== 'string' || character.length !== 1) { + throw new Error('Expected character') + } - const source = contents.slice(start, end); - /** @type {Array.<[number, string]>} */ - const lines = [[start, '']]; - let last = 0; + while (index !== -1) { + if (index === expected) { + if (++count > max) { + max = count; + } + } else { + count = 1; + } - lineEnding.lastIndex = 0; - let match = lineEnding.exec(source); + expected = index + 1; + index = source.indexOf(character, expected); + } - 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); - } + return max +} - lines[lines.length - 1][1] = source.slice(last); - let lineIndex = -1; +/** + * @typedef {import('mdast').Code} Code + * @typedef {import('../types.js').Context} Context + */ - while (++lineIndex < lines.length) { - const line = lines[lineIndex][1]; - let index = 0; +/** + * @param {Code} node + * @param {Context} context + * @returns {boolean} + */ +function formatCodeAsIndented(node, context) { + return Boolean( + !context.options.fences && + node.value && + // If there’s no info… + !node.lang && + // And there’s a non-whitespace character… + /[^ \r\n]/.test(node.value) && + // And the value doesn’t start or end in a blank… + !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value) + ) +} - while (index < line.length) { - const code = line.charCodeAt(index); +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ - // Skip past escaped brackets. - if (code === 92) { - const next = line.charCodeAt(index + 1); - index++; +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkFence(context) { + const marker = context.options.fence || '`'; - if (next === 91 || next === 93) { - index++; - } - } - // Opening bracket. - else if (code === 91) { - ranges.push([lines[lineIndex][0] + index]); - index++; - } - // Close bracket. - else if (code === 93) { - // No opening. - if (ranges.length === 0) { - index++; - } else if (line.charCodeAt(index + 1) === 91) { - index++; + if (marker !== '`' && marker !== '~') { + throw new Error( + 'Cannot serialize code with `' + + marker + + '` for `options.fence`, expected `` ` `` or `~`' + ) + } - // Collapsed or full. - let range = ranges.pop(); + return marker +} - // Range should always exist. - // eslint-disable-next-line max-depth - if (range) { - range.push(lines[lineIndex][0] + index); +/** + * @typedef {import('../types.js').Unsafe} Unsafe + */ - // This is the end of a reference already. - // eslint-disable-next-line max-depth - if (range.length === 4) { - handleRange(range); - range = []; - } +/** + * @param {Unsafe} pattern + * @returns {RegExp} + */ +function patternCompile(pattern) { + if (!pattern._compiled) { + const before = + (pattern.atBreak ? '[\\r\\n][\\t ]*' : '') + + (pattern.before ? '(?:' + pattern.before + ')' : ''); - range.push(lines[lineIndex][0] + index); - ranges.push(range); - index++; - } - } else { - index++; + pattern._compiled = new RegExp( + (before ? '(' + before + ')' : '') + + (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') + + pattern.character + + (pattern.after ? '(?:' + pattern.after + ')' : ''), + 'g' + ); + } - // Shortcut or typical end of a reference. - const range = ranges.pop(); + return pattern._compiled +} - // Range should always exist. - // eslint-disable-next-line max-depth - if (range) { - range.push(lines[lineIndex][0] + index); - handleRange(range); - } - } - } - // Anything else. - else { - index++; - } - } - } - }); +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').SafeOptions} SafeOptions + */ - let index = -1; +/** + * @param {Context} context + * @param {string|null|undefined} input + * @param {SafeOptions & {encode?: Array.}} config + * @returns {string} + */ +function safe(context, input, config) { + const value = (config.before || '') + (input || '') + (config.after || ''); + /** @type {Array.} */ + const positions = []; + /** @type {Array.} */ + const result = []; + /** @type {Record} */ + const infos = {}; + let index = -1; - while (++index < ranges.length) { - handleRange(ranges[index]); - } + while (++index < context.unsafe.length) { + const pattern = context.unsafe[index]; - return SKIP$2 + if (!patternInScope(context.stack, pattern)) { + continue + } - /** - * @param {Range} range - */ - function handleRange(range) { - if (range.length === 1) return - if (range.length === 3) range.length = 2; + const expression = patternCompile(pattern); + /** @type {RegExpExecArray|null} */ + let match; - // No need to warn for just `[]`. - if (range.length === 2 && range[0] + 2 === range[1]) return + while ((match = expression.exec(value))) { + const before = 'before' in pattern || Boolean(pattern.atBreak); + const after = 'after' in pattern; + const position = match.index + (before ? match[1].length : 0); - 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 (positions.includes(position)) { + if (infos[position].before && !before) { + infos[position].before = false; + } - if ( - !generated({position: pos}) && - !(normalizeIdentifier(id) in map) && - !allow.has(normalizeIdentifier(id)) - ) { - file.message('Found reference to undefined definition', pos); + if (infos[position].after && !after) { + infos[position].after = false; } + } else { + positions.push(position); + infos[position] = {before, after}; } } } -); -var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences; + positions.sort(numerical); + + let start = config.before ? config.before.length : 0; + const end = value.length - (config.after ? config.after.length : 0); + index = -1; + + while (++index < positions.length) { + const position = positions[index]; + + // Character before or after matched: + if (position < start || position >= end) { + continue + } + + // If this character is supposed to be escaped because it has a condition on + // the next character, and the next character is definitly being escaped, + // then skip this escape. + if ( + position + 1 < end && + positions[index + 1] === position + 1 && + infos[position].after && + !infos[position + 1].before && + !infos[position + 1].after + ) { + continue + } + + if (start !== position) { + // If we have to use a character reference, an ampersand would be more + // correct, but as backslashes only care about punctuation, either will + // do the trick + result.push(escapeBackslashes(value.slice(start, position), '\\')); + } + + start = position; + + if ( + /[!-/:-@[-`{-~]/.test(value.charAt(position)) && + (!config.encode || !config.encode.includes(value.charAt(position))) + ) { + // Character escape. + result.push('\\'); + } else { + // Character reference. + result.push( + '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';' + ); + start++; + } + } + + result.push(escapeBackslashes(value.slice(start, end), config.after)); + + return result.join('') +} /** - * @author Titus Wormer - * @copyright 2016 Titus Wormer - * @license MIT - * @module no-unused-definitions - * @fileoverview - * Warn when unused definitions are found. - * - * @example - * {"name": "ok.md"} - * - * [foo][] - * - * [foo]: https://example.com - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * [bar]: https://example.com - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:1-1:27: Found unused definition + * @param {number} a + * @param {number} b + * @returns {number} */ +function numerical(a, b) { + return a - b +} -const own$2 = {}.hasOwnProperty; +/** + * @param {string} value + * @param {string} after + * @returns {string} + */ +function escapeBackslashes(value, after) { + const expression = /\\(?=[!-/:-@[-`{-~])/g; + /** @type {Array.} */ + const positions = []; + /** @type {Array.} */ + const results = []; + const whole = value + after; + let index = -1; + let start = 0; + /** @type {RegExpExecArray|null} */ + let match; -const remarkLintNoUnusedDefinitions = lintRule( - 'remark-lint:no-unused-definitions', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - /** @type {Record} */ - const map = Object.create(null); + while ((match = expression.exec(whole))) { + positions.push(match.index); + } - visit$2(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - map[node.identifier.toUpperCase()] = {node, used: false}; - } - }); + while (++index < positions.length) { + if (start !== positions[index]) { + results.push(value.slice(start, positions[index])); + } - visit$2(tree, (node) => { - if ( - node.type === 'imageReference' || - node.type === 'linkReference' || - node.type === 'footnoteReference' - ) { - const info = map[node.identifier.toUpperCase()]; + results.push('\\'); + start = positions[index]; + } - if (!generated(node) && info) { - info.used = true; - } - } - }); + results.push(value.slice(start)); - /** @type {string} */ - let identifier; + return results.join('') +} - for (identifier in map) { - if (own$2.call(map, identifier)) { - const entry = map[identifier]; +/** + * @typedef {import('mdast').Code} Code + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('../types.js').Exit} Exit + * @typedef {import('../util/indent-lines.js').Map} Map + */ - if (!entry.used) { - file.message('Found unused definition', entry.node); - } - } +/** + * @type {Handle} + * @param {Code} node + */ +function code$1(node, _, context) { + const marker = checkFence(context); + const raw = node.value || ''; + const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'; + /** @type {string} */ + let value; + /** @type {Exit} */ + let exit; + + if (formatCodeAsIndented(node, context)) { + exit = context.enter('codeIndented'); + value = indentLines(raw, map); + } else { + const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3)); + /** @type {Exit} */ + let subexit; + exit = context.enter('codeFenced'); + value = sequence; + + if (node.lang) { + subexit = context.enter('codeFencedLang' + suffix); + value += safe(context, node.lang, { + before: '`', + after: ' ', + encode: ['`'] + }); + subexit(); + } + + if (node.lang && node.meta) { + subexit = context.enter('codeFencedMeta' + suffix); + value += + ' ' + + safe(context, node.meta, { + before: ' ', + after: '\n', + encode: ['`'] + }); + subexit(); + } + + value += '\n'; + + if (raw) { + value += raw + '\n'; } + + value += sequence; } -); -var remarkLintNoUnusedDefinitions$1 = remarkLintNoUnusedDefinitions; + exit(); + return value +} + +/** @type {Map} */ +function map(line, _, blank) { + return (blank ? '' : ' ') + line +} /** - * @fileoverview - * remark preset to configure `remark-lint` with settings that prevent - * mistakes or stuff that fails across vendors. + * @typedef {import('mdast').Association} Association */ -/** @type {Preset} */ -const remarkPresetLintRecommended = { - plugins: [ - remarkLint, - // Unix compatibility. - remarkLintFinalNewline$1, - // Rendering across vendors differs greatly if using other styles. - remarkLintListItemBulletIndent$1, - [remarkLintListItemIndent$1, 'tab-size'], - // Differs or unsupported across vendors. - remarkLintNoAutoLinkWithoutProtocol$1, - remarkLintNoBlockquoteWithoutMarker$1, - remarkLintNoLiteralUrls$1, - [remarkLintOrderedListMarkerStyle$1, '.'], - // Mistakes. - remarkLintHardBreakSpaces$1, - remarkLintNoDuplicateDefinitions$1, - remarkLintNoHeadingContentIndent$1, - remarkLintNoInlinePadding$1, - remarkLintNoShortcutReferenceImage$1, - remarkLintNoShortcutReferenceLink$1, - remarkLintNoUndefinedReferences$1, - remarkLintNoUnusedDefinitions$1 - ] -}; - -var remarkPresetLintRecommended$1 = remarkPresetLintRecommended; +const characterEscape = /\\([!-/:-@[-`{-~])/g; +const characterReference = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module blockquote-indentation - * @fileoverview - * Warn when block quotes are indented too much or too little. + * The `label` of an association is the string value: character escapes and + * references work, and casing is intact. + * The `identifier` is used to match one association to another: controversially, + * character escapes and references don’t work in this matching: `©` does + * not match `©`, and `\+` does not match `+`. + * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\nb` + * matches `a b`. + * So, we do prefer the label when figuring out how we’re going to serialize: + * it has whitespace, casing, and we can ignore most useless character escapes + * and all character references. * - * Options: `number` or `'consistent'`, default: `'consistent'`. - * - * `'consistent'` detects the first used indentation and will warn when - * other block quotes use a different indentation. - * - * @example - * {"name": "ok.md", "setting": 4} - * - * > Hello - * - * Paragraph. - * - * > World - * @example - * {"name": "ok.md", "setting": 2} - * - * > Hello - * - * Paragraph. - * - * > World - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * > Hello - * - * Paragraph. - * - * > World - * - * Paragraph. - * - * > World - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 5:5: Remove 1 space between block quote and content - * 9:3: Add 1 space between block quote and content + * @param {Association} node + * @returns {string} */ +function association(node) { + if (node.label || !node.identifier) { + return node.label || '' + } -const remarkLintBlockquoteIndentation = lintRule( - 'remark-lint:blockquote-indentation', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - visit$2(tree, 'blockquote', (node) => { - if (generated(node) || node.children.length === 0) { - return - } + return node.identifier + .replace(characterEscape, '$1') + .replace(characterReference, decodeIfPossible) +} - if (option === 'consistent') { - option = check(node); - } else { - const diff = option - check(node); +/** + * @param {string} $0 + * @param {string} $1 + * @returns {string} + */ +function decodeIfPossible($0, $1) { + return decodeEntity($1) || $0 +} - if (diff !== 0) { - const abs = Math.abs(diff); +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ - file.message( - (diff > 0 ? 'Add' : 'Remove') + - ' ' + - abs + - ' ' + - plural('space', abs) + - ' between block quote and content', - pointStart(node.children[0]) - ); - } - } - }); +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkQuote(context) { + const marker = context.options.quote || '"'; + + if (marker !== '"' && marker !== "'") { + throw new Error( + 'Cannot serialize title with `' + + marker + + '` for `options.quote`, expected `"`, or `\'`' + ) } -); -var remarkLintBlockquoteIndentation$1 = remarkLintBlockquoteIndentation; + return marker +} /** - * @param {Blockquote} node - * @returns {number} + * @typedef {import('mdast').Definition} Definition + * @typedef {import('../types.js').Handle} Handle */ -function check(node) { - return pointStart(node.children[0]).column - pointStart(node).column + +/** + * @type {Handle} + * @param {Definition} node + */ +function definition(node, _, context) { + const marker = checkQuote(context); + const suffix = marker === '"' ? 'Quote' : 'Apostrophe'; + const exit = context.enter('definition'); + let subexit = context.enter('label'); + let value = + '[' + safe(context, association(node), {before: '[', after: ']'}) + ']: '; + + subexit(); + + if ( + // If there’s no url, or… + !node.url || + // If there’s whitespace, enclosed is prettier. + /[ \t\r\n]/.test(node.url) + ) { + subexit = context.enter('destinationLiteral'); + value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>'; + } else { + // No whitespace, raw is prettier. + subexit = context.enter('destinationRaw'); + value += safe(context, node.url, {before: ' ', after: ' '}); + } + + subexit(); + + if (node.title) { + subexit = context.enter('title' + suffix); + value += + ' ' + + marker + + safe(context, node.title, {before: marker, after: marker}) + + marker; + subexit(); + } + + exit(); + + return value } /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module checkbox-character-style - * @fileoverview - * Warn when list item checkboxes violate a given style. - * - * Options: `Object` or `'consistent'`, default: `'consistent'`. - * - * `'consistent'` detects the first used checked and unchecked checkbox - * styles and warns when subsequent checkboxes use different styles. - * - * Styles can also be passed in like so: - * - * ```js - * {checked: 'x', unchecked: ' '} - * ``` - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats checked checkboxes using `x` (lowercase X) and unchecked checkboxes - * as `·` (a single space). - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md", "setting": {"checked": "x"}, "gfm": true} - * - * - [x] List item - * - [x] List item - * - * @example - * {"name": "ok.md", "setting": {"checked": "X"}, "gfm": true} - * - * - [X] List item - * - [X] List item - * - * @example - * {"name": "ok.md", "setting": {"unchecked": " "}, "gfm": true} - * - * - [ ] List item - * - [ ] List item - * - [ ]·· - * - [ ] - * - * @example - * {"name": "ok.md", "setting": {"unchecked": "\t"}, "gfm": true} - * - * - [»] List item - * - [»] List item - * - * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} - * - * - [x] List item - * - [X] List item - * - [ ] List item - * - [»] List item - * - * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} - * - * 2:5: Checked checkboxes should use `x` as a marker - * 4:5: Unchecked checkboxes should use ` ` as a marker - * - * @example - * {"setting": {"unchecked": "💩"}, "name": "not-ok.md", "label": "output", "positionless": true, "gfm": true} - * - * 1:1: Incorrect unchecked checkbox marker `💩`: use either `'\t'`, or `' '` - * - * @example - * {"setting": {"checked": "💩"}, "name": "not-ok.md", "label": "output", "positionless": true, "gfm": true} - * - * 1:1: Incorrect checked checkbox marker `💩`: use either `'x'`, or `'X'` + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options */ -const remarkLintCheckboxCharacterStyle = lintRule( - 'remark-lint:checkbox-character-style', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); - /** @type {'x'|'X'|'consistent'} */ - let checked = 'consistent'; - /** @type {' '|'\x09'|'consistent'} */ - let unchecked = 'consistent'; +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkEmphasis(context) { + const marker = context.options.emphasis || '*'; - if (typeof option === 'object') { - checked = option.checked || 'consistent'; - unchecked = option.unchecked || 'consistent'; - } + if (marker !== '*' && marker !== '_') { + throw new Error( + 'Cannot serialize emphasis with `' + + marker + + '` for `options.emphasis`, expected `*`, or `_`' + ) + } - if (unchecked !== 'consistent' && unchecked !== ' ' && unchecked !== '\t') { - file.fail( - 'Incorrect unchecked checkbox marker `' + - unchecked + - "`: use either `'\\t'`, or `' '`" - ); + return marker +} + +/** + * @typedef {import('../types.js').Node} Node + * @typedef {import('../types.js').Parent} Parent + * @typedef {import('../types.js').SafeOptions} SafeOptions + * @typedef {import('../types.js').Context} Context + */ + +/** + * @param {Parent} parent + * @param {Context} context + * @param {SafeOptions} safeOptions + * @returns {string} + */ +function containerPhrasing(parent, context, safeOptions) { + const children = parent.children || []; + /** @type {Array.} */ + const results = []; + let index = -1; + let before = safeOptions.before; + + while (++index < children.length) { + const child = children[index]; + /** @type {string} */ + let after; + + if (index + 1 < children.length) { + // @ts-expect-error: hush, it’s actually a `zwitch`. + let handle = context.handle.handlers[children[index + 1].type]; + if (handle && handle.peek) handle = handle.peek; + after = handle + ? handle(children[index + 1], parent, context, { + before: '', + after: '' + }).charAt(0) + : ''; + } else { + after = safeOptions.after; } - if (checked !== 'consistent' && checked !== 'x' && checked !== 'X') { - file.fail( - 'Incorrect checked checkbox marker `' + - checked + - "`: use either `'x'`, or `'X'`" + // In some cases, html (text) can be found in phrasing right after an eol. + // When we’d serialize that, in most cases that would be seen as html + // (flow). + // As we can’t escape or so to prevent it from happening, we take a somewhat + // reasonable approach: replace that eol with a space. + // See: + if ( + results.length > 0 && + (before === '\r' || before === '\n') && + child.type === 'html' + ) { + results[results.length - 1] = results[results.length - 1].replace( + /(\r?\n|\r)$/, + ' ' ); + before = ' '; } - visit$2(tree, 'listItem', (node) => { - const head = node.children[0]; - const point = pointStart(head); + results.push(context.handle(child, parent, context, {before, after})); - // Exit early for items without checkbox. - // A list item cannot be checked and empty, according to GFM. - if ( - typeof node.checked !== 'boolean' || - !head || - typeof point.offset !== 'number' - ) { - return - } + before = results[results.length - 1].slice(-1); + } - // Move back to before `] `. - point.offset -= 2; - point.column -= 2; + return results.join('') +} - // Assume we start with a checkbox, because well, `checked` is set. - const match = /\[([\t Xx])]/.exec( - value.slice(point.offset - 2, point.offset + 1) - ); +/** + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('../types.js').Handle} Handle + */ - // Failsafe to make sure we don‘t crash if there actually isn’t a checkbox. - /* c8 ignore next */ - if (!match) return +emphasis.peek = emphasisPeek; - const style = node.checked ? checked : unchecked; +// To do: there are cases where emphasis cannot “form” depending on the +// previous or next character of sequences. +// There’s no way around that though, except for injecting zero-width stuff. +// Do we need to safeguard against that? +/** + * @type {Handle} + * @param {Emphasis} node + */ +function emphasis(node, _, context) { + const marker = checkEmphasis(context); + const exit = context.enter('emphasis'); + const value = containerPhrasing(node, context, { + before: marker, + after: marker + }); + exit(); + return marker + value + marker +} - if (style === 'consistent') { - if (node.checked) { - // @ts-expect-error: valid marker. - checked = match[1]; - } else { - // @ts-expect-error: valid marker. - unchecked = match[1]; - } - } else if (match[1] !== style) { - file.message( - (node.checked ? 'Checked' : 'Unchecked') + - ' checkboxes should use `' + - style + - '` as a marker', - point - ); - } - }); - } -); +/** + * @type {Handle} + * @param {Emphasis} _ + */ +function emphasisPeek(_, _1, context) { + return context.options.emphasis || '*' +} -var remarkLintCheckboxCharacterStyle$1 = remarkLintCheckboxCharacterStyle; +/** + * @typedef {import('mdast').Heading} Heading + * @typedef {import('../types.js').Context} Context + */ /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module checkbox-content-indent - * @fileoverview - * Warn when list item checkboxes are followed by too much whitespace. - * - * @example - * {"name": "ok.md", "gfm": true} - * - * - [ ] List item - * + [x] List Item - * * [X] List item - * - [ ] List item - * - * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} - * - * - [ ] List item - * + [x] List item - * * [X] List item - * - [ ] List item - * - * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} - * - * 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 + * @param {Heading} node + * @param {Context} context + * @returns {boolean} */ +function formatHeadingAsSetext(node, context) { + return Boolean( + context.options.setext && (!node.depth || node.depth < 3) && toString(node) + ) +} -const remarkLintCheckboxContentIndent = lintRule( - 'remark-lint:checkbox-content-indent', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - const value = String(file); - const loc = location(file); +/** + * @typedef {import('mdast').Heading} Heading + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('../types.js').Exit} Exit + */ - visit$2(tree, 'listItem', (node) => { - const head = node.children[0]; - const point = pointStart(head); +/** + * @type {Handle} + * @param {Heading} node + */ +function heading(node, _, context) { + const rank = Math.max(Math.min(6, node.depth || 1), 1); + /** @type {Exit} */ + let exit; + /** @type {Exit} */ + let subexit; + /** @type {string} */ + let value; - // Exit early for items without checkbox. - // A list item cannot be checked and empty, according to GFM. - if ( - typeof node.checked !== 'boolean' || - !head || - typeof point.offset !== 'number' - ) { - return - } + if (formatHeadingAsSetext(node, context)) { + exit = context.enter('headingSetext'); + subexit = context.enter('phrasing'); + value = containerPhrasing(node, context, {before: '\n', after: '\n'}); + subexit(); + exit(); - // Assume we start with a checkbox, because well, `checked` is set. - const match = /\[([\t xX])]/.exec( - value.slice(point.offset - 4, point.offset + 1) - ); + return ( + value + + '\n' + + (rank === 1 ? '=' : '-').repeat( + // The whole size… + value.length - + // Minus the position of the character after the last EOL (or + // 0 if there is none)… + (Math.max(value.lastIndexOf('\r'), value.lastIndexOf('\n')) + 1) + ) + ) + } - // Failsafe to make sure we don‘t crash if there actually isn’t a checkbox. - /* c8 ignore next */ - if (!match) return + const sequence = '#'.repeat(rank); + exit = context.enter('headingAtx'); + subexit = context.enter('phrasing'); + value = containerPhrasing(node, context, {before: '# ', after: '\n'}); + value = value ? sequence + ' ' + value : sequence; + if (context.options.closeAtx) { + value += ' ' + sequence; + } - // Move past checkbox. - const initial = point.offset; - let final = initial; + subexit(); + exit(); - while (/[\t ]/.test(value.charAt(final))) final++; + return value +} - if (final - initial > 0) { - file.message('Checkboxes should be followed by a single character', { - start: loc.toPoint(initial), - end: loc.toPoint(final) - }); - } - }); - } -); +/** + * @typedef {import('mdast').HTML} HTML + * @typedef {import('../types.js').Handle} Handle + */ -var remarkLintCheckboxContentIndent$1 = remarkLintCheckboxContentIndent; +html.peek = htmlPeek; /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module code-block-style - * @fileoverview - * Warn when code blocks do not adhere to a given style. - * - * Options: `'consistent'`, `'fenced'`, or `'indented'`, default: `'consistent'`. - * - * `'consistent'` detects the first used code block style and warns when - * subsequent code blocks uses different styles. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats code blocks using a fence if they have a language flag and - * indentation if not. - * Pass - * [`fences: true`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsfences) - * to always use fences for code blocks. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"setting": "indented", "name": "ok.md"} + * @type {Handle} + * @param {HTML} node + */ +function html(node) { + return node.value || '' +} + +/** + * @type {Handle} + */ +function htmlPeek() { + return '<' +} + +/** + * @typedef {import('mdast').Image} Image + * @typedef {import('../types.js').Handle} Handle + */ + +image.peek = imagePeek; + +/** + * @type {Handle} + * @param {Image} node + */ +function image(node, _, context) { + const quote = checkQuote(context); + const suffix = quote === '"' ? 'Quote' : 'Apostrophe'; + const exit = context.enter('image'); + let subexit = context.enter('label'); + let value = '![' + safe(context, node.alt, {before: '[', after: ']'}) + ']('; + + subexit(); + + if ( + // If there’s no url but there is a title… + (!node.url && node.title) || + // Or if there’s markdown whitespace or an eol, enclose. + /[ \t\r\n]/.test(node.url) + ) { + subexit = context.enter('destinationLiteral'); + value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>'; + } else { + // No whitespace, raw is prettier. + subexit = context.enter('destinationRaw'); + value += safe(context, node.url, { + before: '(', + after: node.title ? ' ' : ')' + }); + } + + subexit(); + + if (node.title) { + subexit = context.enter('title' + suffix); + value += + ' ' + + quote + + safe(context, node.title, {before: quote, after: quote}) + + quote; + subexit(); + } + + value += ')'; + exit(); + + return value +} + +/** + * @type {Handle} + */ +function imagePeek() { + return '!' +} + +/** + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('../types.js').Handle} Handle + */ + +imageReference.peek = imageReferencePeek; + +/** + * @type {Handle} + * @param {ImageReference} node + */ +function imageReference(node, _, context) { + const type = node.referenceType; + const exit = context.enter('imageReference'); + let subexit = context.enter('label'); + const alt = safe(context, node.alt, {before: '[', after: ']'}); + let value = '![' + alt + ']'; + + subexit(); + // Hide the fact that we’re in phrasing, because escapes don’t work. + const stack = context.stack; + context.stack = []; + subexit = context.enter('reference'); + const reference = safe(context, association(node), {before: '[', after: ']'}); + subexit(); + context.stack = stack; + exit(); + + if (type === 'full' || !alt || alt !== reference) { + value += '[' + reference + ']'; + } else if (type !== 'shortcut') { + value += '[]'; + } + + return value +} + +/** + * @type {Handle} + */ +function imageReferencePeek() { + return '!' +} + +/** + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('../types.js').Handle} Handle + */ + +inlineCode.peek = inlineCodePeek; + +/** + * @type {Handle} + * @param {InlineCode} node + */ +function inlineCode(node, _, context) { + let value = node.value || ''; + let sequence = '`'; + let index = -1; + + // If there is a single grave accent on its own in the code, use a fence of + // two. + // If there are two in a row, use one. + while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) { + sequence += '`'; + } + + // If this is not just spaces or eols (tabs don’t count), and either the + // first or last character are a space, eol, or tick, then pad with spaces. + if ( + /[^ \r\n]/.test(value) && + ((/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value)) || /^`|`$/.test(value)) + ) { + value = ' ' + value + ' '; + } + + // We have a potential problem: certain characters after eols could result in + // blocks being seen. + // For example, if someone injected the string `'\n# b'`, then that would + // result in an ATX heading. + // We can’t escape characters in `inlineCode`, but because eols are + // transformed to spaces when going from markdown to HTML anyway, we can swap + // them out. + while (++index < context.unsafe.length) { + const pattern = context.unsafe[index]; + const expression = patternCompile(pattern); + /** @type {RegExpExecArray|null} */ + let match; + + // Only look for `atBreak`s. + // Btw: note that `atBreak` patterns will always start the regex at LF or + // CR. + if (!pattern.atBreak) continue + + while ((match = expression.exec(value))) { + let position = match.index; + + // Support CRLF (patterns only look for one of the characters). + if ( + value.charCodeAt(position) === 10 /* `\n` */ && + value.charCodeAt(position - 1) === 13 /* `\r` */ + ) { + position--; + } + + value = value.slice(0, position) + ' ' + value.slice(match.index + 1); + } + } + + return sequence + value + sequence +} + +/** + * @type {Handle} + */ +function inlineCodePeek() { + return '`' +} + +/** + * @typedef {import('mdast').Link} Link + * @typedef {import('../types.js').Context} Context + */ + +/** + * @param {Link} node + * @param {Context} context + * @returns {boolean} + */ +function formatLinkAsAutolink(node, context) { + const raw = toString(node); + + return Boolean( + !context.options.resourceLink && + // If there’s a url… + node.url && + // And there’s a no title… + !node.title && + // And the content of `node` is a single text node… + node.children && + node.children.length === 1 && + node.children[0].type === 'text' && + // And if the url is the same as the content… + (raw === node.url || 'mailto:' + raw === node.url) && + // And that starts w/ a protocol… + /^[a-z][a-z+.-]+:/i.test(node.url) && + // And that doesn’t contain ASCII control codes (character escapes and + // references don’t work) or angle brackets… + !/[\0- <>\u007F]/.test(node.url) + ) +} + +/** + * @typedef {import('mdast').Link} Link + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('../types.js').Exit} Exit + */ + +link.peek = linkPeek; + +/** + * @type {Handle} + * @param {Link} node + */ +function link(node, _, context) { + const quote = checkQuote(context); + const suffix = quote === '"' ? 'Quote' : 'Apostrophe'; + /** @type {Exit} */ + let exit; + /** @type {Exit} */ + let subexit; + /** @type {string} */ + let value; + + if (formatLinkAsAutolink(node, context)) { + // Hide the fact that we’re in phrasing, because escapes don’t work. + const stack = context.stack; + context.stack = []; + exit = context.enter('autolink'); + value = + '<' + containerPhrasing(node, context, {before: '<', after: '>'}) + '>'; + exit(); + context.stack = stack; + return value + } + + exit = context.enter('link'); + subexit = context.enter('label'); + value = + '[' + containerPhrasing(node, context, {before: '[', after: ']'}) + ']('; + subexit(); + + if ( + // If there’s no url but there is a title… + (!node.url && node.title) || + // Or if there’s markdown whitespace or an eol, enclose. + /[ \t\r\n]/.test(node.url) + ) { + subexit = context.enter('destinationLiteral'); + value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>'; + } else { + // No whitespace, raw is prettier. + subexit = context.enter('destinationRaw'); + value += safe(context, node.url, { + before: '(', + after: node.title ? ' ' : ')' + }); + } + + subexit(); + + if (node.title) { + subexit = context.enter('title' + suffix); + value += + ' ' + + quote + + safe(context, node.title, {before: quote, after: quote}) + + quote; + subexit(); + } + + value += ')'; + + exit(); + return value +} + +/** + * @type {Handle} + * @param {Link} node + */ +function linkPeek(node, _, context) { + return formatLinkAsAutolink(node, context) ? '<' : '[' +} + +/** + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('../types.js').Handle} Handle + */ + +linkReference.peek = linkReferencePeek; + +/** + * @type {Handle} + * @param {LinkReference} node + */ +function linkReference(node, _, context) { + const type = node.referenceType; + const exit = context.enter('linkReference'); + let subexit = context.enter('label'); + const text = containerPhrasing(node, context, {before: '[', after: ']'}); + let value = '[' + text + ']'; + + subexit(); + // Hide the fact that we’re in phrasing, because escapes don’t work. + const stack = context.stack; + context.stack = []; + subexit = context.enter('reference'); + const reference = safe(context, association(node), {before: '[', after: ']'}); + subexit(); + context.stack = stack; + exit(); + + if (type === 'full' || !text || text !== reference) { + value += '[' + reference + ']'; + } else if (type !== 'shortcut') { + value += '[]'; + } + + return value +} + +/** + * @type {Handle} + */ +function linkReferencePeek() { + return '[' +} + +/** + * @typedef {import('mdast').List} List + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {List} node + */ +function list(node, _, context) { + const exit = context.enter('list'); + const value = containerFlow(node, context); + exit(); + return value +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkBullet(context) { + const marker = context.options.bullet || '*'; + + if (marker !== '*' && marker !== '+' && marker !== '-') { + throw new Error( + 'Cannot serialize items with `' + + marker + + '` for `options.bullet`, expected `*`, `+`, or `-`' + ) + } + + return marker +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkListItemIndent(context) { + const style = context.options.listItemIndent || 'tab'; + + // To do: remove in a major. + // @ts-expect-error: deprecated. + if (style === 1 || style === '1') { + return 'one' + } + + if (style !== 'tab' && style !== 'one' && style !== 'mixed') { + throw new Error( + 'Cannot serialize items with `' + + style + + '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`' + ) + } + + return style +} + +/** + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').List} List + * @typedef {import('../util/indent-lines.js').Map} Map + * @typedef {import('../types.js').Options} Options + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {ListItem} node + */ +function listItem(node, parent, context) { + const listItemIndent = checkListItemIndent(context); + /** @type {string} */ + let bullet = checkBullet(context); + + if (parent && parent.type === 'list' && parent.ordered) { + bullet = + (typeof parent.start === 'number' && parent.start > -1 + ? parent.start + : 1) + + (context.options.incrementListMarker === false + ? 0 + : parent.children.indexOf(node)) + + '.'; + } + + let size = bullet.length + 1; + + if ( + listItemIndent === 'tab' || + (listItemIndent === 'mixed' && + ((parent && 'spread' in parent && parent.spread) || node.spread)) + ) { + size = Math.ceil(size / 4) * 4; + } + + const exit = context.enter('listItem'); + const value = indentLines(containerFlow(node, context), map); + exit(); + + return value + + /** @type {Map} */ + function map(line, index, blank) { + if (index) { + return (blank ? '' : ' '.repeat(size)) + line + } + + return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line + } +} + +/** + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {Paragraph} node + */ +function paragraph(node, _, context) { + const exit = context.enter('paragraph'); + const subexit = context.enter('phrasing'); + const value = containerPhrasing(node, context, {before: '\n', after: '\n'}); + subexit(); + exit(); + return value +} + +/** + * @typedef {import('mdast').Root} Root + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {Root} node + */ +function root(node, _, context) { + return containerFlow(node, context) +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkStrong(context) { + const marker = context.options.strong || '*'; + + if (marker !== '*' && marker !== '_') { + throw new Error( + 'Cannot serialize strong with `' + + marker + + '` for `options.strong`, expected `*`, or `_`' + ) + } + + return marker +} + +/** + * @typedef {import('mdast').Strong} Strong + * @typedef {import('../types.js').Handle} Handle + */ + +strong.peek = strongPeek; + +// To do: there are cases where emphasis cannot “form” depending on the +// previous or next character of sequences. +// There’s no way around that though, except for injecting zero-width stuff. +// Do we need to safeguard against that? +/** + * @type {Handle} + * @param {Strong} node + */ +function strong(node, _, context) { + const marker = checkStrong(context); + const exit = context.enter('strong'); + const value = containerPhrasing(node, context, { + before: marker, + after: marker + }); + exit(); + return marker + marker + value + marker + marker +} + +/** + * @type {Handle} + * @param {Strong} _ + */ +function strongPeek(_, _1, context) { + return context.options.strong || '*' +} + +/** + * @typedef {import('mdast').Text} Text + * @typedef {import('../types.js').Handle} Handle + */ + +/** + * @type {Handle} + * @param {Text} node + */ +function text$1(node, _, context, safeOptions) { + return safe(context, node.value, safeOptions) +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkRuleRepetition(context) { + const repetition = context.options.ruleRepetition || 3; + + if (repetition < 3) { + throw new Error( + 'Cannot serialize rules with repetition `' + + repetition + + '` for `options.ruleRepetition`, expected `3` or more' + ) + } + + return repetition +} + +/** + * @typedef {import('../types.js').Context} Context + * @typedef {import('../types.js').Options} Options + */ + +/** + * @param {Context} context + * @returns {Exclude} + */ +function checkRule(context) { + const marker = context.options.rule || '*'; + + if (marker !== '*' && marker !== '-' && marker !== '_') { + throw new Error( + 'Cannot serialize rules with `' + + marker + + '` for `options.rule`, expected `*`, `-`, or `_`' + ) + } + + return marker +} + +/** + * @typedef {import('../types.js').Handle} Handle + * @typedef {import('mdast').ThematicBreak} ThematicBreak + */ + +/** + * @type {Handle} + * @param {ThematicBreak} _ + */ +function thematicBreak(_, _1, context) { + const value = ( + checkRule(context) + (context.options.ruleSpaces ? ' ' : '') + ).repeat(checkRuleRepetition(context)); + + return context.options.ruleSpaces ? value.slice(0, -1) : value +} + +const handle = { + blockquote, + break: hardBreak, + code: code$1, + definition, + emphasis, + hardBreak, + heading, + html, + image, + imageReference, + inlineCode, + link, + linkReference, + list, + listItem, + paragraph, + root, + strong, + text: text$1, + thematicBreak +}; + +/** + * @typedef {import('./types.js').Join} Join + */ + +/** @type {Array.} */ +const join = [joinDefaults]; + +/** @type {Join} */ +function joinDefaults(left, right, parent, context) { + if ( + // Two lists with the same marker. + (right.type === 'list' && + right.type === left.type && + Boolean(left.ordered) === Boolean(right.ordered)) || + // Indented code after list or another indented code. + (right.type === 'code' && + formatCodeAsIndented(right, context) && + (left.type === 'list' || + (left.type === right.type && formatCodeAsIndented(left, context)))) + ) { + return false + } + + // Join children of a list or an item. + // In which case, `parent` has a `spread` field. + if ('spread' in parent && typeof parent.spread === 'boolean') { + if ( + left.type === 'paragraph' && + // Two paragraphs. + (left.type === right.type || + right.type === 'definition' || + // Paragraph followed by a setext heading. + (right.type === 'heading' && formatHeadingAsSetext(right, context))) + ) { + return + } + + return parent.spread ? 1 : 0 + } +} + +/** + * @typedef {import('./types.js').Unsafe} Unsafe + */ + +/** @type {Array.} */ +const unsafe = [ + { + character: '\t', + inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde'] + }, + { + character: '\r', + inConstruct: [ + 'codeFencedLangGraveAccent', + 'codeFencedLangTilde', + 'codeFencedMetaGraveAccent', + 'codeFencedMetaTilde', + 'destinationLiteral', + 'headingAtx' + ] + }, + { + character: '\n', + inConstruct: [ + 'codeFencedLangGraveAccent', + 'codeFencedLangTilde', + 'codeFencedMetaGraveAccent', + 'codeFencedMetaTilde', + 'destinationLiteral', + 'headingAtx' + ] + }, + { + character: ' ', + inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde'] + }, + // An exclamation mark can start an image, if it is followed by a link or + // a link reference. + {character: '!', after: '\\[', inConstruct: 'phrasing'}, + // A quote can break out of a title. + {character: '"', inConstruct: 'titleQuote'}, + // A number sign could start an ATX heading if it starts a line. + {atBreak: true, character: '#'}, + {character: '#', inConstruct: 'headingAtx', after: '(?:[\r\n]|$)'}, + // Dollar sign and percentage are not used in markdown. + // An ampersand could start a character reference. + {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'}, + // An apostrophe can break out of a title. + {character: "'", inConstruct: 'titleApostrophe'}, + // A left paren could break out of a destination raw. + {character: '(', inConstruct: 'destinationRaw'}, + {before: '\\]', character: '(', inConstruct: 'phrasing'}, + // A right paren could start a list item or break out of a destination + // raw. + {atBreak: true, before: '\\d+', character: ')'}, + {character: ')', inConstruct: 'destinationRaw'}, + // An asterisk can start thematic breaks, list items, emphasis, strong. + {atBreak: true, character: '*'}, + {character: '*', inConstruct: 'phrasing'}, + // A plus sign could start a list item. + {atBreak: true, character: '+'}, + // A dash can start thematic breaks, list items, and setext heading + // underlines. + {atBreak: true, character: '-'}, + // A dot could start a list item. + {atBreak: true, before: '\\d+', character: '.', after: '(?:[ \t\r\n]|$)'}, + // Slash, colon, and semicolon are not used in markdown for constructs. + // A less than can start html (flow or text) or an autolink. + // HTML could start with an exclamation mark (declaration, cdata, comment), + // slash (closing tag), question mark (instruction), or a letter (tag). + // An autolink also starts with a letter. + // Finally, it could break out of a destination literal. + {atBreak: true, character: '<', after: '[!/?A-Za-z]'}, + {character: '<', after: '[!/?A-Za-z]', inConstruct: 'phrasing'}, + {character: '<', inConstruct: 'destinationLiteral'}, + // An equals to can start setext heading underlines. + {atBreak: true, character: '='}, + // A greater than can start block quotes and it can break out of a + // destination literal. + {atBreak: true, character: '>'}, + {character: '>', inConstruct: 'destinationLiteral'}, + // Question mark and at sign are not used in markdown for constructs. + // A left bracket can start definitions, references, labels, + {atBreak: true, character: '['}, + {character: '[', inConstruct: ['phrasing', 'label', 'reference']}, + // A backslash can start an escape (when followed by punctuation) or a + // hard break (when followed by an eol). + // Note: typical escapes are handled in `safe`! + {character: '\\', after: '[\\r\\n]', inConstruct: 'phrasing'}, + // A right bracket can exit labels. + { + character: ']', + inConstruct: ['label', 'reference'] + }, + // Caret is not used in markdown for constructs. + // An underscore can start emphasis, strong, or a thematic break. + {atBreak: true, character: '_'}, + {before: '[^A-Za-z]', character: '_', inConstruct: 'phrasing'}, + {character: '_', after: '[^A-Za-z]', inConstruct: 'phrasing'}, + // A grave accent can start code (fenced or text), or it can break out of + // a grave accent code fence. + {atBreak: true, character: '`'}, + { + character: '`', + inConstruct: [ + 'codeFencedLangGraveAccent', + 'codeFencedMetaGraveAccent', + 'phrasing' + ] + }, + // Left brace, vertical bar, right brace are not used in markdown for + // constructs. + // A tilde can start code (fenced). + {atBreak: true, character: '~'} +]; + +/** + * @typedef {import('./types.js').Node} Node + * @typedef {import('./types.js').Options} Options + * @typedef {import('./types.js').Context} Context + * @typedef {import('./types.js').Handle} Handle + * @typedef {import('./types.js').Join} Join + * @typedef {import('./types.js').Unsafe} Unsafe + */ + +/** + * @param {Node} tree + * @param {Options} [options] + * @returns {string} + */ +function toMarkdown(tree, options = {}) { + /** @type {Context} */ + // @ts-expect-error: we’ll add `handle` later. + const context = { + enter, + stack: [], + unsafe: [], + join: [], + handlers: {}, + options: {} + }; + + configure(context, {unsafe, join, handlers: handle}); + configure(context, options); + + if (context.options.tightDefinitions) { + configure(context, {join: [joinDefinition]}); + } + + /** @type {Handle} */ + context.handle = zwitch('type', { + invalid, + // @ts-expect-error: hush. + unknown, + // @ts-expect-error: hush. + handlers: context.handlers + }); + + let result = context.handle(tree, null, context, {before: '\n', after: '\n'}); + + if ( + result && + result.charCodeAt(result.length - 1) !== 10 && + result.charCodeAt(result.length - 1) !== 13 + ) { + result += '\n'; + } + + return result + + /** @type {Context['enter']} */ + function enter(name) { + context.stack.push(name); + return exit + + function exit() { + context.stack.pop(); + } + } +} + +/** + * @type {Handle} + * @param {unknown} value + */ +function invalid(value) { + throw new Error('Cannot handle value `' + value + '`, expected node') +} + +/** + * @type {Handle} + * @param {Node} node + */ +function unknown(node) { + throw new Error('Cannot handle unknown node `' + node.type + '`') +} + +/** @type {Join} */ +function joinDefinition(left, right) { + // No blank line between adjacent definitions. + if (left.type === 'definition' && left.type === right.type) { + return 0 + } +} + +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * @typedef {import('mdast-util-to-markdown').Options} Options + */ + +/** @type {import('unified').Plugin<[Options]|void[], Node, string>} */ +function remarkStringify(options) { + /** @type {import('unified').CompilerFunction} */ + const compiler = (tree) => { + // Assume options. + const settings = /** @type {Options} */ (this.data('settings')); + + return toMarkdown( + tree, + Object.assign({}, settings, options, { + // Note: this option is not in the readme. + // The goal is for it to be set by plugins on `data` instead of being + // passed by users. + extensions: this.data('toMarkdownExtensions') || [] + }) + ) + }; + + Object.assign(this, {Compiler: compiler}); +} + +const remark = unified().use(remarkParse).use(remarkStringify).freeze(); + +const name$1 = "remark"; +const version$1 = "14.0.1"; +const description$1 = "Markdown processor powered by plugins part of the unified collective"; +const license = "MIT"; +const keywords = [ + "unified", + "remark", + "markdown", + "mdast", + "abstract", + "syntax", + "tree", + "ast", + "parse", + "stringify", + "serialize", + "compile", + "process" +]; +const homepage = "https://remark.js.org"; +const repository = "https://github.com/remarkjs/remark/tree/main/packages/remark"; +const bugs = "https://github.com/remarkjs/remark/issues"; +const funding = { + type: "opencollective", + url: "https://opencollective.com/unified" +}; +const author = "Titus Wormer (https://wooorm.com)"; +const contributors = [ + "Titus Wormer (https://wooorm.com)" +]; +const sideEffects = false; +const type = "module"; +const main$1 = "index.js"; +const types = "index.d.ts"; +const files = [ + "index.d.ts", + "index.js" +]; +const dependencies$1 = { + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + unified: "^10.0.0" +}; +const scripts$1 = { + test: "node --conditions development test.js", + build: "rimraf \"*.d.ts\" && tsc && type-coverage" +}; +const xo = false; +const typeCoverage = { + atLeast: 100, + detail: true, + strict: true, + ignoreCatch: true +}; +var proc = { + name: name$1, + version: version$1, + description: description$1, + license: license, + keywords: keywords, + homepage: homepage, + repository: repository, + bugs: bugs, + funding: funding, + author: author, + contributors: contributors, + sideEffects: sideEffects, + type: type, + main: main$1, + types: types, + files: files, + dependencies: dependencies$1, + scripts: scripts$1, + xo: xo, + typeCoverage: typeCoverage +}; + +const name = "node-lint-md-cli-rollup"; +const description = "remark packaged for Node.js Markdown linting"; +const version = "2.0.2"; +const devDependencies = { + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.4", + rollup: "^2.52.7", + shx: "^0.3.3" +}; +const dependencies = { + "markdown-extensions": "^1.1.1", + remark: "^14.0.0", + "remark-gfm": "^2.0.0", + "remark-preset-lint-node": "^3.0.0", + "unified-args": "^9.0.0" +}; +const main = "dist/index.js"; +const scripts = { + build: "npx rollup -c", + "build-node": "npm run build && npx shx cp dist/index.mjs ../lint-md.mjs" +}; +var cli = { + name: name, + description: description, + version: version, + devDependencies: devDependencies, + dependencies: dependencies, + main: main, + scripts: scripts +}; + +/** + * @typedef {import('unist').Point} Point + * @typedef {import('vfile').VFile} VFile + * + * @typedef {Pick} PositionalPoint + * @typedef {Required} FullPoint + * @typedef {NonNullable} Offset + */ + +/** + * Get transform functions for the given `document`. + * + * @param {string|Uint8Array|VFile} file + */ +function location(file) { + var value = String(file); + /** @type {Array.} */ + var indices = []; + var search = /\r?\n|\r/g; + + while (search.test(value)) { + indices.push(search.lastIndex); + } + + indices.push(value.length + 1); + + return {toPoint, toOffset} + + /** + * Get the line and column-based `point` for `offset` in the bound indices. + * Returns a point with `undefined` values when given invalid or out of bounds + * input. + * + * @param {Offset} offset + * @returns {FullPoint} + */ + function toPoint(offset) { + var index = -1; + + if (offset > -1 && offset < indices[indices.length - 1]) { + while (++index < indices.length) { + if (indices[index] > offset) { + return { + line: index + 1, + column: offset - (indices[index - 1] || 0) + 1, + offset + } + } + } + } + + return {line: undefined, column: undefined, offset: undefined} + } + + /** + * Get the `offset` for a line and column-based `point` in the bound indices. + * Returns `-1` when given invalid or out of bounds input. + * + * @param {PositionalPoint} point + * @returns {Offset} + */ + function toOffset(point) { + var line = point && point.line; + var column = point && point.column; + /** @type {number} */ + var offset; + + if ( + typeof line === 'number' && + typeof column === 'number' && + !Number.isNaN(line) && + !Number.isNaN(column) && + line - 1 in indices + ) { + offset = (indices[line - 2] || 0) + column - 1 || 0; + } + + return offset > -1 && offset < indices[indices.length - 1] ? offset : -1 + } +} + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * + * @typedef {string} Type + * @typedef {Object} Props + * + * @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.} Test + */ + +const convert = + /** + * @type {( + * ((test: T['type']|Partial|TestFunctionPredicate) => AssertPredicate) & + * ((test?: Test) => AssertAnything) + * )} + */ + ( + /** + * Generate an assertion from a check. + * @param {Test} [test] + * When nullish, checks if `node` is a `Node`. + * When `string`, works like passing `function (node) {return node.type === test}`. + * When `function` checks if function passed the node is true. + * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. + * When `array`, checks any one of the subtests pass. + * @returns {AssertAnything} + */ + 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) + } + + throw new Error('Expected function, string, or object as test') + } + ); +/** + * @param {Array.} tests + * @returns {AssertAnything} + */ +function anyFactory(tests) { + /** @type {Array.} */ + const checks = []; + let index = -1; + + while (++index < tests.length) { + checks[index] = convert(tests[index]); + } + + return castFactory(any) + + /** + * @this {unknown} + * @param {unknown[]} parameters + * @returns {boolean} + */ + function any(...parameters) { + let index = -1; + + while (++index < checks.length) { + if (checks[index].call(this, ...parameters)) return true + } + + return false + } +} + +/** + * Utility to assert each property in `test` is represented in `node`, and each + * values are strictly equal. + * + * @param {Props} check + * @returns {AssertAnything} + */ +function propsFactory(check) { + return castFactory(all) + + /** + * @param {Node} node + * @returns {boolean} + */ + function all(node) { + /** @type {string} */ + let key; + + for (key in check) { + // @ts-expect-error: hush, it sure works as an index. + if (node[key] !== check[key]) return false + } + + return true + } +} + +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * + * @param {Type} check + * @returns {AssertAnything} + */ +function typeFactory(check) { + return castFactory(type) + + /** + * @param {Node} node + */ + function type(node) { + return node && node.type === check + } +} + +/** + * Utility to convert a string into a function which checks a given node’s type + * for said string. + * @param {TestFunctionAnything} check + * @returns {AssertAnything} + */ +function castFactory(check) { + return assertion + + /** + * @this {unknown} + * @param {Array.} parameters + * @returns {boolean} + */ + function assertion(...parameters) { + // @ts-expect-error: spreading is fine. + return Boolean(check.call(this, ...parameters)) + } +} + +// Utility to return true. +function ok() { + return true +} + +/** + * @param {string} d + * @returns {string} + */ +function color$2(d) { + return '\u001B[33m' + d + '\u001B[39m' +} + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ + +/** + * Continue traversing as normal + */ +const CONTINUE$2 = true; +/** + * Do not traverse this node’s children + */ +const SKIP$2 = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT$2 = false; + +const visitParents$2 = + /** + * @type {( + * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) + * )} + */ + ( + /** + * Visit children of tree which pass a test + * + * @param {Node} tree Abstract syntax tree to walk + * @param {Test} test test Test node + * @param {Visitor} visitor Function to run for each node + * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-ignore no visitor given, so `visitor` is test. + visitor = test; + test = null; + } + + var is = convert(test); + var step = reverse ? -1 : 1; + + factory(tree, null, [])(); + + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + var value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string} */ + 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$2(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); + } + + return visit + + function visit() { + /** @type {ActionTuple} */ + var result = []; + /** @type {ActionTuple} */ + var subresult; + /** @type {number} */ + var offset; + /** @type {Array.} */ + var grandparents; + + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$2(visitor(node, parents)); + + if (result[0] === EXIT$2) { + return result + } + } + + if (node.children && result[0] !== SKIP$2) { + // @ts-ignore looks like a parent. + offset = (reverse ? node.children.length : -1) + step; + // @ts-ignore looks like a parent. + grandparents = parents.concat(node); + + // @ts-ignore looks like a parent. + while (offset > -1 && offset < node.children.length) { + subresult = factory(node.children[offset], offset, grandparents)(); + + if (subresult[0] === EXIT$2) { + return subresult + } + + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } + } + + return result + } + } + } + ); + +/** + * @param {VisitorResult} value + * @returns {ActionTuple} + */ +function toResult$2(value) { + if (Array.isArray(value)) { + return value + } + + if (typeof value === 'number') { + return [CONTINUE$2, value] + } + + return [value] +} + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + */ + +const visit$1 = + /** + * @type {( + * ((tree: Node, test: T['type']|Partial|import('unist-util-is').TestFunctionPredicate|Array.|import('unist-util-is').TestFunctionPredicate>, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, test: Test, visitor: Visitor, reverse?: boolean) => void) & + * ((tree: Node, visitor: Visitor, reverse?: boolean) => void) + * )} + */ + ( + /** + * Visit children of tree which pass a test + * + * @param {Node} tree Abstract syntax tree to walk + * @param {Test} test test Test node + * @param {Visitor} visitor Function to run for each node + * @param {boolean} [reverse] Fisit the tree in reverse, defaults to false + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } + + visitParents$2(tree, test, overload, reverse); + + /** + * @param {Node} node + * @param {Array.} parents + */ + function overload(node, parents) { + var parent = parents[parents.length - 1]; + return visitor( + node, + parent ? parent.children.indexOf(node) : null, + parent + ) + } + } + ); + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist').Point} Point + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('vfile').VFile} VFile + * @typedef {import('vfile-message').VFileMessage} VFileMessage + * + * @typedef {OptionsWithoutReset|OptionsWithReset} Options + * @typedef {OptionsBaseFields & OptionsWithoutResetFields} OptionsWithoutReset + * @typedef {OptionsBaseFields & OptionsWithResetFields} OptionsWithReset + * + * @typedef OptionsWithoutResetFields + * @property {false} [reset] + * Whether to treat all messages as turned off initially. + * @property {string[]} [disable] + * List of `ruleId`s to turn off. + * + * @typedef OptionsWithResetFields + * @property {true} reset + * Whether to treat all messages as turned off initially. + * @property {string[]} [enable] + * List of `ruleId`s to initially turn on. + * + * @typedef OptionsBaseFields + * @property {string} name + * Name of markers that can control the message sources. + * + * For example, `{name: 'alpha'}` controls `alpha` markers: + * + * ```html + * + * ``` + * @property {MarkerParser} marker + * Parse a possible marker to a comment marker object (Marker). + * If the marker isn't a marker, should return `null`. + * @property {Test} [test] + * Test for possible markers + * @property {string[]} [known] + * List of allowed `ruleId`s. When given a warning is shown + * when someone tries to control an unknown rule. + * + * For example, `{name: 'alpha', known: ['bravo']}` results in a warning if + * `charlie` is configured: + * + * ```html + * + * ``` + * @property {string|string[]} [source] + * Sources that can be controlled with `name` markers. + * Defaults to `name`. + * + * @callback MarkerParser + * Parse a possible comment marker node to a Marker. + * @param {Node} node + * Node to parse + * + * @typedef Marker + * A comment marker. + * @property {string} name + * Name of marker. + * @property {string} attributes + * Value after name. + * @property {Record} parameters + * Parsed attributes. + * @property {Node} node + * Reference to given node. + * + * @typedef Mark + * @property {Point|undefined} point + * @property {boolean} state + */ + +const own$2 = {}.hasOwnProperty; + +/** + * @type {import('unified').Plugin<[Options]>} + * @returns {(tree: Node, file: VFile) => void} + */ +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 + + /** + * @param {Node} tree + * @param {VFile} file + */ + function transformer(tree, file) { + const toOffset = location(file).toOffset; + const initial = !reset; + const gaps = detectGaps(tree, file); + /** @type {Record} */ + const scope = {}; + /** @type {Mark[]} */ + const globals = []; + + visit$1(tree, options.test, visitor); + + file.messages = file.messages.filter((m) => filter(m)); + + /** + * @param {Node} node + * @param {number|null} position + * @param {Parent|null} parent + */ + function visitor(node, position, parent) { + /** @type {Marker|null} */ + 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; + + /** @type {string} */ + // @ts-expect-error: we’ll check for unknown values next. + const verb = ruleIds.shift(); + + if (verb !== 'enable' && verb !== 'disable' && verb !== 'ignore') { + file.fail( + 'Unknown keyword `' + + verb + + '`: expected ' + + "`'enable'`, `'disable'`, or `'ignore'`", + mark.node + ); + } + + // Apply to all rules. + 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'; + } + } + + /** + * @param {VFileMessage} message + * @returns {boolean} + */ + function filter(message) { + let gapIndex = gaps.length; + + // Keep messages from a different source. + if (!message.source || !sources.includes(message.source)) { + return true + } + + // We only ignore messages if they‘re disabled, *not* when they’re not in + // the document. + if (!message.line) { + message.line = 1; + } + + if (!message.column) { + message.column = 1; + } + + // Check whether the warning is inside a gap. + // @ts-expect-error: we just normalized `null` to `number`s. + const offset = toOffset(message); + + while (gapIndex--) { + if (gaps[gapIndex][0] <= offset && gaps[gapIndex][1] > offset) { + return false + } + } + + // Check whether allowed by specific and global states. + return ( + (!message.ruleId || + check(message, scope[message.ruleId], message.ruleId)) && + check(message, globals) + ) + } + + /** + * Helper to check (and possibly warn) if a `ruleId` is unknown. + * + * @param {string} ruleId + * @param {string} verb + * @param {Node} node + * @returns {boolean} + */ + 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 + } + + /** + * Get the latest state of a rule. + * When without `ruleId`, gets global state. + * + * @param {string|undefined} ruleId + * @returns {boolean} + */ + 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) + } + + /** + * Handle a rule. + * + * @param {Point|undefined} point + * @param {boolean} state + * @param {string|undefined} [ruleId] + * @returns {void} + */ + 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}); + } + + // Toggle all known rules. + if (!ruleId) { + for (ruleId in scope) { + if (own$2.call(scope, ruleId)) { + toggle(point, state, ruleId); + } + } + } + } + + /** + * Check all `ranges` for `message`. + * + * @param {VFileMessage} message + * @param {Mark[]|undefined} ranges + * @param {string|undefined} [ruleId] + * @returns {boolean} + */ + function check(message, ranges, ruleId) { + if (ranges && ranges.length > 0) { + // Check the state at the message’s position. + 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 + } + } + } + + // The first marker ocurred after the first message, so we check the + // initial state. + if (!ruleId) { + return Boolean(initial || reset) + } + + return reset ? enable.includes(ruleId) : !disable.includes(ruleId) + } + } +} + +/** + * Detect gaps in `tree`. * - * alpha() + * @param {Node} tree + * @param {VFile} file + */ +function detectGaps(tree, file) { + /** @type {Node[]} */ + // @ts-expect-error: fine. + const children = tree.children || []; + const lastNode = children[children.length - 1]; + /** @type {[number, number][]} */ + const gaps = []; + let offset = 0; + /** @type {boolean|undefined} */ + let gap; + + // Find all gaps. + visit$1(tree, one); + + // Get the end of the document. + // This detects if the last node was the last node. + // If not, there’s an extra gap between the last node and the end of the + // document. + if ( + lastNode && + lastNode.position && + lastNode.position.end && + offset === lastNode.position.end.offset && + file.toString().slice(offset).trim() !== '' + ) { + update(); + + update( + tree && + tree.position && + tree.position.end && + tree.position.end.offset && + tree.position.end.offset - 1 + ); + } + + return gaps + + /** + * @param {Node} node + */ + function one(node) { + update(node.position && node.position.start && node.position.start.offset); + + if (!('children' in node)) { + update(node.position && node.position.end && node.position.end.offset); + } + } + + /** + * Detect a new position. + * + * @param {number|undefined} [latest] + * @returns {void} + */ + function update(latest) { + if (latest === null || latest === undefined) { + gap = true; + } else if (offset < latest) { + if (gap) { + gaps.push([offset, latest]); + gap = undefined; + } + + offset = latest; + } + } +} + +/** + * @typedef {string|number|boolean} MarkerParameterValue + * @typedef {Object.} MarkerParameters * - * Paragraph. + * @typedef HtmlNode + * @property {'html'} type + * @property {string} value * - * bravo() + * @typedef CommentNode + * @property {'comment'} type + * @property {string} value * - * @example - * {"setting": "indented", "name": "not-ok.md", "label": "input"} + * @typedef Marker + * @property {string} name + * @property {string} attributes + * @property {MarkerParameters|null} parameters + * @property {HtmlNode|CommentNode} node + */ + +var commentExpression = /\s*([a-zA-Z\d-]+)(\s+([\s\S]*))?\s*/; + +var markerExpression = new RegExp( + '(\\s*\\s*)' +); + +/** + * Parse a comment marker. + * @param {unknown} node + * @returns {Marker|null} + */ +function commentMarker(node) { + /** @type {RegExpMatchArray} */ + var match; + /** @type {number} */ + var offset; + /** @type {MarkerParameters} */ + var parameters; + + if ( + node && + typeof node === 'object' && + // @ts-ignore hush + (node.type === 'html' || node.type === 'comment') + ) { + // @ts-ignore hush + match = node.value.match( + // @ts-ignore hush + node.type === 'comment' ? commentExpression : markerExpression + ); + + // @ts-ignore hush + if (match && match[0].length === node.value.length) { + // @ts-ignore hush + offset = node.type === 'comment' ? 1 : 2; + parameters = parseParameters(match[offset + 1] || ''); + + if (parameters) { + return { + name: match[offset], + attributes: match[offset + 2] || '', + parameters, + // @ts-ignore hush + node + } + } + } + } + + return null +} + +/** + * Parse `value` into an object. * - * ``` - * alpha() - * ``` + * @param {string} value + * @returns {MarkerParameters|null} + */ +function parseParameters(value) { + /** @type {MarkerParameters} */ + var parameters = {}; + + return value + .replace( + /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])+)"|'((?:\\[\s\S]|[^'])+)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, + replacer + ) + .replace(/\s+/g, '') + ? null + : parameters + + /** + * @param {string} _ + * @param {string} $1 + * @param {string} $2 + * @param {string} $3 + * @param {string} $4 + */ + // eslint-disable-next-line max-params + function replacer(_, $1, $2, $3, $4) { + /** @type {MarkerParameterValue} */ + var value = $2 || $3 || $4 || ''; + + if (value === 'true' || value === '') { + value = true; + } else if (value === 'false') { + value = false; + } else if (!Number.isNaN(Number(value))) { + value = Number(value); + } + + parameters[$1] = value; + + return '' + } +} + +/** + * @typedef {import('mdast').Root} Root + * @typedef {import('vfile').VFile} VFile + * @typedef {import('unified-message-control')} MessageControl + * @typedef {Omit|Omit} Options + */ + +const test = [ + 'html', // Comments are `html` nodes in mdast. + 'comment' // In MDX, comments have their own node. +]; + +/** + * Plugin to enable, disable, and ignore messages. * - * Paragraph. + * @type {import('unified').Plugin<[Options], Root>} + * @returns {(node: Root, file: VFile) => void} + */ +function remarkMessageControl(options) { + return messageControl( + Object.assign({marker: commentMarker, test}, options) + ) +} + +/** + * @typedef {import('mdast').Root} Root + */ + +/** + * The core plugin for `remark-lint`. + * This adds support for ignoring stuff from messages (``). + * All rules are in their own packages and presets. * - * ``` - * bravo() - * ``` + * @type {import('unified').Plugin} + */ +function remarkLint() { + this.use(lintMessageControl); +} + +/** @type {import('unified').Plugin} */ +function lintMessageControl() { + return remarkMessageControl({name: 'lint', source: 'remark-lint'}) +} + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFile} VFile * - * @example - * {"setting": "indented", "name": "not-ok.md", "label": "output"} + * @typedef {0|1|2} Severity + * @typedef {'warn'|'on'|'off'|'error'} Label + * @typedef {[Severity, ...unknown[]]} SeverityTuple * - * 1:1-3:4: Code blocks should be indented - * 7:1-9:4: Code blocks should be indented + * @callback Rule + * @param {Node} tree + * @param {VFile} file + * @param {unknown} options + * @returns {void} + */ + +const primitives$G = new Set(['string', 'number', 'boolean']); + +/** + * @param {string} id + * @param {Rule} rule + */ +function lintRule$G(id, rule) { + const parts = id.split(':'); + // Possibly useful if externalised later. + /* c8 ignore next */ + const source = parts[1] ? parts[0] : undefined; + const ruleId = parts[1]; + + Object.defineProperty(plugin, 'name', {value: id}); + + return plugin + + /** @type {import('unified').Plugin<[unknown]|void[]>} */ + function plugin(raw) { + const [severity, options] = coerce$H(ruleId, raw); + + if (!severity) return + + const fatal = severity === 2; + + return (tree, file, next) => { + let index = file.messages.length - 1; + + wrap(rule, (error) => { + const messages = file.messages; + + // Add the error, if not already properly added. + // Only happens for incorrect plugins. + /* c8 ignore next 6 */ + // @ts-expect-error: errors could be `messages`. + if (error && !messages.includes(error)) { + try { + file.fail(error); + } catch {} + } + + while (++index < messages.length) { + Object.assign(messages[index], {ruleId, source, fatal}); + } + + next(); + })(tree, file, options); + } + } +} + +/** + * Coerce a value to a severity--options tuple. * - * @example - * {"setting": "fenced", "name": "ok.md"} + * @param {string} name + * @param {unknown} value + * @returns {SeverityTuple} + */ +function coerce$H(name, value) { + /** @type {unknown[]} */ + let result; + + if (typeof value === 'boolean') { + result = [value]; + } else if (value === null || value === undefined) { + result = [1]; + } else if ( + Array.isArray(value) && + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + primitives$G.has(typeof value[0]) + ) { + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + result = [...value]; + } else { + result = [1, value]; + } + + let level = result[0]; + + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; + } + } + + if (typeof level !== 'number' || level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } + + result[0] = level; + + // @ts-expect-error: it’s now a valid tuple. + return result +} + +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @module final-newline + * @fileoverview + * Warn when a line feed at the end of a file is missing. + * Empty files are allowed. * - * ``` - * alpha() - * ``` + * See [StackExchange](https://unix.stackexchange.com/questions/18743) for why. * - * Paragraph. + * ## Fix * - * ``` - * bravo() - * ``` + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * always adds a final line feed to files. * - * @example - * {"setting": "fenced", "name": "not-ok-fenced.md", "label": "input"} + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. * - * alpha() + * ## Example * - * Paragraph. + * ##### `ok.md` * - * bravo() + * ###### In * - * @example - * {"setting": "fenced", "name": "not-ok-fenced.md", "label": "output"} + * Note: `␊` represents LF. * - * 1:1-1:12: Code blocks should be fenced - * 5:1-5:12: Code blocks should be fenced + * ```markdown + * Alpha␊ + * ``` * - * @example - * {"name": "not-ok-consistent.md", "label": "input"} + * ###### Out * - * alpha() + * No messages. * - * Paragraph. + * ##### `not-ok.md` * - * ``` - * bravo() + * ###### In + * + * Note: The below file does not have a final newline. + * + * ```markdown + * Bravo * ``` * - * @example - * {"name": "not-ok-consistent.md", "label": "output"} + * ###### Out * - * 5:1-7:4: Code blocks should be indented + * ```text + * 1:1: Missing newline character at end of file + * ``` + */ + +const remarkLintFinalNewline = lintRule$G( + 'remark-lint:final-newline', + /** @type {import('unified-lint-rule').Rule} */ + (_, file) => { + const value = String(file); + const last = value.length - 1; + + if (last > -1 && value.charAt(last) !== '\n') { + file.message('Missing newline character at end of file'); + } + } +); + +var remarkLintFinalNewline$1 = remarkLintFinalNewline; + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFile} VFile * - * @example - * {"setting": "💩", "name": "not-ok-incorrect.md", "label": "output", "positionless": true} + * @typedef {0|1|2} Severity + * @typedef {'warn'|'on'|'off'|'error'} Label + * @typedef {[Severity, ...unknown[]]} SeverityTuple + * + * @callback Rule + * @param {Node} tree + * @param {VFile} file + * @param {unknown} options + * @returns {void} + */ + +const primitives$F = new Set(['string', 'number', 'boolean']); + +/** + * @param {string} id + * @param {Rule} rule + */ +function lintRule$F(id, rule) { + const parts = id.split(':'); + // Possibly useful if externalised later. + /* c8 ignore next */ + const source = parts[1] ? parts[0] : undefined; + const ruleId = parts[1]; + + Object.defineProperty(plugin, 'name', {value: id}); + + return plugin + + /** @type {import('unified').Plugin<[unknown]|void[]>} */ + function plugin(raw) { + const [severity, options] = coerce$G(ruleId, raw); + + if (!severity) return + + const fatal = severity === 2; + + return (tree, file, next) => { + let index = file.messages.length - 1; + + wrap(rule, (error) => { + const messages = file.messages; + + // Add the error, if not already properly added. + // Only happens for incorrect plugins. + /* c8 ignore next 6 */ + // @ts-expect-error: errors could be `messages`. + if (error && !messages.includes(error)) { + try { + file.fail(error); + } catch {} + } + + while (++index < messages.length) { + Object.assign(messages[index], {ruleId, source, fatal}); + } + + next(); + })(tree, file, options); + } + } +} + +/** + * Coerce a value to a severity--options tuple. * - * 1:1: Incorrect code block style `💩`: use either `'consistent'`, `'fenced'`, or `'indented'` + * @param {string} name + * @param {unknown} value + * @returns {SeverityTuple} */ +function coerce$G(name, value) { + /** @type {unknown[]} */ + let result; -const remarkLintCodeBlockStyle = lintRule( - 'remark-lint:code-block-style', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option = 'consistent') => { - const value = String(file); + if (typeof value === 'boolean') { + result = [value]; + } else if (value === null || value === undefined) { + result = [1]; + } else if ( + Array.isArray(value) && + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + primitives$F.has(typeof value[0]) + ) { + // `isArray(unknown)` is turned into `any[]`: + // type-coverage:ignore-next-line + result = [...value]; + } else { + result = [1, value]; + } - if ( - option !== 'consistent' && - option !== 'fenced' && - option !== 'indented' - ) { - file.fail( - 'Incorrect code block style `' + - option + - "`: use either `'consistent'`, `'fenced'`, or `'indented'`" - ); + let level = result[0]; + + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; + } + } + + if (typeof level !== 'number' || level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } + + result[0] = level; + + // @ts-expect-error: it’s now a valid tuple. + return result +} + +var pluralize = {exports: {}}; + +/* global define */ + +(function (module, exports) { +(function (root, pluralize) { + /* istanbul ignore else */ + if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { + // Node. + module.exports = pluralize(); + } else { + // Browser global. + root.pluralize = pluralize(); + } +})(commonjsGlobal, function () { + // Rule storage - pluralize and singularize need to be run sequentially, + // while other rules can be optimized using an object for instant lookups. + var pluralRules = []; + var singularRules = []; + var uncountables = {}; + var irregularPlurals = {}; + var irregularSingles = {}; + + /** + * Sanitize a pluralization rule to a usable regular expression. + * + * @param {(RegExp|string)} rule + * @return {RegExp} + */ + function sanitizeRule (rule) { + if (typeof rule === 'string') { + return new RegExp('^' + rule + '$', 'i'); + } + + return rule; + } + + /** + * Pass in a word token to produce a function that can replicate the case on + * another word. + * + * @param {string} word + * @param {string} token + * @return {Function} + */ + function restoreCase (word, token) { + // Tokens are an exact match. + if (word === token) return token; + + // Lower cased words. E.g. "hello". + if (word === word.toLowerCase()) return token.toLowerCase(); + + // Upper cased words. E.g. "WHISKY". + if (word === word.toUpperCase()) return token.toUpperCase(); + + // Title cased words. E.g. "Title". + if (word[0] === word[0].toUpperCase()) { + return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); + } + + // Lower cased words. E.g. "test". + return token.toLowerCase(); + } + + /** + * Interpolate a regexp string. + * + * @param {string} str + * @param {Array} args + * @return {string} + */ + function interpolate (str, args) { + return str.replace(/\$(\d{1,2})/g, function (match, index) { + return args[index] || ''; + }); + } + + /** + * Replace a word using a rule. + * + * @param {string} word + * @param {Array} rule + * @return {string} + */ + function replace (word, rule) { + return word.replace(rule[0], function (match, index) { + var result = interpolate(rule[1], arguments); + + if (match === '') { + return restoreCase(word[index - 1], result); + } + + return restoreCase(match, result); + }); + } + + /** + * Sanitize a word by passing in the word and sanitization rules. + * + * @param {string} token + * @param {string} word + * @param {Array} rules + * @return {string} + */ + function sanitizeWord (token, word, rules) { + // Empty string or doesn't need fixing. + if (!token.length || uncountables.hasOwnProperty(token)) { + return word; + } + + var len = rules.length; + + // Iterate over the sanitization rules and use the first one to match. + while (len--) { + var rule = rules[len]; + + if (rule[0].test(word)) return replace(word, rule); + } + + return word; + } + + /** + * Replace a word with the updated word. + * + * @param {Object} replaceMap + * @param {Object} keepMap + * @param {Array} rules + * @return {Function} + */ + function replaceWord (replaceMap, keepMap, rules) { + return function (word) { + // Get the correct token and case restoration functions. + var token = word.toLowerCase(); + + // Check against the keep object map. + if (keepMap.hasOwnProperty(token)) { + return restoreCase(word, token); + } + + // Check against the replacement map for a direct word replacement. + if (replaceMap.hasOwnProperty(token)) { + return restoreCase(word, replaceMap[token]); + } + + // Run all the rules against the word. + return sanitizeWord(token, word, rules); + }; + } + + /** + * Check if a word is part of the map. + */ + function checkWord (replaceMap, keepMap, rules, bool) { + return function (word) { + var token = word.toLowerCase(); + + if (keepMap.hasOwnProperty(token)) return true; + if (replaceMap.hasOwnProperty(token)) return false; + + return sanitizeWord(token, token, rules) === token; + }; + } + + /** + * Pluralize or singularize a word based on the passed in count. + * + * @param {string} word The word to pluralize + * @param {number} count How many of the word exist + * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks) + * @return {string} + */ + function pluralize (word, count, inclusive) { + var pluralized = count === 1 + ? pluralize.singular(word) : pluralize.plural(word); + + return (inclusive ? count + ' ' : '') + pluralized; + } + + /** + * Pluralize a word. + * + * @type {Function} + */ + pluralize.plural = replaceWord( + irregularSingles, irregularPlurals, pluralRules + ); + + /** + * Check if a word is plural. + * + * @type {Function} + */ + pluralize.isPlural = checkWord( + irregularSingles, irregularPlurals, pluralRules + ); + + /** + * Singularize a word. + * + * @type {Function} + */ + pluralize.singular = replaceWord( + irregularPlurals, irregularSingles, singularRules + ); + + /** + * Check if a word is singular. + * + * @type {Function} + */ + pluralize.isSingular = checkWord( + irregularPlurals, irregularSingles, singularRules + ); + + /** + * Add a pluralization rule to the collection. + * + * @param {(string|RegExp)} rule + * @param {string} replacement + */ + pluralize.addPluralRule = function (rule, replacement) { + pluralRules.push([sanitizeRule(rule), replacement]); + }; + + /** + * Add a singularization rule to the collection. + * + * @param {(string|RegExp)} rule + * @param {string} replacement + */ + pluralize.addSingularRule = function (rule, replacement) { + singularRules.push([sanitizeRule(rule), replacement]); + }; + + /** + * Add an uncountable word rule. + * + * @param {(string|RegExp)} word + */ + pluralize.addUncountableRule = function (word) { + if (typeof word === 'string') { + uncountables[word.toLowerCase()] = true; + return; } - visit$2(tree, 'code', (node) => { - if (generated(node)) { - return - } + // Set singular and plural references for the word. + pluralize.addPluralRule(word, '$0'); + pluralize.addSingularRule(word, '$0'); + }; + + /** + * Add an irregular word definition. + * + * @param {string} single + * @param {string} plural + */ + pluralize.addIrregularRule = function (single, plural) { + plural = plural.toLowerCase(); + single = single.toLowerCase(); + + irregularSingles[single] = plural; + irregularPlurals[plural] = single; + }; + + /** + * Irregular rules. + */ + [ + // Pronouns. + ['I', 'we'], + ['me', 'us'], + ['he', 'they'], + ['she', 'they'], + ['them', 'them'], + ['myself', 'ourselves'], + ['yourself', 'yourselves'], + ['itself', 'themselves'], + ['herself', 'themselves'], + ['himself', 'themselves'], + ['themself', 'themselves'], + ['is', 'are'], + ['was', 'were'], + ['has', 'have'], + ['this', 'these'], + ['that', 'those'], + // Words ending in with a consonant and `o`. + ['echo', 'echoes'], + ['dingo', 'dingoes'], + ['volcano', 'volcanoes'], + ['tornado', 'tornadoes'], + ['torpedo', 'torpedoes'], + // Ends with `us`. + ['genus', 'genera'], + ['viscus', 'viscera'], + // Ends with `ma`. + ['stigma', 'stigmata'], + ['stoma', 'stomata'], + ['dogma', 'dogmata'], + ['lemma', 'lemmata'], + ['schema', 'schemata'], + ['anathema', 'anathemata'], + // Other irregular rules. + ['ox', 'oxen'], + ['axe', 'axes'], + ['die', 'dice'], + ['yes', 'yeses'], + ['foot', 'feet'], + ['eave', 'eaves'], + ['goose', 'geese'], + ['tooth', 'teeth'], + ['quiz', 'quizzes'], + ['human', 'humans'], + ['proof', 'proofs'], + ['carve', 'carves'], + ['valve', 'valves'], + ['looey', 'looies'], + ['thief', 'thieves'], + ['groove', 'grooves'], + ['pickaxe', 'pickaxes'], + ['passerby', 'passersby'] + ].forEach(function (rule) { + return pluralize.addIrregularRule(rule[0], rule[1]); + }); + + /** + * Pluralization rules. + */ + [ + [/s?$/i, 's'], + [/[^\u0000-\u007F]$/i, '$0'], + [/([^aeiou]ese)$/i, '$1'], + [/(ax|test)is$/i, '$1es'], + [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], + [/(e[mn]u)s?$/i, '$1s'], + [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], + [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], + [/(seraph|cherub)(?:im)?$/i, '$1im'], + [/(her|at|gr)o$/i, '$1oes'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], + [/sis$/i, 'ses'], + [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], + [/([^aeiouy]|qu)y$/i, '$1ies'], + [/([^ch][ieo][ln])ey$/i, '$1ies'], + [/(x|ch|ss|sh|zz)$/i, '$1es'], + [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], + [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], + [/(pe)(?:rson|ople)$/i, '$1ople'], + [/(child)(?:ren)?$/i, '$1ren'], + [/eaux$/i, '$0'], + [/m[ae]n$/i, 'men'], + ['thou', 'you'] + ].forEach(function (rule) { + return pluralize.addPluralRule(rule[0], rule[1]); + }); + + /** + * Singularization rules. + */ + [ + [/s$/i, ''], + [/(ss)$/i, '$1'], + [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], + [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], + [/ies$/i, 'y'], + [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], + [/\b(mon|smil)ies$/i, '$1ey'], + [/\b((?:tit)?m|l)ice$/i, '$1ouse'], + [/(seraph|cherub)im$/i, '$1'], + [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], + [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], + [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], + [/(test)(?:is|es)$/i, '$1is'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], + [/(alumn|alg|vertebr)ae$/i, '$1a'], + [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], + [/(matr|append)ices$/i, '$1ix'], + [/(pe)(rson|ople)$/i, '$1rson'], + [/(child)ren$/i, '$1'], + [/(eau)x?$/i, '$1'], + [/men$/i, 'man'] + ].forEach(function (rule) { + return pluralize.addSingularRule(rule[0], rule[1]); + }); + + /** + * Uncountable rules. + */ + [ + // Singular words with no plurals. + 'adulthood', + 'advice', + 'agenda', + 'aid', + 'aircraft', + 'alcohol', + 'ammo', + 'analytics', + 'anime', + 'athletics', + 'audio', + 'bison', + 'blood', + 'bream', + 'buffalo', + 'butter', + 'carp', + 'cash', + 'chassis', + 'chess', + 'clothing', + 'cod', + 'commerce', + 'cooperation', + 'corps', + 'debris', + 'diabetes', + 'digestion', + 'elk', + 'energy', + 'equipment', + 'excretion', + 'expertise', + 'firmware', + 'flounder', + 'fun', + 'gallows', + 'garbage', + 'graffiti', + 'hardware', + 'headquarters', + 'health', + 'herpes', + 'highjinks', + 'homework', + 'housework', + 'information', + 'jeans', + 'justice', + 'kudos', + 'labour', + 'literature', + 'machinery', + 'mackerel', + 'mail', + 'media', + 'mews', + 'moose', + 'music', + 'mud', + 'manga', + 'news', + 'only', + 'personnel', + 'pike', + 'plankton', + 'pliers', + 'police', + 'pollution', + 'premises', + 'rain', + 'research', + 'rice', + 'salmon', + 'scissors', + 'series', + 'sewage', + 'shambles', + 'shrimp', + 'software', + 'species', + 'staff', + 'swine', + 'tennis', + 'traffic', + 'transportation', + 'trout', + 'tuna', + 'wealth', + 'welfare', + 'whiting', + 'wildebeest', + 'wildlife', + 'you', + /pok[eé]mon$/i, + // Regexes. + /[^aeiou]ese$/i, // "chinese", "japanese" + /deer$/i, // "deer", "reindeer" + /fish$/i, // "fish", "blowfish", "angelfish" + /measles$/i, + /o[iu]s$/i, // "carnivorous" + /pox$/i, // "chickpox", "smallpox" + /sheep$/i + ].forEach(pluralize.addUncountableRule); + + return pluralize; +}); +}(pluralize)); - const initial = pointStart(node).offset; - const final = pointEnd(node).offset; +var plural = pluralize.exports; - const current = - node.lang || /^\s*([~`])\1{2,}/.test(value.slice(initial, final)) - ? 'fenced' - : 'indented'; +/** + * @param {string} d + * @returns {string} + */ +function color$1(d) { + return '\u001B[33m' + d + '\u001B[39m' +} - if (option === 'consistent') { - option = current; - } else if (option !== current) { - file.message('Code blocks should be ' + option, node); - } - }); - } -); +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + */ -var remarkLintCodeBlockStyle$1 = remarkLintCodeBlockStyle; +/** + * Continue traversing as normal + */ +const CONTINUE$1 = true; +/** + * Do not traverse this node’s children + */ +const SKIP$1 = 'skip'; +/** + * Stop traversing immediately + */ +const EXIT$1 = false; /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module definition-spacing - * @fileoverview - * Warn when consecutive whitespace is used in a definition. - * - * @example - * {"name": "ok.md"} - * - * [example domain]: http://example.com "Example Domain" - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * [example····domain]: http://example.com "Example Domain" - * - * @example - * {"name": "not-ok.md", "label": "output"} + * Visit children of tree which pass a test * - * 1:1-1:57: Do not use consecutive whitespace in definition labels + * @param tree Abstract syntax tree to walk + * @param test Test node, optional + * @param visitor Function to run for each node + * @param reverse Visit the tree in reverse order, defaults to false */ +const visitParents$1 = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + // @ts-expect-error no visitor given, so `visitor` is test. + visitor = test; + test = null; + } -const label = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/; + const is = convert(test); + const step = reverse ? -1 : 1; -const remarkLintDefinitionSpacing = lintRule( - 'remark-lint:definition-spacing', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file) => { - const value = String(file); + factory(tree, null, [])(); - visit$2(tree, (node) => { - if (node.type === 'definition' || node.type === 'footnoteDefinition') { - const start = pointStart(node).offset; - const end = pointEnd(node).offset; + /** + * @param {Node} node + * @param {number?} index + * @param {Array.} parents + */ + function factory(node, index, parents) { + /** @type {Object.} */ + // @ts-expect-error: hush + const value = typeof node === 'object' && node !== null ? node : {}; + /** @type {string|undefined} */ + let name; - if (typeof start === 'number' && typeof end === 'number') { - const match = value.slice(start, end).match(label); + if (typeof value.type === 'string') { + name = + typeof value.tagName === 'string' + ? value.tagName + : typeof value.name === 'string' + ? value.name + : undefined; - if (match && /[ \t\n]{2,}/.test(match[1])) { - file.message( - 'Do not use consecutive whitespace in definition labels', - node - ); - } + Object.defineProperty(visit, 'name', { + value: + 'node (' + + color$1(value.type + (name ? '<' + name + '>' : '')) + + ')' + }); } - } - }); - } -); -var remarkLintDefinitionSpacing$1 = remarkLintDefinitionSpacing; + return visit -/** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module fenced-code-flag - * @fileoverview - * Check fenced code block flags. - * - * Options: `Array.` or `Object`, optional. - * - * Providing an array is as passing `{flags: Array}`. - * - * The object can have an array of `'flags'` which are allowed: other flags - * will not be allowed. - * An `allowEmpty` field (`boolean`, default: `false`) can be set to allow - * code blocks without language flags. - * - * @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 - * - * @example - * {"name": "ok.md", "setting": {"allowEmpty": true}} - * - * ``` - * alpha() - * ``` - * - * @example - * {"name": "not-ok.md", "setting": {"allowEmpty": false}, "label": "input"} - * - * ``` - * alpha() - * ``` - * - * @example - * {"name": "not-ok.md", "setting": {"allowEmpty": false}, "label": "output"} - * - * 1:1-3:4: Missing code language flag - * - * @example - * {"name": "ok.md", "setting": ["alpha"]} - * - * ```alpha - * bravo() - * ``` - * - * @example - * {"name": "ok.md", "setting": {"flags":["alpha"]}} - * - * ```alpha - * bravo() - * ``` - * - * @example - * {"name": "not-ok.md", "setting": ["charlie"], "label": "input"} - * - * ```alpha - * bravo() - * ``` - * - * @example - * {"name": "not-ok.md", "setting": ["charlie"], "label": "output"} - * - * 1:1-3:4: Incorrect code language flag - */ + function visit() { + /** @type {ActionTuple} */ + let result = []; + /** @type {ActionTuple} */ + let subresult; + /** @type {number} */ + let offset; + /** @type {Array.} */ + let grandparents; -const fence = /^ {0,3}([~`])\1{2,}/; + if (!test || is(node, index, parents[parents.length - 1] || null)) { + result = toResult$1(visitor(node, parents)); -const remarkLintFencedCodeFlag = lintRule( - 'remark-lint:fenced-code-flag', - /** @type {import('unified-lint-rule').Rule} */ - (tree, file, option) => { - const value = String(file); - let allowEmpty = false; - /** @type {string[]} */ - let allowed = []; + if (result[0] === EXIT$1) { + return result + } + } - if (typeof option === 'object') { - if (Array.isArray(option)) { - allowed = option; - } else { - allowEmpty = Boolean(option.allowEmpty); + // @ts-expect-error looks like a parent. + if (node.children && result[0] !== SKIP$1) { + // @ts-expect-error looks like a parent. + offset = (reverse ? node.children.length : -1) + step; + // @ts-expect-error looks like a parent. + grandparents = parents.concat(node); - if (option.flags) { - allowed = option.flags; - } - } - } + // @ts-expect-error looks like a parent. + while (offset > -1 && offset < node.children.length) { + // @ts-expect-error looks like a parent. + subresult = factory(node.children[offset], offset, grandparents)(); - visit$2(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 (subresult[0] === EXIT$1) { + return subresult + } - if (!allowEmpty && fence.test(slice)) { - file.message('Missing code language flag', node); + offset = + typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } } + + return result } } - }); - } -); - -var remarkLintFencedCodeFlag$1 = remarkLintFencedCodeFlag; + } + ); /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module fenced-code-marker - * @fileoverview - * Warn for violating fenced code markers. - * - * Options: `` '`' ``, `'~'`, or `'consistent'`, default: `'consistent'`. - * - * `'consistent'` detects the first used fenced code marker style and warns - * when subsequent fenced code blocks use different styles. - * - * ## Fix - * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) - * formats fences using ``'`'`` (grave accent) by default. - * Pass - * [`fence: '~'`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify#optionsfence) - * to use `~` (tilde) instead. - * - * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) - * on how to automatically fix warnings for this rule. - * - * @example - * {"name": "ok.md"} - * - * Indented code blocks are not affected by this rule: - * - * bravo() - * - * @example - * {"name": "ok.md", "setting": "`"} - * - * ```alpha - * bravo() - * ``` - * - * ``` - * charlie() - * ``` - * - * @example - * {"name": "ok.md", "setting": "~"} - * - * ~~~alpha - * bravo() - * ~~~ - * - * ~~~ - * charlie() - * ~~~ - * - * @example - * {"name": "not-ok-consistent-tick.md", "label": "input"} - * - * ```alpha - * bravo() - * ``` - * - * ~~~ - * charlie() - * ~~~ - * - * @example - * {"name": "not-ok-consistent-tick.md", "label": "output"} - * - * 5:1-7:4: Fenced code should use `` ` `` as a marker - * - * @example - * {"name": "not-ok-consistent-tilde.md", "label": "input"} - * - * ~~~alpha - * bravo() - * ~~~ - * - * ``` - * charlie() - * ``` - * - * @example - * {"name": "not-ok-consistent-tilde.md", "label": "output"} - * - * 5:1-7:4: Fenced code should use `~` as a marker - * - * @example - * {"name": "not-ok-incorrect.md", "setting": "💩", "label": "output", "positionless": true} - * - * 1:1: Incorrect fenced code marker `💩`: use either `'consistent'`, `` '`' ``, or `'~'` + * @param {VisitorResult} value + * @returns {ActionTuple} */ +function toResult$1(value) { + if (Array.isArray(value)) { + return value + } -const remarkLintFencedCodeMarker = lintRule( - 'remark-lint:fenced-code-marker', - /** @type {import('unified-lint-rule').Rule} */ - (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$2(tree, 'code', (node) => { - const start = pointStart(node).offset; - - if (typeof start === 'number') { - const marker = contents - .slice(start, start + 4) - .replace(/^\s+/, '') - .charAt(0); - - // Ignore unfenced code blocks. - if (marker === '~' || marker === '`') { - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message( - 'Fenced code should use `' + - (option === '~' ? option : '` ` `') + - '` as a marker', - node - ); - } - } - } - }); + if (typeof value === 'number') { + return [CONTINUE$1, value] } -); -var remarkLintFencedCodeMarker$1 = remarkLintFencedCodeMarker; + return [value] +} + +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Parent} Parent + * @typedef {import('unist-util-is').Test} Test + * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult + */ /** - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @module file-extension - * @fileoverview - * Warn when the file extension differ from the preferred extension. - * - * Does not warn when given documents have no file extensions (such as - * `AUTHORS` or `LICENSE`). - * - * Options: `string`, default: `'md'` — Expected file extension. - * - * @example - * {"name": "readme.md"} - * - * @example - * {"name": "readme"} - * - * @example - * {"name": "readme.mkd", "label": "output", "positionless": true} - * - * 1:1: Incorrect extension: use `md` + * Visit children of tree which pass a test * - * @example - * {"name": "readme.mkd", "setting": "mkd"} + * @param tree Abstract syntax tree to walk + * @param test Test, optional + * @param visitor Function to run for each node + * @param reverse Fisit the tree in reverse, defaults to false */ +const visit = + /** + * @type {( + * ((tree: Tree, test: Check, visitor: Visitor, Check>>, reverse?: boolean) => void) & + * ((tree: Tree, visitor: Visitor>, reverse?: boolean) => void) + * )} + */ + ( + /** + * @param {Node} tree + * @param {Test} test + * @param {Visitor} visitor + * @param {boolean} [reverse] + */ + function (tree, test, visitor, reverse) { + if (typeof test === 'function' && typeof visitor !== 'function') { + reverse = visitor; + visitor = test; + test = null; + } -const remarkLintFileExtension = lintRule( - 'remark-lint:file-extension', - /** @type {import('unified-lint-rule').Rule} */ - (_, file, option = 'md') => { - const ext = file.extname; + visitParents$1(tree, test, overload, reverse); - if (ext && ext.slice(1) !== option) { - file.message('Incorrect extension: use `' + option + '`'); + /** + * @param {Node} node + * @param {Array.} parents + */ + function overload(node, parents) { + const parent = parents[parents.length - 1]; + return visitor( + node, + parent ? parent.children.indexOf(node) : null, + parent + ) + } } - } -); - -var remarkLintFileExtension$1 = remarkLintFileExtension; + ); /** * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT - * @module final-definition + * @module list-item-bullet-indent * @fileoverview - * Warn when definitions are placed somewhere other than at the end of - * the file. + * Warn when list item bullets are indented. + * + * ## Fix + * + * [`remark-stringify`](https://github.com/remarkjs/remark/tree/HEAD/packages/remark-stringify) + * removes all indentation before bullets. + * + * See [Using remark to fix your Markdown](https://github.com/remarkjs/remark-lint#using-remark-to-fix-your-markdown) + * on how to automatically fix warnings for this rule. * * @example * {"name": "ok.md"} * * Paragraph. * - * [example]: http://example.com "Example Domain" + * * List item + * * List item * * @example * {"name": "not-ok.md", "label": "input"} * * Paragraph. * - * [example]: http://example.com "Example Domain" - * - * Another paragraph. + * ·* List item + * ·* List item * * @example * {"name": "not-ok.md", "label": "output"} * - * 3:1-3:47: Move definitions to the end of the file (after the node at line `5`) - * - * @example - * {"name": "ok-comments.md"} - * - * Paragraph. - * - * [example-1]: http://example.com/one/ - * - * - * - * [example-2]: http://example.com/two/ + * 3:2: Incorrect indentation before bullet: remove 1 space + * 4:2: Incorrect indentation before bullet: remove 1 space */ -const remarkLintFinalDefinition = lintRule( - 'remark-lint:final-definition', +const remarkLintListItemBulletIndent = lintRule$F( + 'remark-lint:list-item-bullet-indent', /** @type {import('unified-lint-rule').Rule} */ (tree, file) => { - let last = 0; + visit(tree, 'list', (list, _, grandparent) => { + let index = -1; + + while (++index < list.children.length) { + const item = list.children[index]; - visit$2( - tree, - (node) => { - // Ignore generated and HTML comment nodes. if ( - node.type === 'root' || - generated(node) || - (node.type === 'html' && /^\s* + * + * [example-2]: http://example.com/two/ + */ - ch = state.input.charCodeAt(state.position); +const remarkLintFinalDefinition = lintRule$j( + 'remark-lint:final-definition', + /** @type {import('unified-lint-rule').Rule} */ + (tree, file) => { + let last = 0; - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } + visit( + tree, + (node) => { + // Ignore generated and HTML comment nodes. + if ( + node.type === 'root' || + generated(node) || + (node.type === 'html' && /^\s*\n\n' - } - } - - return '\n\n' - } -} - -/** - * @callback Map - * @param {string} value - * @param {number} line - * @param {boolean} blank - * @returns {string} - */ - -const eol = /\r?\n|\r/g; - -/** - * @param {string} value - * @param {Map} map - * @returns {string} - */ -function indentLines(value, map) { - /** @type {Array.} */ - const result = []; - let start = 0; - let line = 0; - /** @type {RegExpExecArray|null} */ - let match; - - while ((match = eol.exec(value))) { - one(value.slice(start, match.index)); - result.push(match[0]); - start = match.index + match[0].length; - line++; - } - - one(value.slice(start)); - - return result.join('') - - /** - * @param {string} value - */ - function one(value) { - result.push(map(value, line, !value)); - } -} - -/** - * @typedef {import('mdast').ListItem} ListItem - * @typedef {import('mdast').List} List - * @typedef {import('../util/indent-lines.js').Map} Map - * @typedef {import('../types.js').Options} Options - * @typedef {import('../types.js').Handle} Handle - */ - -/** - * @type {Handle} - * @param {ListItem} node - */ -function listItem(node, parent, context) { - const listItemIndent = checkListItemIndent(context); - /** @type {string} */ - let bullet = checkBullet(context); - - if (parent && parent.type === 'list' && parent.ordered) { - bullet = - (typeof parent.start === 'number' && parent.start > -1 - ? parent.start - : 1) + - (context.options.incrementListMarker === false - ? 0 - : parent.children.indexOf(node)) + - '.'; - } - - let size = bullet.length + 1; - - if ( - listItemIndent === 'tab' || - (listItemIndent === 'mixed' && - ((parent && 'spread' in parent && parent.spread) || node.spread)) - ) { - size = Math.ceil(size / 4) * 4; - } - - const exit = context.enter('listItem'); - const value = indentLines(containerFlow(node, context), map); - exit(); - - return value - - /** @type {Map} */ - function map(line, index, blank) { - if (index) { - return (blank ? '' : ' '.repeat(size)) + line - } - - return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line - } -} - /** * @typedef {import('mdast').ListItem} ListItem * @typedef {import('mdast').Paragraph} Paragraph @@ -65829,7 +61220,7 @@ function gfmToMarkdown(options) { function remarkGfm(options = {}) { const data = this.data(); - add('micromarkExtensions', gfm$1(options)); + add('micromarkExtensions', gfm(options)); add('fromMarkdownExtensions', gfmFromMarkdown); add('toMarkdownExtensions', gfmToMarkdown(options)); @@ -65848,26 +61239,10 @@ function remarkGfm(options = {}) { } } -var remarkGfm$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': remarkGfm -}); - -var require$$6 = /*@__PURE__*/getAugmentedNamespace(remarkGfm$1); - // To aid in future maintenance, this layout closely matches remark-cli/cli.js. -// https://github.com/remarkjs/remark/blob/master/packages/remark-cli/cli.js - -const start = unifiedArgs; -const extensions = markdownExtensions; -const processor = remark; -const proc = require$$3; -const cli = require$$4; -const lintNode = require$$5; -const gfm = require$$6; - -start({ - processor: processor().use(gfm).use(lintNode), + +args({ + processor: remark().use(remarkGfm).use(remarkPresetLintNode), name: proc.name, description: cli.description, version: [ @@ -65879,8 +61254,6 @@ start({ packageField: proc.name + 'Config', rcName: '.' + proc.name + 'rc', ignoreName: '.' + proc.name + 'ignore', - extensions: extensions, + extensions: markdownExtensions, detectConfig: false, }); - -module.exports = cliEntry; diff --git a/tools/node-lint-md-cli-rollup/package-lock.json b/tools/node-lint-md-cli-rollup/package-lock.json index baf5c94d622b90..3cfe12696fad45 100644 --- a/tools/node-lint-md-cli-rollup/package-lock.json +++ b/tools/node-lint-md-cli-rollup/package-lock.json @@ -579,11 +579,11 @@ } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "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==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -740,19 +740,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-is-element": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz", @@ -799,15 +786,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-html/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-whitespace": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", @@ -1184,26 +1162,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-find-and-replace/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", @@ -2133,51 +2091,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.0.0.tgz", @@ -2209,51 +2122,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.0.0.tgz", @@ -2286,57 +2154,62 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-code-block-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", + "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", + "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-checkbox-content-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.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-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-definition-spacing": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", + "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@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-content-indent/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", "vfile": "^5.0.0" }, "funding": { @@ -2344,10 +2217,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style": { + "node_modules/remark-lint-fenced-code-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.0.0.tgz", - "integrity": "sha512-xZMfFeaMOb5OIM4SrNz3QTRV3u5g3/+e6Oq40A3Apwd+a9Kx49lZbGxl8vfqaczP89PTNanm2e4OqqRsCen4Mg==", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", + "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2361,7 +2234,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2376,59 +2249,75 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", + "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", + "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-code-block-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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/remark-lint-code-block-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-file-extension": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", + "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-code-block-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-file-extension/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing": { + "node_modules/remark-lint-final-definition": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz", - "integrity": "sha512-3LxU7lwCpfPstldcGly2ULb8knH4IOqZHoABT2KyKFw3rRFUCAEUBSl0k5eetnXXNc/X4NlHmnyjIyzhyl4PhA==", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", + "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", "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" }, @@ -2437,7 +2326,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { + "node_modules/remark-lint-final-definition/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2452,61 +2341,44 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", + "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-definition-spacing/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-final-newline/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag": { + "node_modules/remark-lint-first-heading-level": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.0.0.tgz", - "integrity": "sha512-wvyaTvQ5F78yuw4BDQsneTCvkxHGAjq0OuDQU4pawAZMYO3qFJlau7qoLppgquY1D+jBakejMT/yKnoQgRf1dQ==", + "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", + "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", "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": { @@ -2514,7 +2386,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { + "node_modules/remark-lint-first-heading-level/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2529,60 +2401,48 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", + "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker": { + "node_modules/remark-lint-heading-style": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz", - "integrity": "sha512-x3wr1+22Atr72Z7+dUS8cqwuz8m8d4UgCAfBTNO+E6pRLVeCnVMvEtuJbDI5UqBlqvkLGlNofV4lJZQvrZUxqQ==", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", + "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", "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-position": "^4.0.0", + "unist-util-generated": "^2.0.0", "unist-util-visit": "^4.0.0" }, "funding": { @@ -2590,7 +2450,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { + "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2605,66 +2465,56 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { + "node_modules/remark-lint-list-item-bullet-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", + "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-fenced-code-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-file-extension": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz", - "integrity": "sha512-fZ0nDGyuZSgkrakLKl+cjqXwOT7iAz0wfSbrkCabYW3DdN6X1QYeSlMtHPizGXuri+AZhVkrUnujSn+9P4hJ2w==", + "node_modules/remark-lint-list-item-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", + "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", "dependencies": { "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", "unified": "^10.0.0", - "unified-lint-rule": "^2.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-file-extension/node_modules/unified-lint-rule": { + "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2679,10 +2529,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition": { + "node_modules/remark-lint-maximum-line-length": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.0.0.tgz", - "integrity": "sha512-RHR8aku0jCH4AoHVepw9b0tCmiBevMtLPG1l5FKhbkLtBWk9GRRryuD3GExxsInEUN2P/a6FhvcBBtRSJbIfIA==", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", + "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -2696,7 +2546,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/unified-lint-rule": { + "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2711,66 +2561,92 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-auto-link-without-protocol": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", + "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", + "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-final-definition/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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/remark-lint-final-definition/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", + "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-final-definition/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz", - "integrity": "sha512-3u1IbgVfUN5Qgid8iqc1qlZhzscs4YPu8mwyahvLWVKMkBtoRWjDIVL6+CXcPPoUB2k3p+zuZ5oaE4yfO5Pb4w==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", + "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", "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" + "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-newline/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2785,15 +2661,17 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level": { + "node_modules/remark-lint-no-duplicate-definitions": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.0.0.tgz", - "integrity": "sha512-SMvBHO4HJd1ZkFDfx7OikJAoq5FQe+nFPm3n4DeAKIgM1FywaC7tD7ShwTRUL2DJMzdPjlta7UQRtTryAQGj+w==", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", + "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", "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": { @@ -2801,7 +2679,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2816,60 +2694,50 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-file-name-articles": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", + "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-first-heading-level/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-file-name-articles/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.0.0.tgz", - "integrity": "sha512-TNTI32Va6hE33pTYC6iqn4NvyZHqCULsOKKLnAzBocFFFIYuaNUdfKyVc9wknAAutbQLqApr8tgs1mLHtHm9Fw==", + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", + "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", "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" + "unified-lint-rule": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2884,61 +2752,47 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", + "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-hard-break-spaces/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz", - "integrity": "sha512-pPiXG24yXER7xXZr+J11iuMd1DXa71m6Cx7jqUO5z1Ptc7WkolcW6lNRFG76BCOJp8Jp6vH5eNITuQxYa0AnJw==", + "node_modules/remark-lint-no-heading-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", + "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", "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": { @@ -2946,7 +2800,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-heading-content-indent/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -2961,51 +2815,49 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-heading-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", + "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-heading-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent": { + "node_modules/remark-lint-no-inline-padding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.0.0.tgz", - "integrity": "sha512-b/U3wAJPE00xGQGYBvjPPsdXsBPJxUvITYgAZee7aA2sGEiflMGmg90anS2sJZEAoD4XtNzp96bPaY6QLN89dQ==", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", + "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", "dependencies": { "@types/mdast": "^3.0.0", - "pluralize": "^8.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": { @@ -3013,7 +2865,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-inline-padding/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -3028,53 +2880,50 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-literal-urls": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", + "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-list-item-bullet-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-literal-urls/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent": { + "node_modules/remark-lint-no-multiple-toplevel-headings": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz", - "integrity": "sha512-z7doG/aJCy8ivmfbE/cSm9HOpIeUaV5zZHMqSsZ6XZ+wXIj4wtMFVhI7fsAVs5pAB1gzSvZQuwJOfSs2//Fw2g==", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", + "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", "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-stringify-position": "^3.0.0", "unist-util-visit": "^4.0.0" }, "funding": { @@ -3082,7 +2931,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -3097,61 +2946,77 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-no-shell-dollars": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", + "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", + "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-list-item-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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/remark-lint-list-item-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", + "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-list-item-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length": { + "node_modules/remark-lint-no-shortcut-reference-link": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.0.0.tgz", - "integrity": "sha512-0x5TsUDlc4IDPUObNjVtcQxzI1JokUwbVpr22akWypnZaX9QMIL+Cp1OXrKRknZVU3rIndt4QCNnjMEYKezn1g==", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", + "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", "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": { @@ -3159,7 +3024,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -3174,1452 +3039,54 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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-auto-link-without-protocol": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.0.0.tgz", - "integrity": "sha512-qeJhWZcO0wnavTdpLU6M1q5RBfo4nZnYmzASoSCmIj/ZxIinluXLmLcMHC2Ol46egWdvwDNpr3V0dJP79fiJMQ==", - "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-auto-link-without-protocol/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-auto-link-without-protocol/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.0.0.tgz", - "integrity": "sha512-6m1KZE8X2OhNV9wpEPVUfFxdzgVD523unRkstlRedKC3ONLlqP/CIliAOITRmIGuUxXVjyD7mDC892bFJnJTfw==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.0.0.tgz", - "integrity": "sha512-gP1b3lM+oemvA0WOC5HbvkjESG2BiZHL8ZDSX+wbg/2+7zu14rOmAAMiUOlk/CxbusttwJxsz8a/Wn1dEK/jPg==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.0.0.tgz", - "integrity": "sha512-6VOGPegh2ZQ0d9yronmhNXhg2wLYA5litT7bC1ljg2LQwMTIjYOgJbJsQJSKWD+FiHuqVhdWvXHzyTbFCch8Aw==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.0.0.tgz", - "integrity": "sha512-PgyJXEsZDT2r1bvtwaChwTjYKPxo47/OxpJmiozwLcnPsBNbsDtrH+W5gIjNkvkENNcIQD48WZ9jIwyJiskBng==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.0.0.tgz", - "integrity": "sha512-o7yz//+vel7IFDoZ/M0BmOS4sVE3sTAFOkeYlH44meGbNnEudr+TKKa0lwopMqZHKhXgUPSayCq+D5dgRO6JLA==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-file-name-outer-dashes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.0.0.tgz", - "integrity": "sha512-SZS9FeGLty0wOBLTKyboDUZpjIKMihH88ZvgdqCUgIiDlZ9/72JKtZv43UuMnMVRgKJWQCRyZtT3nSNw3HwM+g==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-heading-content-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.0.0.tgz", - "integrity": "sha512-2SljHUYTN83EN5DEZrl7WH4ibmUxai6gONhZaQrQOJyGUO2ReZj5Zdn4xi79NHpORSzCzjn2tSXPB6yL3AhJag==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.0.0.tgz", - "integrity": "sha512-t4MWiMjPH6TOdM8d5i5Eik6NVrOokoYy6z0GnuI7PNrmNmVVIV9CVBJU94aSXZ7friKx5ucvUEw6NhXIRcNtOw==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-heading-indent/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.0.0.tgz", - "integrity": "sha512-dugEtHudM/UVQYzTbQoWy4aeG9Micd9g6O/uzN59sIMM8Xb+Srbv/p5/2JNtJWej9PmzINldE0AHjpuB8NiNLA==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-inline-padding/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.0.0.tgz", - "integrity": "sha512-P+9VxemAeSGWGMmFGKcQMIsPgVDaoXnQLl0Bx/TuBms0Favb7XI3ecii/HjjDeks3zlrxlVhzvEkHBk1uH1tdA==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-literal-urls/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.0.0.tgz", - "integrity": "sha512-HzPTSy9nu9RHSIUfZCbxEa7KP4CoKNbfI4SW8txh7KnYwr6vC6QgqXPF77z1sIpiSgD9X2z0LwMk0DBk1v3bmA==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.0.0.tgz", - "integrity": "sha512-jygHSWi+w7C/VT6+oKIMHhrnMlURWF+ohjdtkxDc/C/7FXWyHg1nJR2t+c+j5Dmirz3oSfInSGw/jUfYP048GQ==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-shell-dollars/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.0.0.tgz", - "integrity": "sha512-PyB5xkCd8moJf1MrmIXlBTSXZ8pkjXtdrmHzYba7La8S/6TKN2+LFrfN9daLG9pVsD0DSBAlvbajM/MBFh2DfQ==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.0.0.tgz", - "integrity": "sha512-SbPrP6ZfRA2IJ++L7xAivXl7PJdOMzBUlhVwlt5PsWJKWHX07TIB02GGAiMnSOLN0FnUCvgF2c5we6eU1K3plA==", - "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/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", - "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", - "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-no-table-indentation/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-table-indentation/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-tabs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", - "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-tabs/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.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-undefined-references": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", - "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-undefined-references/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "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-undefined-references/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", - "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", - "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-unused-definitions/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-no-unused-definitions/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-table-indentation": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.0.0.tgz", + "integrity": "sha512-S1u4DHBS75xAcM/u1zsYize/0uB2u+xAoHbstN3JmFWsTRj5LUSppwkSrWsPk/3y9/jHJAQ4XSihwH7C95EObQ==", "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-ordered-list-marker-style/node_modules/unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "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/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.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-ordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", - "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", - "dependencies": { - "escape-string-regexp": "^4.0.0", - "unified-lint-rule": "^1.0.2", - "unist-util-position": "^3.1.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.1" - } - }, - "node_modules/remark-lint-rule-style": { + "node_modules/remark-lint-no-tabs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", - "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.0.0.tgz", + "integrity": "sha512-iK5gXQLoBchviHRNNDIWKQsMAbsLIZzK2ZKo0ywzNBHBckd8fy+wIP6RUosb6p/RBHtq1JG1lUC5ADg1PSj0tQ==", "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-rule-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -4634,60 +3101,57 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "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-rule-style/node_modules/unist-util-visit": { + "node_modules/remark-lint-no-undefined-references": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.0.0.tgz", + "integrity": "sha512-HI68vLoTTCXDADAp8LQ6RqCuf9QHX7bSaaqKI1V82EyvizxgnFtvN46XIi1uiDTN+Jv/KzAAGaFrofV8OJknBA==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker": { + "node_modules/remark-lint-no-unused-definitions": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", - "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.0.0.tgz", + "integrity": "sha512-1LqEZx0IJx59ezXA9e0qq6h5W3n9I6oiBm3Kl+HvmXTFl1OME6f8SVFwtDbt9EaGmf+3NL+T24cWIhZWjmZ0bA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", + "unist-util-generated": "^2.0.0", "unist-util-visit": "^4.0.0" }, "funding": { @@ -4695,7 +3159,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { + "node_modules/remark-lint-no-unused-definitions/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -4710,60 +3174,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-cell-padding": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", - "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-HDg5Fyg3tENtmI5SpEL34TvEjIiVX4GhuOjU8aOGF7T4SMG69kLyx+IWMKhg39pBw+3h4lG6FDC8IfqYXONNLg==", "dependencies": { "@types/mdast": "^3.0.0", - "@types/unist": "^2.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" }, @@ -4772,7 +3191,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -4787,55 +3206,37 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-prohibited-strings": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-3.0.0.tgz", + "integrity": "sha512-Aw21KVeoOiDte6dNfeTfTgjKV19yWXpPjLxfJ3ShC22/r97gkGdOo4dnuwyEEAfKhr3uimtSf3rRQyGSudY5tQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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-table-cell-padding/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-prohibited-strings/node_modules/unified-lint-rule": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", + "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "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": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", - "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", + "node_modules/remark-lint-rule-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz", + "integrity": "sha512-KHSPHW/7YCl9gHFsqqWOqIkJYmPuxTu/5G3Ks3lG8seBDf1bg+lPPUg5TigsKa/E7juVgfTR7AhK6P+lYAp4EA==", "dependencies": { "@types/mdast": "^3.0.0", "unified": "^10.0.0", @@ -4848,7 +3249,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unified-lint-rule": { + "node_modules/remark-lint-rule-style/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -4863,60 +3264,46 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-strong-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.0.0.tgz", + "integrity": "sha512-nNyW3tKl0rEf2j784HzVWChAomCxzld+v2A5R5r5Zw5VogUNikZA7ZRwy51HsmhqiTWHArVGeyuvCPrpkTDZ0A==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-table-pipes/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", - "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", + "node_modules/remark-lint-table-cell-padding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.0.0.tgz", + "integrity": "sha512-jYBhfu/x0bEXt+wilHnm76q6wHnPVW2v2EuTdvAsxqkVtlvWSl9BbO4bb/L7jKqwlfiTK8E/luHKZuPiNWlucw==", "dependencies": { "@types/mdast": "^3.0.0", + "@types/unist": "^2.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" }, @@ -4925,7 +3312,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified-lint-rule": { + "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", @@ -4940,45 +3327,63 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-table-pipes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.0.0.tgz", + "integrity": "sha512-wOIAwkPAEDArKYMEpDylycGOCCt9hUxfgirgYCaHujCvyg484GWO+n+Moabgd19O9ZjuYr2P7akuOocsTh2z3g==", + "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-unordered-list-marker-style/node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "node_modules/remark-lint-table-pipes/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", + "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/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.0.0.tgz", + "integrity": "sha512-iwliMh7GzTdFAWKnVSabpdfcI6qoDE5PPX8hacDIZNbTe4xuUVFbopGCzsTlLiFQkTn6m3ePwOQn+lIbFofKDQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@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-unordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5000,9 +3405,9 @@ } }, "node_modules/remark-preset-lint-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-3.0.0.tgz", - "integrity": "sha512-H1YwlVi/K0xmFT2JaVqnySNHdW/gqd9EQRbGVcH2mkxLNLdO+FIawkSU+UVYIhsm63pKAkHFW8HEtdoEAkNxOg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-3.0.1.tgz", + "integrity": "sha512-L7yhho9q9vmpsfMHO2gRKFNj36106iFM4KpodE+3k3rGg5dcmhV+zcsftNh5NGzbKKKYsGQj9C5XxCR/0NwKDg==", "dependencies": { "js-yaml": "^4.0.0", "remark-lint-blockquote-indentation": "^3.0.0", @@ -5028,7 +3433,7 @@ "remark-lint-no-table-indentation": "^4.0.0", "remark-lint-no-tabs": "^3.0.0", "remark-lint-no-trailing-spaces": "^2.0.1", - "remark-lint-prohibited-strings": "^2.0.0", + "remark-lint-prohibited-strings": "^3.0.0", "remark-lint-rule-style": "^3.0.0", "remark-lint-strong-marker": "^3.0.0", "remark-lint-table-cell-padding": "^4.0.0", @@ -5058,42 +3463,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-node/node_modules/unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-preset-lint-recommended": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.0.0.tgz", @@ -5180,15 +3549,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-preset-lint-recommended/node_modules/unist-util-visit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", @@ -5216,19 +3576,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended/node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-stringify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.0.tgz", @@ -5265,9 +3612,9 @@ } }, "node_modules/rollup": { - "version": "2.52.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", - "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", + "version": "2.56.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", + "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -5576,18 +3923,18 @@ } }, "node_modules/unist-util-is": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", - "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -5606,13 +3953,13 @@ } }, "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5620,12 +3967,12 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" }, "funding": { "type": "opencollective", @@ -5653,9 +4000,13 @@ } }, "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -6209,9 +4560,9 @@ } }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "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==" }, "estree-walker": { "version": "2.0.2", @@ -6323,17 +4674,6 @@ "vfile": "^5.0.0", "vfile-location": "^4.0.0", "web-namespaces": "^2.0.0" - }, - "dependencies": { - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } - } } }, "hast-util-is-element": { @@ -6368,13 +4708,6 @@ "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "unist-util-is": "^5.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - } } }, "hast-util-whitespace": { @@ -6637,16 +4970,6 @@ "unist-util-visit-parents": "^4.0.0" }, "dependencies": { - "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==" - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, "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", @@ -7229,35 +5552,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7283,35 +5577,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7338,44 +5603,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -7402,35 +5629,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7456,35 +5654,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7511,35 +5680,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7551,48 +5691,19 @@ "@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" - }, - "dependencies": { - "unified-lint-rule": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "unified-lint-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" } } } @@ -7643,35 +5754,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7720,30 +5802,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7770,35 +5828,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7825,30 +5854,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7874,30 +5879,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7925,35 +5906,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -7980,35 +5932,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8036,35 +5959,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8092,44 +5986,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -8158,35 +6014,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8214,35 +6041,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8340,35 +6138,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8396,35 +6165,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8451,30 +6191,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8502,35 +6218,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8551,41 +6238,12 @@ "unified-lint-rule": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.0.tgz", - "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", - "requires": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", + "integrity": "sha512-3V+eyHZR+PAeKavQrrvSacXq83C3TGVDZJpTZ8+MTlHZmS4arL1ul5U4WRymok0zobAsMiri42bJj0rCHIlIjA==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" } } } @@ -8612,30 +6270,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8661,30 +6295,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8710,30 +6320,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8760,44 +6346,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -8822,15 +6370,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -8867,44 +6406,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -8930,30 +6431,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -8980,48 +6457,32 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, "remark-lint-prohibited-strings": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-2.0.0.tgz", - "integrity": "sha512-N94RTdAT4qmYNBczNZEZbnpGvtl9GiLPO/xdG569IpbbtNFh5l+Nf5Mx5B1VeJMC8/hAR7wShag03Zf29MOO6Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-3.0.0.tgz", + "integrity": "sha512-Aw21KVeoOiDte6dNfeTfTgjKV19yWXpPjLxfJ3ShC22/r97gkGdOo4dnuwyEEAfKhr3uimtSf3rRQyGSudY5tQ==", "requires": { - "escape-string-regexp": "^4.0.0", - "unified-lint-rule": "^1.0.2", - "unist-util-position": "^3.1.0", - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.1" + "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" + }, + "dependencies": { + "unified-lint-rule": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.0.1.tgz", + "integrity": "sha512-2RzZuuuWW+ifftM0zd/ZEng0Hb5lah+Zi+ZL/ybj8BrLO/TH2aQAMYvG+iC95aCg2FkWu/pcvVvHqsh2UMmzPg==", + "requires": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + } + } } }, "remark-lint-rule-style": { @@ -9046,35 +6507,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9100,35 +6532,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9155,35 +6558,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9209,35 +6583,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9264,35 +6609,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9307,9 +6623,9 @@ } }, "remark-preset-lint-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-3.0.0.tgz", - "integrity": "sha512-H1YwlVi/K0xmFT2JaVqnySNHdW/gqd9EQRbGVcH2mkxLNLdO+FIawkSU+UVYIhsm63pKAkHFW8HEtdoEAkNxOg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-3.0.1.tgz", + "integrity": "sha512-L7yhho9q9vmpsfMHO2gRKFNj36106iFM4KpodE+3k3rGg5dcmhV+zcsftNh5NGzbKKKYsGQj9C5XxCR/0NwKDg==", "requires": { "js-yaml": "^4.0.0", "remark-lint-blockquote-indentation": "^3.0.0", @@ -9335,7 +6651,7 @@ "remark-lint-no-table-indentation": "^4.0.0", "remark-lint-no-tabs": "^3.0.0", "remark-lint-no-trailing-spaces": "^2.0.1", - "remark-lint-prohibited-strings": "^2.0.0", + "remark-lint-prohibited-strings": "^3.0.0", "remark-lint-rule-style": "^3.0.0", "remark-lint-strong-marker": "^3.0.0", "remark-lint-table-cell-padding": "^4.0.0", @@ -9357,30 +6673,6 @@ "unified": "^10.0.0", "vfile": "^5.0.0" } - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-visit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", - "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", - "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } } } }, @@ -9450,11 +6742,6 @@ "vfile-message": "^3.0.0" } }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, "unist-util-visit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", @@ -9473,15 +6760,6 @@ "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } - }, - "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } } } }, @@ -9511,9 +6789,9 @@ } }, "rollup": { - "version": "2.52.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", - "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", + "version": "2.56.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", + "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -9726,14 +7004,14 @@ } }, "unist-util-is": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", - "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" }, "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" }, "unist-util-stringify-position": { "version": "3.0.0", @@ -9744,22 +7022,22 @@ } }, "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz", + "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz", + "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" } }, "util-deprecate": { @@ -9779,9 +7057,13 @@ } }, "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } }, "vfile-message": { "version": "3.0.2", diff --git a/tools/node-lint-md-cli-rollup/package.json b/tools/node-lint-md-cli-rollup/package.json index 0602d902c2a37e..56ad44b391eee2 100644 --- a/tools/node-lint-md-cli-rollup/package.json +++ b/tools/node-lint-md-cli-rollup/package.json @@ -19,6 +19,6 @@ "main": "dist/index.js", "scripts": { "build": "npx rollup -c", - "build-node": "npm run build && npx shx cp dist/index.js ../lint-md.js" + "build-node": "npm run build && npx shx cp dist/index.mjs ../lint-md.mjs" } } diff --git a/tools/node-lint-md-cli-rollup/rollup.config.js b/tools/node-lint-md-cli-rollup/rollup.config.js index 531103d729dfd8..0a2b2098e69dd6 100644 --- a/tools/node-lint-md-cli-rollup/rollup.config.js +++ b/tools/node-lint-md-cli-rollup/rollup.config.js @@ -7,22 +7,18 @@ const json = require('@rollup/plugin-json'); module.exports = { input: 'src/cli-entry.mjs', output: { - file: 'dist/index.js', - format: 'cjs', + file: 'dist/index.mjs', + format: 'es', sourcemap: false, exports: 'none', }, external: [ - 'stream', - 'path', - 'module', - 'util', - 'tty', - 'os', - 'fs', - 'fsevents', - 'events', - 'assert', + 'node:events', + 'node:fs', + 'node:path', + 'node:process', + 'node:stream', + 'node:url', ], plugins: [ { @@ -47,7 +43,7 @@ module.exports = { json({ preferConst: true }), - nodeResolve(), // tells Rollup how to find date-fns in node_modules + nodeResolve({ exportConditions: ['node'] }), commonjs(), { name: 'banner', diff --git a/vcbuild.bat b/vcbuild.bat index 202b0ecb7e69e8..f5f3fa4226bb6e 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -674,7 +674,7 @@ for /D %%D IN (doc\*) do ( set "lint_md_files="%%F" !lint_md_files!" ) ) -%node_exe% tools\lint-md.js -q -f %lint_md_files% +%node_exe% tools\lint-md.mjs -q -f %lint_md_files% ENDLOCAL goto exit From 66400374de6f13c4f28682f13a7c0121ceb1cfbf Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Thu, 19 Aug 2021 21:40:18 +0200 Subject: [PATCH 18/33] util: expose toUSVString Expose toUSVString so it can be used by user libraries. PR-URL: https://github.com/nodejs/node/pull/39814 Refs: https://github.com/nodejs/undici/pull/986 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- doc/api/util.md | 12 ++++++++++++ lib/internal/url.js | 21 ++++++--------------- lib/internal/util.js | 18 ++++++++++++++++++ lib/util.js | 4 +++- test/parallel/test-util.js | 2 ++ 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/doc/api/util.md b/doc/api/util.md index 41522bf8886b26..8bcc9ebda10599 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -2490,6 +2490,18 @@ const util = require('util'); util.log('Timestamped message.'); ``` + +### `util.toUSVString(string)` + + +* `string` {string} + +Returns the `string` after replacing any surrogate code points +(or equivalently, any unpaired surrogate code units) with the +Unicode "replacement character" U+FFFD. + [Common System Errors]: errors.md#errors_common_system_errors [Custom inspection functions on objects]: #util_custom_inspection_functions_on_objects [Custom promisified functions]: #util_custom_promisified_functions diff --git a/lib/internal/url.js b/lib/internal/url.js index 378248b9486b52..4d9e978f8305ce 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -19,7 +19,6 @@ const { ReflectApply, ReflectGetOwnPropertyDescriptor, ReflectOwnKeys, - RegExpPrototypeExec, String, StringPrototypeCharCodeAt, StringPrototypeIncludes, @@ -40,7 +39,12 @@ const { isHexTable } = require('internal/querystring'); -const { getConstructorOf, removeColors } = require('internal/util'); +const { + getConstructorOf, + removeColors, + toUSVString, +} = require('internal/util'); + const { codes: { ERR_ARG_NOT_ITERABLE, @@ -82,7 +86,6 @@ const { domainToASCII: _domainToASCII, domainToUnicode: _domainToUnicode, encodeAuth, - toUSVString: _toUSVString, parse, setURLConstructor, URL_FLAGS_CANNOT_BE_BASE, @@ -139,18 +142,6 @@ const IteratorPrototype = ObjectGetPrototypeOf( ObjectGetPrototypeOf([][SymbolIterator]()) ); -const unpairedSurrogateRe = - /(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/; -function toUSVString(val) { - const str = `${val}`; - // As of V8 5.5, `str.search()` (and `unpairedSurrogateRe[@@search]()`) are - // slower than `unpairedSurrogateRe.exec()`. - const match = RegExpPrototypeExec(unpairedSurrogateRe, str); - if (!match) - return str; - return _toUSVString(str, match.index); -} - // Refs: https://html.spec.whatwg.org/multipage/browsers.html#concept-origin-opaque const kOpaqueOrigin = 'null'; diff --git a/lib/internal/util.js b/lib/internal/util.js index acaffb9ff27cf4..ba98a41e406cfe 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -17,6 +17,7 @@ const { Promise, ReflectApply, ReflectConstruct, + RegExpPrototypeExec, RegExpPrototypeTest, SafeMap, SafeSet, @@ -27,6 +28,10 @@ const { SymbolFor, } = primordials; +const { + toUSVString: _toUSVString, +} = internalBinding('url'); + const { hideStackFrames, codes: { @@ -52,6 +57,18 @@ const experimentalWarnings = new SafeSet(); const colorRegExp = /\u001b\[\d\d?m/g; // eslint-disable-line no-control-regex +const unpairedSurrogateRe = + /(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/; +function toUSVString(val) { + const str = `${val}`; + // As of V8 5.5, `str.search()` (and `unpairedSurrogateRe[@@search]()`) are + // slower than `unpairedSurrogateRe.exec()`. + const match = RegExpPrototypeExec(unpairedSurrogateRe, str); + if (!match) + return str; + return _toUSVString(str, match.index); +} + let uvBinding; function lazyUv() { @@ -497,6 +514,7 @@ module.exports = { sleep, spliceOne, structuredClone, + toUSVString, removeColors, // Symbol used to customize promisify conversion diff --git a/lib/util.js b/lib/util.js index a8d9a356480a35..e3f151541ee2fb 100644 --- a/lib/util.js +++ b/lib/util.js @@ -72,7 +72,8 @@ const { deprecate, getSystemErrorMap, getSystemErrorName: internalErrorName, - promisify + promisify, + toUSVString, } = require('internal/util'); let internalDeepEqual; @@ -368,6 +369,7 @@ module.exports = { isPrimitive, log, promisify, + toUSVString, TextDecoder, TextEncoder, types diff --git a/test/parallel/test-util.js b/test/parallel/test-util.js index 204b2bca5b9f3b..42218be8581579 100644 --- a/test/parallel/test-util.js +++ b/test/parallel/test-util.js @@ -148,6 +148,8 @@ assert.strictEqual(util.isFunction(function() {}), true); assert.strictEqual(util.isFunction(), false); assert.strictEqual(util.isFunction('string'), false); +assert.strictEqual(util.toUSVString('string\ud801'), 'string\ufffd'); + { assert.strictEqual(util.types.isNativeError(new Error()), true); assert.strictEqual(util.types.isNativeError(new TypeError()), true); From 208305fd8fd57a220bc2250fd83673f37876c110 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Sun, 22 Aug 2021 08:01:41 +0200 Subject: [PATCH 19/33] doc: move util.toUSVString() outside of deprecated group MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/nodejs/node/pull/39814/files#r693445849 PR-URL: https://github.com/nodejs/node/pull/39840 Reviewed-By: Michaël Zasso Reviewed-By: Yongsheng Zhang Reviewed-By: Darshan Sen --- doc/api/util.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/doc/api/util.md b/doc/api/util.md index 8bcc9ebda10599..5f0cbfc42e1b4e 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -1304,6 +1304,17 @@ const { read, written } = encoder.encodeInto(src, dest); The encoding supported by the `TextEncoder` instance. Always set to `'utf-8'`. +## `util.toUSVString(string)` + + +* `string` {string} + +Returns the `string` after replacing any surrogate code points +(or equivalently, any unpaired surrogate code units) with the +Unicode "replacement character" U+FFFD. + ## `util.types` - -* `string` {string} - -Returns the `string` after replacing any surrogate code points -(or equivalently, any unpaired surrogate code units) with the -Unicode "replacement character" U+FFFD. - [Common System Errors]: errors.md#errors_common_system_errors [Custom inspection functions on objects]: #util_custom_inspection_functions_on_objects [Custom promisified functions]: #util_custom_promisified_functions From d82ee968613b5954a36a98c80e61eb0719f4b342 Mon Sep 17 00:00:00 2001 From: Jiawen Geng Date: Fri, 20 Aug 2021 12:59:59 +0000 Subject: [PATCH 20/33] tools: update gyp-next to v0.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/39818 Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig --- tools/gyp/.github/workflows/node-gyp.yml | 4 ++- tools/gyp/CHANGELOG.md | 16 +++++++++ tools/gyp/pylib/gyp/easy_xml.py | 5 +-- tools/gyp/pylib/gyp/generator/ninja.py | 29 +++++++-------- tools/gyp/pylib/gyp/msvs_emulation.py | 45 ++++++++++++++++-------- tools/gyp/setup.py | 2 +- 6 files changed, 67 insertions(+), 34 deletions(-) diff --git a/tools/gyp/.github/workflows/node-gyp.yml b/tools/gyp/.github/workflows/node-gyp.yml index 59d23fdffc2150..bd7c85ffda9169 100644 --- a/tools/gyp/.github/workflows/node-gyp.yml +++ b/tools/gyp/.github/workflows/node-gyp.yml @@ -8,6 +8,8 @@ jobs: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] + python: [3.6, 3.9] + runs-on: ${{ matrix.os }} steps: - name: Clone gyp-next @@ -24,7 +26,7 @@ jobs: node-version: 14.x - uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: ${{ matrix.python }} - name: Install dependencies run: | cd node-gyp diff --git a/tools/gyp/CHANGELOG.md b/tools/gyp/CHANGELOG.md index d84ee08238d37f..141da1f589a3ec 100644 --- a/tools/gyp/CHANGELOG.md +++ b/tools/gyp/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +### [0.9.5](https://www.github.com/nodejs/gyp-next/compare/v0.9.4...v0.9.5) (2021-08-18) + + +### Bug Fixes + +* add python 3.6 to node-gyp integration test ([3462d4c](https://www.github.com/nodejs/gyp-next/commit/3462d4ce3c31cce747513dc7ca9760c81d57c60e)) +* revert for windows compatibility ([d078e7d](https://www.github.com/nodejs/gyp-next/commit/d078e7d7ae080ddae243188f6415f940376a7368)) +* support msvs_quote_cmd in ninja generator ([#117](https://www.github.com/nodejs/gyp-next/issues/117)) ([46486ac](https://www.github.com/nodejs/gyp-next/commit/46486ac6e9329529d51061e006a5b39631e46729)) + +### [0.9.4](https://www.github.com/nodejs/gyp-next/compare/v0.9.3...v0.9.4) (2021-08-09) + + +### Bug Fixes + +* .S is an extension for asm file on Windows ([#115](https://www.github.com/nodejs/gyp-next/issues/115)) ([d2fad44](https://www.github.com/nodejs/gyp-next/commit/d2fad44ef3a79ca8900f1307060153ded57053fc)) + ### [0.9.3](https://www.github.com/nodejs/gyp-next/compare/v0.9.2...v0.9.3) (2021-07-07) diff --git a/tools/gyp/pylib/gyp/easy_xml.py b/tools/gyp/pylib/gyp/easy_xml.py index 0c99e29ecf8ce0..bda1a47468ae2b 100644 --- a/tools/gyp/pylib/gyp/easy_xml.py +++ b/tools/gyp/pylib/gyp/easy_xml.py @@ -123,10 +123,7 @@ def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False, default_encoding = locale.getdefaultlocale()[1] if default_encoding and default_encoding.upper() != encoding.upper(): - if win32 and sys.version_info < (3, 7): - xml_string = xml_string.decode("cp1251").encode(encoding) - else: - xml_string = xml_string.encode(encoding) + xml_string = xml_string.encode(encoding) # Get the old content try: diff --git a/tools/gyp/pylib/gyp/generator/ninja.py b/tools/gyp/pylib/gyp/generator/ninja.py index b66e674a7b3871..d173bf22990116 100644 --- a/tools/gyp/pylib/gyp/generator/ninja.py +++ b/tools/gyp/pylib/gyp/generator/ninja.py @@ -654,10 +654,10 @@ def WriteActions( description = self.GenerateDescription( "ACTION", action.get("message", None), name ) - is_cygwin = ( - self.msvs_settings.IsRuleRunUnderCygwin(action) + win_shell_flags = ( + self.msvs_settings.GetRuleShellFlags(action) if self.flavor == "win" - else False + else None ) args = action["action"] depfile = action.get("depfile", None) @@ -665,7 +665,7 @@ def WriteActions( depfile = self.ExpandSpecial(depfile, self.base_to_build) pool = "console" if int(action.get("ninja_use_console", 0)) else None rule_name, _ = self.WriteNewNinjaRule( - name, args, description, is_cygwin, env, pool, depfile=depfile + name, args, description, win_shell_flags, env, pool, depfile=depfile ) inputs = [self.GypPathToNinja(i, env) for i in action["inputs"]] @@ -707,14 +707,14 @@ def WriteRules( rule.get("message", None), ("%s " + generator_default_variables["RULE_INPUT_PATH"]) % name, ) - is_cygwin = ( - self.msvs_settings.IsRuleRunUnderCygwin(rule) + win_shell_flags = ( + self.msvs_settings.GetRuleShellFlags(rule) if self.flavor == "win" - else False + else None ) pool = "console" if int(rule.get("ninja_use_console", 0)) else None rule_name, args = self.WriteNewNinjaRule( - name, args, description, is_cygwin, env, pool + name, args, description, win_shell_flags, env, pool ) # TODO: if the command references the outputs directly, we should @@ -733,7 +733,7 @@ def WriteRules( def cygwin_munge(path): # pylint: disable=cell-var-from-loop - if is_cygwin: + if win_shell_flags and win_shell_flags.cygwin: return path.replace("\\", "/") return path @@ -1221,7 +1221,7 @@ def WriteSourcesForArch( command = "cc_s" elif ( self.flavor == "win" - and ext == "asm" + and ext in ("asm", "S") and not self.msvs_settings.HasExplicitAsmRules(spec) ): command = "asm" @@ -1899,7 +1899,7 @@ def WriteVariableList(self, ninja_file, var, values): ninja_file.variable(var, " ".join(values)) def WriteNewNinjaRule( - self, name, args, description, is_cygwin, env, pool, depfile=None + self, name, args, description, win_shell_flags, env, pool, depfile=None ): """Write out a new ninja "rule" statement for a given command. @@ -1946,13 +1946,14 @@ def WriteNewNinjaRule( if self.flavor == "win": rspfile = rule_name + ".$unique_name.rsp" # The cygwin case handles this inside the bash sub-shell. - run_in = "" if is_cygwin else " " + self.build_to_base - if is_cygwin: + run_in = "" if win_shell_flags.cygwin else " " + self.build_to_base + if win_shell_flags.cygwin: rspfile_content = self.msvs_settings.BuildCygwinBashCommandLine( args, self.build_to_base ) else: - rspfile_content = gyp.msvs_emulation.EncodeRspFileList(args) + rspfile_content = gyp.msvs_emulation.EncodeRspFileList( + args, win_shell_flags.quote) command = ( "%s gyp-win-tool action-wrapper $arch " % sys.executable + rspfile diff --git a/tools/gyp/pylib/gyp/msvs_emulation.py b/tools/gyp/pylib/gyp/msvs_emulation.py index 6fcabd049d843c..2d289dcb47f467 100644 --- a/tools/gyp/pylib/gyp/msvs_emulation.py +++ b/tools/gyp/pylib/gyp/msvs_emulation.py @@ -7,6 +7,7 @@ build systems, primarily ninja. """ +import collections import os import re import subprocess @@ -19,7 +20,7 @@ windows_quoter_regex = re.compile(r'(\\*)"') -def QuoteForRspFile(arg): +def QuoteForRspFile(arg, quote_cmd=True): """Quote a command line argument so that it appears as one argument when processed via cmd.exe and parsed by CommandLineToArgvW (as is typical for Windows programs).""" @@ -36,7 +37,8 @@ def QuoteForRspFile(arg): # For a literal quote, CommandLineToArgvW requires 2n+1 backslashes # preceding it, and results in n backslashes + the quote. So we substitute # in 2* what we match, +1 more, plus the quote. - arg = windows_quoter_regex.sub(lambda mo: 2 * mo.group(1) + '\\"', arg) + if quote_cmd: + arg = windows_quoter_regex.sub(lambda mo: 2 * mo.group(1) + '\\"', arg) # %'s also need to be doubled otherwise they're interpreted as batch # positional arguments. Also make sure to escape the % so that they're @@ -48,12 +50,17 @@ def QuoteForRspFile(arg): # These commands are used in rsp files, so no escaping for the shell (via ^) # is necessary. - # Finally, wrap the whole thing in quotes so that the above quote rule - # applies and whitespace isn't a word break. - return '"' + arg + '"' + # As a workaround for programs that don't use CommandLineToArgvW, gyp + # supports msvs_quote_cmd=0, which simply disables all quoting. + if quote_cmd: + # Finally, wrap the whole thing in quotes so that the above quote rule + # applies and whitespace isn't a word break. + return f'"{arg}"' + return arg -def EncodeRspFileList(args): + +def EncodeRspFileList(args, quote_cmd): """Process a list of arguments using QuoteCmdExeArgument.""" # Note that the first argument is assumed to be the command. Don't add # quotes around it because then built-ins like 'echo', etc. won't work. @@ -67,7 +74,8 @@ def EncodeRspFileList(args): program = call + " " + os.path.normpath(program) else: program = os.path.normpath(args[0]) - return program + " " + " ".join(QuoteForRspFile(arg) for arg in args[1:]) + return (program + " " + + " ".join(QuoteForRspFile(arg, quote_cmd) for arg in args[1:])) def _GenericRetrieve(root, default, path): @@ -933,13 +941,22 @@ def BuildCygwinBashCommandLine(self, args, path_to_base): ) return cmd - def IsRuleRunUnderCygwin(self, rule): - """Determine if an action should be run under cygwin. If the variable is - unset, or set to 1 we use cygwin.""" - return ( - int(rule.get("msvs_cygwin_shell", self.spec.get("msvs_cygwin_shell", 1))) - != 0 - ) + RuleShellFlags = collections.namedtuple("RuleShellFlags", ["cygwin", "quote"]) + + def GetRuleShellFlags(self, rule): + """Return RuleShellFlags about how the given rule should be run. This + includes whether it should run under cygwin (msvs_cygwin_shell), and + whether the commands should be quoted (msvs_quote_cmd).""" + # If the variable is unset, or set to 1 we use cygwin + cygwin = int(rule.get("msvs_cygwin_shell", + self.spec.get("msvs_cygwin_shell", 1))) != 0 + # Default to quoting. There's only a few special instances where the + # target command uses non-standard command line parsing and handle quotes + # and quote escaping differently. + quote_cmd = int(rule.get("msvs_quote_cmd", 1)) + assert quote_cmd != 0 or cygwin != 1, \ + "msvs_quote_cmd=0 only applicable for msvs_cygwin_shell=0" + return MsvsSettings.RuleShellFlags(cygwin, quote_cmd) def _HasExplicitRuleForExtension(self, spec, extension): """Determine if there's an explicit rule for a particular extension.""" diff --git a/tools/gyp/setup.py b/tools/gyp/setup.py index 1ff298a12326b0..51c6b057378858 100644 --- a/tools/gyp/setup.py +++ b/tools/gyp/setup.py @@ -15,7 +15,7 @@ setup( name="gyp-next", - version="0.9.3", + version="0.9.5", description="A fork of the GYP build system for use in the Node.js projects", long_description=long_description, long_description_content_type="text/markdown", From 3a8399ee6192e296b8e493962f7a48c84db32204 Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Sat, 7 Aug 2021 14:04:03 +0530 Subject: [PATCH 21/33] src: return Maybe from InitializeContextRuntime() Signed-off-by: Darshan Sen PR-URL: https://github.com/nodejs/node/pull/39695 Backport-PR-URL: https://github.com/nodejs/node/pull/39834 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- src/api/environment.cc | 123 ++++++++++++++++++++++++++++---------- src/node_contextify.cc | 4 +- src/node_internals.h | 2 +- src/node_main_instance.cc | 2 +- 4 files changed, 95 insertions(+), 36 deletions(-) diff --git a/src/api/environment.cc b/src/api/environment.cc index b7e213602b57d5..0fb750c5abbe00 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -20,8 +20,11 @@ using v8::Function; using v8::FunctionCallbackInfo; using v8::HandleScope; using v8::Isolate; +using v8::Just; using v8::Local; +using v8::Maybe; using v8::MaybeLocal; +using v8::Nothing; using v8::Null; using v8::Object; using v8::ObjectTemplate; @@ -523,58 +526,113 @@ void ProtoThrower(const FunctionCallbackInfo& info) { // This runs at runtime, regardless of whether the context // is created from a snapshot. -void InitializeContextRuntime(Local context) { +Maybe InitializeContextRuntime(Local context) { Isolate* isolate = context->GetIsolate(); HandleScope handle_scope(isolate); // Delete `Intl.v8BreakIterator` // https://github.com/nodejs/node/issues/14909 - Local intl_string = FIXED_ONE_BYTE_STRING(isolate, "Intl"); - Local break_iter_string = - FIXED_ONE_BYTE_STRING(isolate, "v8BreakIterator"); - Local intl_v; - if (context->Global()->Get(context, intl_string).ToLocal(&intl_v) && - intl_v->IsObject()) { - Local intl = intl_v.As(); - intl->Delete(context, break_iter_string).Check(); + { + Local intl_string = + FIXED_ONE_BYTE_STRING(isolate, "Intl"); + Local break_iter_string = + FIXED_ONE_BYTE_STRING(isolate, "v8BreakIterator"); + + Local intl_v; + if (!context->Global() + ->Get(context, intl_string) + .ToLocal(&intl_v)) { + return Nothing(); + } + + if (intl_v->IsObject() && + intl_v.As() + ->Delete(context, break_iter_string) + .IsNothing()) { + return Nothing(); + } } // Delete `Atomics.wake` // https://github.com/nodejs/node/issues/21219 - Local atomics_string = FIXED_ONE_BYTE_STRING(isolate, "Atomics"); - Local wake_string = FIXED_ONE_BYTE_STRING(isolate, "wake"); - Local atomics_v; - if (context->Global()->Get(context, atomics_string).ToLocal(&atomics_v) && - atomics_v->IsObject()) { - Local atomics = atomics_v.As(); - atomics->Delete(context, wake_string).Check(); + { + Local atomics_string = + FIXED_ONE_BYTE_STRING(isolate, "Atomics"); + Local wake_string = + FIXED_ONE_BYTE_STRING(isolate, "wake"); + + Local atomics_v; + if (!context->Global() + ->Get(context, atomics_string) + .ToLocal(&atomics_v)) { + return Nothing(); + } + + if (atomics_v->IsObject() && + atomics_v.As() + ->Delete(context, wake_string) + .IsNothing()) { + return Nothing(); + } } // Remove __proto__ // https://github.com/nodejs/node/issues/31951 - Local object_string = FIXED_ONE_BYTE_STRING(isolate, "Object"); - Local prototype_string = FIXED_ONE_BYTE_STRING(isolate, "prototype"); - Local prototype = context->Global() - ->Get(context, object_string) - .ToLocalChecked() - .As() - ->Get(context, prototype_string) - .ToLocalChecked() - .As(); - Local proto_string = FIXED_ONE_BYTE_STRING(isolate, "__proto__"); + Local prototype; + { + Local object_string = + FIXED_ONE_BYTE_STRING(isolate, "Object"); + Local prototype_string = + FIXED_ONE_BYTE_STRING(isolate, "prototype"); + + Local object_v; + if (!context->Global() + ->Get(context, object_string) + .ToLocal(&object_v)) { + return Nothing(); + } + + Local prototype_v; + if (!object_v.As() + ->Get(context, prototype_string) + .ToLocal(&prototype_v)) { + return Nothing(); + } + + prototype = prototype_v.As(); + } + + Local proto_string = + FIXED_ONE_BYTE_STRING(isolate, "__proto__"); + if (per_process::cli_options->disable_proto == "delete") { - prototype->Delete(context, proto_string).ToChecked(); + if (prototype + ->Delete(context, proto_string) + .IsNothing()) { + return Nothing(); + } } else if (per_process::cli_options->disable_proto == "throw") { - Local thrower = - Function::New(context, ProtoThrower).ToLocalChecked(); + Local thrower; + if (!Function::New(context, ProtoThrower) + .ToLocal(&thrower)) { + return Nothing(); + } + PropertyDescriptor descriptor(thrower, thrower); descriptor.set_enumerable(false); descriptor.set_configurable(true); - prototype->DefineProperty(context, proto_string, descriptor).ToChecked(); + if (prototype + ->DefineProperty(context, proto_string, descriptor) + .IsNothing()) { + return Nothing(); + } } else if (per_process::cli_options->disable_proto != "") { // Validated in ProcessGlobalArgs - FatalError("InitializeContextRuntime()", "invalid --disable-proto mode"); + FatalError("InitializeContextRuntime()", + "invalid --disable-proto mode"); } + + return Just(true); } bool InitializeContextForSnapshot(Local context) { @@ -638,8 +696,7 @@ bool InitializeContext(Local context) { return false; } - InitializeContextRuntime(context); - return true; + return InitializeContextRuntime(context).IsJust(); } uv_loop_t* GetCurrentEventLoop(Isolate* isolate) { diff --git a/src/node_contextify.cc b/src/node_contextify.cc index ae5fc2fbf1a862..482c9a7b51dbf0 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -210,7 +210,9 @@ MaybeLocal ContextifyContext::CreateV8Context( if (ctx.IsEmpty()) return MaybeLocal(); // Only partially initialize the context - the primordials are left out // and only initialized when necessary. - InitializeContextRuntime(ctx); + if (InitializeContextRuntime(ctx).IsNothing()) { + return MaybeLocal(); + } if (ctx.IsEmpty()) { return MaybeLocal(); diff --git a/src/node_internals.h b/src/node_internals.h index 8f7929994f3243..dec024bd79f2cd 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -92,7 +92,7 @@ void SignalExit(int signal, siginfo_t* info, void* ucontext); std::string GetProcessTitle(const char* default_title); std::string GetHumanReadableProcessName(); -void InitializeContextRuntime(v8::Local); +v8::Maybe InitializeContextRuntime(v8::Local context); bool InitializePrimordials(v8::Local context); class NodeArrayBufferAllocator : public ArrayBufferAllocator { diff --git a/src/node_main_instance.cc b/src/node_main_instance.cc index f232cd6a89f26a..ce319cca3edca3 100644 --- a/src/node_main_instance.cc +++ b/src/node_main_instance.cc @@ -198,7 +198,7 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code, CHECK(!context.IsEmpty()); Context::Scope context_scope(context); - InitializeContextRuntime(context); + CHECK(InitializeContextRuntime(context).IsJust()); SetIsolateErrorHandlers(isolate_, {}); env->InitializeMainContext(context, env_info); #if HAVE_INSPECTOR From af7047a815ec8d9df824f6b293d2bb17c837c6bf Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Mon, 2 Aug 2021 13:08:32 +0200 Subject: [PATCH 22/33] stream: add isDisturbed helper Adds a helper util used to determine whether a stream has been disturbed (read or cancelled). Refs: https://github.com/nodejs/node/issues/39627 PR-URL: https://github.com/nodejs/node/pull/39628 Backport-PR-URL: https://github.com/nodejs/node/pull/39819 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Matteo Collina --- doc/api/stream.md | 29 +++++++++- lib/internal/streams/readable.js | 15 +++-- lib/internal/streams/utils.js | 13 +++++ lib/internal/webstreams/readablestream.js | 9 +++ lib/stream.js | 1 + test/parallel/test-stream-readable-aborted.js | 57 +++++++++++++++++++ test/parallel/test-stream-readable-didRead.js | 8 ++- test/parallel/test-whatwg-readablestream.js | 50 ++++++++++++++++ 8 files changed, 171 insertions(+), 11 deletions(-) create mode 100644 test/parallel/test-stream-readable-aborted.js diff --git a/doc/api/stream.md b/doc/api/stream.md index d6707a7a84246e..79f524c152f3ce 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -1259,16 +1259,27 @@ added: v11.4.0 Is `true` if it is safe to call [`readable.read()`][stream-read], which means the stream has not been destroyed or emitted `'error'` or `'end'`. +##### `readable.readableAborted` + + +> Stability: 1 - Experimental + +* {boolean} + +Returns whether the stream was destroyed or errored before emitting `'end'`. + ##### `readable.readableDidRead` +> Stability: 1 - Experimental + * {boolean} -Allows determining if the stream has been or is about to be read. -Returns true if `'data'`, `'end'`, `'error'` or `'close'` has been -emitted. +Returns whether `'data'` has been emitted. ##### `readable.readableEncoding` + +> Stability: 1 - Experimental + +* `stream` {stream.Readable|ReadableStream} +* Returns: `boolean` + +Returns whether the stream has been read from or cancelled. + ### `stream.addAbortSignal(signal, stream)` + +* `src` {Stream|Blob|ArrayBuffer|string|Iterable|AsyncIterable| + AsyncGeneratorFunction|AsyncFunction|Promise|Object} + +A utility method for creating duplex streams. + +* `Stream` converts writable stream into writable `Duplex` and readable stream + to `Duplex`. +* `Blob` converts into readable `Duplex`. +* `string` converts into readable `Duplex`. +* `ArrayBuffer` converts into readable `Duplex`. +* `AsyncIterable` converts into a readable `Duplex`. Cannot yield + `null`. +* `AsyncGeneratorFunction` converts into a readable/writable transform + `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield + `null`. +* `AsyncFunction` converts into a writable `Duplex`. Must return + either `null` or `undefined` +* `Object ({ writable, readable })` converts `readable` and + `writable` into `Stream` and then combines them into `Duplex` where the + `Duplex` will write to the `writable` and read from the `readable`. +* `Promise` converts into readable `Duplex`. Value `null` is ignored. +* Returns: {stream.Duplex} + ### `stream.addAbortSignal(signal, stream)` + #### `registry` * Default: "https://registry.npmjs.org/" @@ -92,6 +93,9 @@ Management of teams and team memberships is done with the `npm team` command. The base URL of the npm registry. + + + #### `otp` * Default: null @@ -103,6 +107,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-adduser.md b/deps/npm/docs/content/commands/npm-adduser.md index f25d3ccd87ab49..21a31ca940e524 100644 --- a/deps/npm/docs/content/commands/npm-adduser.md +++ b/deps/npm/docs/content/commands/npm-adduser.md @@ -37,6 +37,7 @@ your existing record. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -44,6 +45,9 @@ your existing record. The base URL of the npm registry. + + + #### `scope` * Default: the scope of the current project, if any, or "" @@ -74,6 +78,9 @@ npm init --scope=@foo --yes ``` + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-audit.md b/deps/npm/docs/content/commands/npm-audit.md index 94b16b27bd7ed9..9fa8c0fcc6f8c3 100644 --- a/deps/npm/docs/content/commands/npm-audit.md +++ b/deps/npm/docs/content/commands/npm-audit.md @@ -191,6 +191,7 @@ $ npm audit --audit-level=moderate + #### `audit-level` * Default: null @@ -199,6 +200,9 @@ $ npm audit --audit-level=moderate The minimum level of vulnerability for `npm audit` to exit with a non-zero exit code. + + + #### `dry-run` * Default: false @@ -212,6 +216,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `force` * Default: false @@ -237,6 +244,9 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! + + + #### `json` * Default: false @@ -249,6 +259,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `package-lock-only` * Default: false @@ -263,6 +276,9 @@ instead of checking `node_modules` and downloading dependencies. For `list` this means the output will be based on the tree described by the `package-lock.json`, rather than the contents of `node_modules`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -281,6 +297,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `workspace` * Default: @@ -303,6 +322,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -313,6 +335,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-bin.md b/deps/npm/docs/content/commands/npm-bin.md index 12984da1d1db73..2d7c1d5b8149ee 100644 --- a/deps/npm/docs/content/commands/npm-bin.md +++ b/deps/npm/docs/content/commands/npm-bin.md @@ -20,6 +20,7 @@ Print the folder where npm will install executables. + #### `global` * Default: false @@ -34,6 +35,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-bugs.md b/deps/npm/docs/content/commands/npm-bugs.md index b8778324b8e4ae..f92241a14b95c0 100644 --- a/deps/npm/docs/content/commands/npm-bugs.md +++ b/deps/npm/docs/content/commands/npm-bugs.md @@ -23,6 +23,7 @@ will search for a `package.json` in the current folder and use the `name` proper + #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -35,6 +36,9 @@ terminal. Set to `true` to use default system URL opener. + + + #### `registry` * Default: "https://registry.npmjs.org/" @@ -42,6 +46,9 @@ Set to `true` to use default system URL opener. The base URL of the npm registry. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-cache.md b/deps/npm/docs/content/commands/npm-cache.md index e371f196d7c42f..6497a3988c9387 100644 --- a/deps/npm/docs/content/commands/npm-cache.md +++ b/deps/npm/docs/content/commands/npm-cache.md @@ -77,6 +77,7 @@ verify`. + #### `cache` * Default: Windows: `%LocalAppData%\npm-cache`, Posix: `~/.npm` @@ -85,6 +86,9 @@ verify`. The location of npm's cache directory. See [`npm cache`](/commands/npm-cache) + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-ci.md b/deps/npm/docs/content/commands/npm-ci.md index 31c92b13c5cdd3..1ce50c66d5fafa 100644 --- a/deps/npm/docs/content/commands/npm-ci.md +++ b/deps/npm/docs/content/commands/npm-ci.md @@ -69,6 +69,7 @@ cache: + #### `audit` * Default: true @@ -79,6 +80,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `ignore-scripts` * Default: false @@ -91,6 +95,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `script-shell` * Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows @@ -99,6 +106,9 @@ will *not* run any pre- or post-scripts. The shell to use for scripts run with the `npm exec`, `npm run` and `npm init ` commands. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-config.md b/deps/npm/docs/content/commands/npm-config.md index 9e76a23671e861..2d77f045cbc472 100644 --- a/deps/npm/docs/content/commands/npm-config.md +++ b/deps/npm/docs/content/commands/npm-config.md @@ -97,6 +97,7 @@ global config. + #### `json` * Default: false @@ -109,6 +110,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `global` * Default: false @@ -123,6 +127,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `editor` * Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on @@ -131,6 +138,9 @@ folder instead of the current working directory. See The command to run for `npm edit` and `npm config edit`. + + + #### `location` * Default: "user" unless `--global` is passed, which will also set this value @@ -139,6 +149,9 @@ The command to run for `npm edit` and `npm config edit`. When passed to `npm config` this refers to which config file to use. + + + #### `long` * Default: false @@ -146,6 +159,9 @@ When passed to `npm config` this refers to which config file to use. Show extended information in `ls`, `search`, and `help-search`. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-dedupe.md b/deps/npm/docs/content/commands/npm-dedupe.md index 324e6a71b7a3eb..dcb2a98fe9fd11 100644 --- a/deps/npm/docs/content/commands/npm-dedupe.md +++ b/deps/npm/docs/content/commands/npm-dedupe.md @@ -76,6 +76,7 @@ Using `npm find-dupes` will run the command in `--dry-run` mode. + #### `global-style` * Default: false @@ -88,6 +89,9 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. + + + #### `legacy-bundling` * Default: false @@ -98,6 +102,9 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. + + + #### `strict-peer-deps` * Default: false @@ -117,6 +124,9 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. + + + #### `package-lock` * Default: true @@ -129,6 +139,9 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -147,6 +160,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `ignore-scripts` * Default: false @@ -159,6 +175,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `audit` * Default: true @@ -169,6 +188,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `bin-links` * Default: true @@ -181,6 +203,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `fund` * Default: true @@ -190,6 +215,9 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. + + + #### `dry-run` * Default: false @@ -203,6 +231,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `workspace` * Default: @@ -225,6 +256,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -235,6 +269,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-deprecate.md b/deps/npm/docs/content/commands/npm-deprecate.md index b5c0e67144aef8..4888e42e8ba867 100644 --- a/deps/npm/docs/content/commands/npm-deprecate.md +++ b/deps/npm/docs/content/commands/npm-deprecate.md @@ -44,6 +44,7 @@ format an empty string. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -51,6 +52,9 @@ format an empty string. The base URL of the npm registry. + + + #### `otp` * Default: null @@ -62,6 +66,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-diff.md b/deps/npm/docs/content/commands/npm-diff.md index 479cb63b112137..cf0bbec15f46f8 100644 --- a/deps/npm/docs/content/commands/npm-diff.md +++ b/deps/npm/docs/content/commands/npm-diff.md @@ -155,6 +155,7 @@ located within the folder `./lib/` and changed lines of code within the + #### `diff` * Default: @@ -162,6 +163,9 @@ located within the folder `./lib/` and changed lines of code within the Define arguments to compare in `npm diff`. + + + #### `diff-name-only` * Default: false @@ -169,6 +173,9 @@ Define arguments to compare in `npm diff`. Prints only filenames when using `npm diff`. + + + #### `diff-unified` * Default: 3 @@ -176,6 +183,9 @@ Prints only filenames when using `npm diff`. The number of lines of context to print in `npm diff`. + + + #### `diff-ignore-all-space` * Default: false @@ -183,6 +193,9 @@ The number of lines of context to print in `npm diff`. Ignore whitespace when comparing lines in `npm diff`. + + + #### `diff-no-prefix` * Default: false @@ -193,6 +206,9 @@ Do not show any source or destination prefix in `npm diff` output. Note: this causes `npm diff` to ignore the `--diff-src-prefix` and `--diff-dst-prefix` configs. + + + #### `diff-src-prefix` * Default: "a/" @@ -200,6 +216,9 @@ Note: this causes `npm diff` to ignore the `--diff-src-prefix` and Source prefix to be used in `npm diff` output. + + + #### `diff-dst-prefix` * Default: "b/" @@ -207,6 +226,9 @@ Source prefix to be used in `npm diff` output. Destination prefix to be used in `npm diff` output. + + + #### `diff-text` * Default: false @@ -214,6 +236,9 @@ Destination prefix to be used in `npm diff` output. Treat all files as text in `npm diff`. + + + #### `global` * Default: false @@ -228,6 +253,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `tag` * Default: "latest" @@ -242,6 +270,9 @@ command, if no explicit tag is given. When used by the `npm diff` command, this is the tag used to fetch the tarball that will be compared with the local files by default. + + + #### `workspace` * Default: @@ -264,6 +295,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -274,6 +308,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ## See Also diff --git a/deps/npm/docs/content/commands/npm-dist-tag.md b/deps/npm/docs/content/commands/npm-dist-tag.md index 0e4e0ce56c69d7..4ad68ff56d067c 100644 --- a/deps/npm/docs/content/commands/npm-dist-tag.md +++ b/deps/npm/docs/content/commands/npm-dist-tag.md @@ -92,6 +92,7 @@ not begin with a number or the letter `v`. + #### `workspace` * Default: @@ -114,6 +115,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -124,6 +128,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-docs.md b/deps/npm/docs/content/commands/npm-docs.md index 7f4c8608370354..9f1387daef8edd 100644 --- a/deps/npm/docs/content/commands/npm-docs.md +++ b/deps/npm/docs/content/commands/npm-docs.md @@ -24,6 +24,7 @@ the `name` property. + #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -36,6 +37,9 @@ terminal. Set to `true` to use default system URL opener. + + + #### `registry` * Default: "https://registry.npmjs.org/" @@ -43,6 +47,9 @@ Set to `true` to use default system URL opener. The base URL of the npm registry. + + + #### `workspace` * Default: @@ -65,6 +72,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -75,6 +85,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-doctor.md b/deps/npm/docs/content/commands/npm-doctor.md index 839f4261bbbc22..0cce60c7b7b157 100644 --- a/deps/npm/docs/content/commands/npm-doctor.md +++ b/deps/npm/docs/content/commands/npm-doctor.md @@ -106,6 +106,7 @@ reset the cache. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -113,6 +114,9 @@ reset the cache. The base URL of the npm registry. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-edit.md b/deps/npm/docs/content/commands/npm-edit.md index 6930844bcae2cb..5ae7f2481ae456 100644 --- a/deps/npm/docs/content/commands/npm-edit.md +++ b/deps/npm/docs/content/commands/npm-edit.md @@ -29,6 +29,7 @@ changes to your locally installed copy. + #### `editor` * Default: The EDITOR or VISUAL environment variables, or 'notepad.exe' on @@ -37,6 +38,9 @@ changes to your locally installed copy. The command to run for `npm edit` and `npm config edit`. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-exec.md b/deps/npm/docs/content/commands/npm-exec.md index d4ea94371a85c2..82908d65e01d37 100644 --- a/deps/npm/docs/content/commands/npm-exec.md +++ b/deps/npm/docs/content/commands/npm-exec.md @@ -124,6 +124,7 @@ $ npm exec -- foo@latest bar --package=@npmcli/foo + #### `package` * Default: @@ -131,6 +132,9 @@ $ npm exec -- foo@latest bar --package=@npmcli/foo The package to install for [`npm exec`](/commands/npm-exec) + + + #### `call` * Default: "" @@ -144,6 +148,9 @@ npm exec --package yo --package generator-node --call "yo node" ``` + + + #### `workspace` * Default: @@ -166,6 +173,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -176,6 +186,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### Examples diff --git a/deps/npm/docs/content/commands/npm-explain.md b/deps/npm/docs/content/commands/npm-explain.md index 3a87ee8e438bad..4a8af2f70003ee 100644 --- a/deps/npm/docs/content/commands/npm-explain.md +++ b/deps/npm/docs/content/commands/npm-explain.md @@ -56,6 +56,7 @@ node_modules/nyc/node_modules/find-up ### Configuration + #### `json` * Default: false @@ -68,6 +69,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `workspace` * Default: @@ -90,6 +94,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-explore.md b/deps/npm/docs/content/commands/npm-explore.md index c4a40cf7229f7a..3979da9573db00 100644 --- a/deps/npm/docs/content/commands/npm-explore.md +++ b/deps/npm/docs/content/commands/npm-explore.md @@ -33,6 +33,7 @@ sure to use `npm rebuild ` if you make any changes. + #### `shell` * Default: SHELL environment variable, or "bash" on Posix, or "cmd.exe" on @@ -41,6 +42,9 @@ sure to use `npm rebuild ` if you make any changes. The shell to run for the `npm explore` command. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-find-dupes.md b/deps/npm/docs/content/commands/npm-find-dupes.md index 3b28f6443decda..e9dbac6d181489 100644 --- a/deps/npm/docs/content/commands/npm-find-dupes.md +++ b/deps/npm/docs/content/commands/npm-find-dupes.md @@ -19,6 +19,7 @@ duplications, without actually changing the package tree. + #### `global-style` * Default: false @@ -31,6 +32,9 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. + + + #### `legacy-bundling` * Default: false @@ -41,6 +45,9 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. + + + #### `strict-peer-deps` * Default: false @@ -60,6 +67,9 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. + + + #### `package-lock` * Default: true @@ -72,6 +82,9 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -90,6 +103,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `ignore-scripts` * Default: false @@ -102,6 +118,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `audit` * Default: true @@ -112,6 +131,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `bin-links` * Default: true @@ -124,6 +146,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `fund` * Default: true @@ -133,6 +158,9 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. + + + #### `workspace` * Default: @@ -155,6 +183,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -165,6 +196,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-fund.md b/deps/npm/docs/content/commands/npm-fund.md index ec5f5a37fdb716..83c0b13d8cbb41 100644 --- a/deps/npm/docs/content/commands/npm-fund.md +++ b/deps/npm/docs/content/commands/npm-fund.md @@ -66,6 +66,7 @@ test-workspaces-fund@1.0.0 + #### `json` * Default: false @@ -78,6 +79,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -90,6 +94,9 @@ terminal. Set to `true` to use default system URL opener. + + + #### `unicode` * Default: false on windows, true on mac/unix systems with a unicode locale, @@ -99,6 +106,9 @@ Set to `true` to use default system URL opener. When set to true, npm uses unicode characters in the tree output. When false, it uses ascii characters instead of unicode glyphs. + + + #### `workspace` * Default: @@ -121,6 +131,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `which` * Default: null @@ -128,6 +141,9 @@ This value is not exported to the environment for child processes. If there are multiple funding sources, which 1-indexed source URL to open. + + + ## See Also diff --git a/deps/npm/docs/content/commands/npm-help-search.md b/deps/npm/docs/content/commands/npm-help-search.md index 70f4f182d17e3f..78553a14ecb01d 100644 --- a/deps/npm/docs/content/commands/npm-help-search.md +++ b/deps/npm/docs/content/commands/npm-help-search.md @@ -27,6 +27,7 @@ directly. + #### `long` * Default: false @@ -34,6 +35,9 @@ directly. Show extended information in `ls`, `search`, and `help-search`. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-help.md b/deps/npm/docs/content/commands/npm-help.md index 81f55db332eda1..a8002eef17156c 100644 --- a/deps/npm/docs/content/commands/npm-help.md +++ b/deps/npm/docs/content/commands/npm-help.md @@ -25,6 +25,7 @@ topic, so unique matches are equivalent to specifying a topic name. + #### `viewer` * Default: "man" on Posix, "browser" on Windows @@ -34,6 +35,9 @@ The program to use to view help content. Set to `"browser"` to view html help content in the default web browser. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-hook.md b/deps/npm/docs/content/commands/npm-hook.md index 2917375ea38cda..c91bce3075e7b2 100644 --- a/deps/npm/docs/content/commands/npm-hook.md +++ b/deps/npm/docs/content/commands/npm-hook.md @@ -87,6 +87,7 @@ $ npm hook rm id-deadbeef + #### `registry` * Default: "https://registry.npmjs.org/" @@ -94,6 +95,9 @@ $ npm hook rm id-deadbeef The base URL of the npm registry. + + + #### `otp` * Default: null @@ -105,6 +109,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-init.md b/deps/npm/docs/content/commands/npm-init.md index 54c3bdb4b74ab9..7355c75884b8f3 100644 --- a/deps/npm/docs/content/commands/npm-init.md +++ b/deps/npm/docs/content/commands/npm-init.md @@ -147,6 +147,7 @@ dot to represent the current directory in that context, e.g: `react-app .`: + #### `yes` * Default: null @@ -155,6 +156,9 @@ dot to represent the current directory in that context, e.g: `react-app .`: Automatically answer "yes" to any prompts that npm might print on the command line. + + + #### `force` * Default: false @@ -180,6 +184,9 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! + + + #### `workspace` * Default: @@ -202,6 +209,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -212,6 +222,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-install-ci-test.md b/deps/npm/docs/content/commands/npm-install-ci-test.md index 2640311cf94be7..5c37ed8f56128b 100644 --- a/deps/npm/docs/content/commands/npm-install-ci-test.md +++ b/deps/npm/docs/content/commands/npm-install-ci-test.md @@ -20,6 +20,7 @@ This command runs `npm ci` followed immediately by `npm test`. + #### `audit` * Default: true @@ -30,6 +31,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `ignore-scripts` * Default: false @@ -42,6 +46,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `script-shell` * Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows @@ -50,6 +57,9 @@ will *not* run any pre- or post-scripts. The shell to use for scripts run with the `npm exec`, `npm run` and `npm init ` commands. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-install-test.md b/deps/npm/docs/content/commands/npm-install-test.md index c8533cafedd7a3..c2f9ab3d2f46ca 100644 --- a/deps/npm/docs/content/commands/npm-install-test.md +++ b/deps/npm/docs/content/commands/npm-install-test.md @@ -29,6 +29,7 @@ takes exactly the same arguments as `npm install`. + #### `save` * Default: true @@ -39,6 +40,9 @@ Save installed packages to a package.json file as dependencies. When used with the `npm rm` command, removes the dependency from package.json. + + + #### `save-exact` * Default: false @@ -47,6 +51,9 @@ package.json. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. + + + #### `global` * Default: false @@ -61,6 +68,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `global-style` * Default: false @@ -73,6 +83,9 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. + + + #### `legacy-bundling` * Default: false @@ -83,6 +96,9 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. + + + #### `strict-peer-deps` * Default: false @@ -102,6 +118,9 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. + + + #### `package-lock` * Default: true @@ -114,6 +133,9 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -132,6 +154,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `ignore-scripts` * Default: false @@ -144,6 +169,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `audit` * Default: true @@ -154,6 +182,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `bin-links` * Default: true @@ -166,6 +197,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `fund` * Default: true @@ -175,6 +209,9 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. + + + #### `dry-run` * Default: false @@ -188,6 +225,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `workspace` * Default: @@ -210,6 +250,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -220,6 +263,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-install.md b/deps/npm/docs/content/commands/npm-install.md index 70d4c0d46ffeb2..de73787181a501 100644 --- a/deps/npm/docs/content/commands/npm-install.md +++ b/deps/npm/docs/content/commands/npm-install.md @@ -413,6 +413,7 @@ These are some of the most common options related to installation. + #### `save` * Default: true @@ -423,6 +424,9 @@ Save installed packages to a package.json file as dependencies. When used with the `npm rm` command, removes the dependency from package.json. + + + #### `save-exact` * Default: false @@ -431,6 +435,9 @@ package.json. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. + + + #### `global` * Default: false @@ -445,6 +452,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `global-style` * Default: false @@ -457,6 +467,9 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. + + + #### `legacy-bundling` * Default: false @@ -467,6 +480,9 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. + + + #### `strict-peer-deps` * Default: false @@ -486,6 +502,9 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. + + + #### `package-lock` * Default: true @@ -498,6 +517,9 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -516,6 +538,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `ignore-scripts` * Default: false @@ -528,6 +553,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `audit` * Default: true @@ -538,6 +566,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `bin-links` * Default: true @@ -550,6 +581,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `fund` * Default: true @@ -559,6 +593,9 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. + + + #### `dry-run` * Default: false @@ -572,6 +609,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `workspace` * Default: @@ -594,6 +634,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -604,6 +647,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### Algorithm diff --git a/deps/npm/docs/content/commands/npm-link.md b/deps/npm/docs/content/commands/npm-link.md index c7b385009519a0..5811a8b23b9a56 100644 --- a/deps/npm/docs/content/commands/npm-link.md +++ b/deps/npm/docs/content/commands/npm-link.md @@ -113,6 +113,7 @@ workspace(s). + #### `save` * Default: true @@ -123,6 +124,9 @@ Save installed packages to a package.json file as dependencies. When used with the `npm rm` command, removes the dependency from package.json. + + + #### `save-exact` * Default: false @@ -131,6 +135,9 @@ package.json. Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. + + + #### `global` * Default: false @@ -145,6 +152,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `global-style` * Default: false @@ -157,6 +167,9 @@ on will be flattened in their `node_modules` folders. This obviously will eliminate some deduping. If used with `legacy-bundling`, `legacy-bundling` will be preferred. + + + #### `legacy-bundling` * Default: false @@ -167,6 +180,9 @@ such as the one included with node 0.8, can install the package. This eliminates all automatic deduping. If used with `global-style` this option will be preferred. + + + #### `strict-peer-deps` * Default: false @@ -186,6 +202,9 @@ When such and override is performed, a warning is printed, explaining the conflict and the packages involved. If `--strict-peer-deps` is set, then this warning is treated as a failure. + + + #### `package-lock` * Default: true @@ -198,6 +217,9 @@ When package package-locks are disabled, automatic pruning of extraneous modules will also be disabled. To remove extraneous modules with package-locks disabled use `npm prune`. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -216,6 +238,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `ignore-scripts` * Default: false @@ -228,6 +253,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `audit` * Default: true @@ -238,6 +266,9 @@ default registry and all registries configured for scopes. See the documentation for [`npm audit`](/commands/npm-audit) for details on what is submitted. + + + #### `bin-links` * Default: true @@ -250,6 +281,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `fund` * Default: true @@ -259,6 +293,9 @@ When "true" displays the message at the end of each `npm install` acknowledging the number of dependencies looking for funding. See [`npm fund`](/commands/npm-fund) for details. + + + #### `dry-run` * Default: false @@ -272,6 +309,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `workspace` * Default: @@ -294,6 +334,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -304,6 +347,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-logout.md b/deps/npm/docs/content/commands/npm-logout.md index 000b1006e8b358..cb7c8496fb4791 100644 --- a/deps/npm/docs/content/commands/npm-logout.md +++ b/deps/npm/docs/content/commands/npm-logout.md @@ -29,6 +29,7 @@ connected to that scope, if set. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -36,6 +37,9 @@ connected to that scope, if set. The base URL of the npm registry. + + + #### `scope` * Default: the scope of the current project, if any, or "" @@ -66,6 +70,9 @@ npm init --scope=@foo --yes ``` + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-ls.md b/deps/npm/docs/content/commands/npm-ls.md index 350f40a9991e52..528140bee95a9a 100644 --- a/deps/npm/docs/content/commands/npm-ls.md +++ b/deps/npm/docs/content/commands/npm-ls.md @@ -75,6 +75,7 @@ least the default human-readable `npm ls` output in npm v8. + #### `all` * Default: false @@ -84,6 +85,9 @@ When running `npm outdated` and `npm ls`, setting `--all` will show all outdated or installed packages, rather than only those directly depended upon by the current project. + + + #### `json` * Default: false @@ -96,6 +100,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `long` * Default: false @@ -103,6 +110,9 @@ Not supported by all npm commands. Show extended information in `ls`, `search`, and `help-search`. + + + #### `parseable` * Default: false @@ -111,6 +121,9 @@ Show extended information in `ls`, `search`, and `help-search`. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. + + + #### `global` * Default: false @@ -125,6 +138,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `depth` * Default: `Infinity` if `--all` is set, otherwise `1` @@ -135,6 +151,9 @@ The depth to go when recursing packages for `npm ls`. If not set, `npm ls` will show only the immediate dependencies of the root project. If `--all` is set, then npm will show all dependencies by default. + + + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -153,6 +172,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `link` * Default: false @@ -160,6 +182,9 @@ variable will be set to `'production'` for all lifecycle scripts. Used with `npm ls`, limiting output to only those packages that are linked. + + + #### `package-lock-only` * Default: false @@ -174,6 +199,9 @@ instead of checking `node_modules` and downloading dependencies. For `list` this means the output will be based on the tree described by the `package-lock.json`, rather than the contents of `node_modules`. + + + #### `unicode` * Default: false on windows, true on mac/unix systems with a unicode locale, @@ -183,6 +211,9 @@ For `list` this means the output will be based on the tree described by the When set to true, npm uses unicode characters in the tree output. When false, it uses ascii characters instead of unicode glyphs. + + + #### `workspace` * Default: @@ -205,6 +236,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -215,6 +249,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-org.md b/deps/npm/docs/content/commands/npm-org.md index 269f5cc3ee5b88..2f08f611529925 100644 --- a/deps/npm/docs/content/commands/npm-org.md +++ b/deps/npm/docs/content/commands/npm-org.md @@ -62,6 +62,7 @@ listing them, and finding specific ones and their roles. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -69,6 +70,9 @@ listing them, and finding specific ones and their roles. The base URL of the npm registry. + + + #### `otp` * Default: null @@ -80,6 +84,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + #### `json` * Default: false @@ -92,6 +99,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `parseable` * Default: false @@ -100,6 +110,9 @@ Not supported by all npm commands. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-outdated.md b/deps/npm/docs/content/commands/npm-outdated.md index 40e5feafd4cc61..8eb5528c3d0f43 100644 --- a/deps/npm/docs/content/commands/npm-outdated.md +++ b/deps/npm/docs/content/commands/npm-outdated.md @@ -88,6 +88,7 @@ A few things to note: + #### `all` * Default: false @@ -97,6 +98,9 @@ When running `npm outdated` and `npm ls`, setting `--all` will show all outdated or installed packages, rather than only those directly depended upon by the current project. + + + #### `json` * Default: false @@ -109,6 +113,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `long` * Default: false @@ -116,6 +123,9 @@ Not supported by all npm commands. Show extended information in `ls`, `search`, and `help-search`. + + + #### `parseable` * Default: false @@ -124,6 +134,9 @@ Show extended information in `ls`, `search`, and `help-search`. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. + + + #### `global` * Default: false @@ -138,6 +151,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `workspace` * Default: @@ -160,6 +176,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-owner.md b/deps/npm/docs/content/commands/npm-owner.md index da22e899c2ebba..74e7f84af6c804 100644 --- a/deps/npm/docs/content/commands/npm-owner.md +++ b/deps/npm/docs/content/commands/npm-owner.md @@ -39,6 +39,7 @@ on the command line when changing ownership with `--otp`. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -46,6 +47,9 @@ on the command line when changing ownership with `--otp`. The base URL of the npm registry. + + + #### `otp` * Default: null @@ -57,6 +61,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-pack.md b/deps/npm/docs/content/commands/npm-pack.md index cd4a175919e7eb..dda30512db8e32 100644 --- a/deps/npm/docs/content/commands/npm-pack.md +++ b/deps/npm/docs/content/commands/npm-pack.md @@ -14,6 +14,7 @@ npm pack [[<@scope>/]...] [--dry-run] [--json] + #### `dry-run` * Default: false @@ -27,6 +28,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `json` * Default: false @@ -39,6 +43,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `pack-destination` * Default: "." @@ -46,6 +53,9 @@ Not supported by all npm commands. Directory in which `npm pack` will save tarballs. + + + #### `workspace` * Default: @@ -68,6 +78,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -78,6 +91,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### Description diff --git a/deps/npm/docs/content/commands/npm-ping.md b/deps/npm/docs/content/commands/npm-ping.md index 7c7b66b181b4aa..6f1c4582f058f0 100644 --- a/deps/npm/docs/content/commands/npm-ping.md +++ b/deps/npm/docs/content/commands/npm-ping.md @@ -29,6 +29,7 @@ Ping error: {*Detail about error} + #### `registry` * Default: "https://registry.npmjs.org/" @@ -36,6 +37,9 @@ Ping error: {*Detail about error} The base URL of the npm registry. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-pkg.md b/deps/npm/docs/content/commands/npm-pkg.md index 78b13cf9e9a000..bf6a2df5da6bce 100644 --- a/deps/npm/docs/content/commands/npm-pkg.md +++ b/deps/npm/docs/content/commands/npm-pkg.md @@ -16,7 +16,7 @@ npm pkg delete [. ...] A command that automates the management of `package.json` files. `npm pkg` provide 3 different sub commands that allow you to modify or retrieve -values for given object keys in your `packge.json`. +values for given object keys in your `package.json`. The syntax to retrieve and set fields is a dot separated representation of the nested object properties to be found within your `package.json`, it's the @@ -166,6 +166,7 @@ npm pkg get name version --ws + #### `force` * Default: false @@ -191,6 +192,9 @@ mistakes, unnecessary performance degradation, and malicious input. If you don't have a clear idea of what you want to do, it is strongly recommended that you do not use this option! + + + #### `json` * Default: false @@ -203,6 +207,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `workspace` * Default: @@ -225,6 +232,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -235,6 +245,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ## See Also diff --git a/deps/npm/docs/content/commands/npm-prefix.md b/deps/npm/docs/content/commands/npm-prefix.md index 0523c9e19513dc..276a9e9e699100 100644 --- a/deps/npm/docs/content/commands/npm-prefix.md +++ b/deps/npm/docs/content/commands/npm-prefix.md @@ -37,6 +37,7 @@ npm prefix -g + #### `global` * Default: false @@ -51,6 +52,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-profile.md b/deps/npm/docs/content/commands/npm-profile.md index 079440d7858153..cecc48518dbdb7 100644 --- a/deps/npm/docs/content/commands/npm-profile.md +++ b/deps/npm/docs/content/commands/npm-profile.md @@ -77,6 +77,7 @@ Some of these commands may not be available on non npmjs.com registries. + #### `registry` * Default: "https://registry.npmjs.org/" @@ -84,6 +85,9 @@ Some of these commands may not be available on non npmjs.com registries. The base URL of the npm registry. + + + #### `json` * Default: false @@ -96,6 +100,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `parseable` * Default: false @@ -104,6 +111,9 @@ Not supported by all npm commands. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. + + + #### `otp` * Default: null @@ -115,6 +125,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-prune.md b/deps/npm/docs/content/commands/npm-prune.md index d9b5b068f7a4b3..7bd7ad13113230 100644 --- a/deps/npm/docs/content/commands/npm-prune.md +++ b/deps/npm/docs/content/commands/npm-prune.md @@ -37,6 +37,7 @@ this command can help clean up any resulting garbage. + #### `omit` * Default: 'dev' if the `NODE_ENV` environment variable is set to @@ -55,6 +56,9 @@ it will be included. If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment variable will be set to `'production'` for all lifecycle scripts. + + + #### `dry-run` * Default: false @@ -68,6 +72,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `json` * Default: false @@ -80,6 +87,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `workspace` * Default: @@ -102,6 +112,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -112,6 +125,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-publish.md b/deps/npm/docs/content/commands/npm-publish.md index 0d25d7d29da8dc..946109de404c2c 100644 --- a/deps/npm/docs/content/commands/npm-publish.md +++ b/deps/npm/docs/content/commands/npm-publish.md @@ -108,6 +108,7 @@ built. + #### `tag` * Default: "latest" @@ -122,6 +123,9 @@ command, if no explicit tag is given. When used by the `npm diff` command, this is the tag used to fetch the tarball that will be compared with the local files by default. + + + #### `access` * Default: 'restricted' for scoped packages, 'public' for unscoped packages @@ -132,6 +136,15 @@ If you want your scoped package to be publicly viewable (and installable) set `--access=public`. The only valid values for `access` are `public` and `restricted`. Unscoped packages _always_ have an access level of `public`. +Note: Using the `--access` flag on the `npm publish` command will only set +the package access level on the initial publish of the package. Any +subsequent `npm publish` commands using the `--access` flag will not have an +effect to the access level. To make changes to the access level after the +initial publish use `npm access`. + + + + #### `dry-run` * Default: false @@ -145,6 +158,9 @@ commands that modify your local installation, eg, `install`, `update`, Note: This is NOT honored by other network related commands, eg `dist-tags`, `owner`, etc. + + + #### `otp` * Default: null @@ -156,6 +172,9 @@ when publishing or changing package permissions with `npm access`. If not set, and a registry response fails with a challenge for a one-time password, npm will prompt on the command line for one. + + + #### `workspace` * Default: @@ -178,6 +197,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -188,6 +210,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-rebuild.md b/deps/npm/docs/content/commands/npm-rebuild.md index 49c822d730526a..19684796f8f532 100644 --- a/deps/npm/docs/content/commands/npm-rebuild.md +++ b/deps/npm/docs/content/commands/npm-rebuild.md @@ -28,6 +28,7 @@ will be rebuilt. + #### `global` * Default: false @@ -42,6 +43,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + #### `bin-links` * Default: true @@ -54,6 +58,9 @@ Set to false to have it not do this. This can be used to work around the fact that some file systems don't support symlinks, even on ostensibly Unix systems. + + + #### `ignore-scripts` * Default: false @@ -66,6 +73,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `workspace` * Default: @@ -88,6 +98,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -98,6 +111,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-repo.md b/deps/npm/docs/content/commands/npm-repo.md index ade08e7d938e72..c3c509e0b4b98b 100644 --- a/deps/npm/docs/content/commands/npm-repo.md +++ b/deps/npm/docs/content/commands/npm-repo.md @@ -21,6 +21,7 @@ in the current folder and use the `repository` property. + #### `browser` * Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"` @@ -33,6 +34,9 @@ terminal. Set to `true` to use default system URL opener. + + + #### `workspace` * Default: @@ -55,6 +59,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -65,6 +72,9 @@ workspaces. This value is not exported to the environment for child processes. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-restart.md b/deps/npm/docs/content/commands/npm-restart.md index 4b905c26706958..80f8ab77ef0183 100644 --- a/deps/npm/docs/content/commands/npm-restart.md +++ b/deps/npm/docs/content/commands/npm-restart.md @@ -38,6 +38,7 @@ If it does _not_ have a `"restart"` script specified, but it does have + #### `ignore-scripts` * Default: false @@ -50,6 +51,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `script-shell` * Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows @@ -58,6 +62,9 @@ will *not* run any pre- or post-scripts. The shell to use for scripts run with the `npm exec`, `npm run` and `npm init ` commands. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-root.md b/deps/npm/docs/content/commands/npm-root.md index 2d072c16dec007..98d1108d33f758 100644 --- a/deps/npm/docs/content/commands/npm-root.md +++ b/deps/npm/docs/content/commands/npm-root.md @@ -27,6 +27,7 @@ echo "Global packages installed in: ${global_node_modules}" + #### `global` * Default: false @@ -41,6 +42,9 @@ folder instead of the current working directory. See * bin files are linked to `{prefix}/bin` * man pages are linked to `{prefix}/share/man` + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-run-script.md b/deps/npm/docs/content/commands/npm-run-script.md index 5e3828c40717dd..e436bc27f9d2ae 100644 --- a/deps/npm/docs/content/commands/npm-run-script.md +++ b/deps/npm/docs/content/commands/npm-run-script.md @@ -138,6 +138,7 @@ packages. + #### `workspace` * Default: @@ -160,6 +161,9 @@ brand new workspace within the project. This value is not exported to the environment for child processes. + + + #### `workspaces` * Default: false @@ -170,6 +174,9 @@ workspaces. This value is not exported to the environment for child processes. + + + #### `if-present` * Default: false @@ -182,6 +189,9 @@ it's present and fail if the script fails. This is useful, for example, when running scripts that may only apply for some builds in an otherwise generic CI setup. + + + #### `ignore-scripts` * Default: false @@ -194,6 +204,9 @@ Note that commands explicitly intended to run a particular script, such as will still run their intended script if `ignore-scripts` is set, but they will *not* run any pre- or post-scripts. + + + #### `script-shell` * Default: '/bin/sh' on POSIX systems, 'cmd.exe' on Windows @@ -202,6 +215,9 @@ will *not* run any pre- or post-scripts. The shell to use for scripts run with the `npm exec`, `npm run` and `npm init ` commands. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-search.md b/deps/npm/docs/content/commands/npm-search.md index e30287635b56f6..252822e7198443 100644 --- a/deps/npm/docs/content/commands/npm-search.md +++ b/deps/npm/docs/content/commands/npm-search.md @@ -41,6 +41,7 @@ expression characters in most shells.) + #### `long` * Default: false @@ -48,6 +49,9 @@ expression characters in most shells.) Show extended information in `ls`, `search`, and `help-search`. + + + #### `json` * Default: false @@ -60,6 +64,9 @@ Whether or not to output JSON data, rather than the normal output. Not supported by all npm commands. + + + #### `color` * Default: true unless the NO_COLOR environ is set to something other than '0' @@ -68,6 +75,9 @@ Not supported by all npm commands. If false, never shows colors. If `"always"` then always shows colors. If true, then only prints color codes for tty file descriptors. + + + #### `parseable` * Default: false @@ -76,6 +86,9 @@ true, then only prints color codes for tty file descriptors. Output parseable results from commands that write to standard output. For `npm search`, this will be tab-separated table format. + + + #### `description` * Default: true @@ -83,6 +96,9 @@ Output parseable results from commands that write to standard output. For Show the description in `npm search` + + + #### `searchopts` * Default: "" @@ -90,6 +106,9 @@ Show the description in `npm search` Space-separated options that are always passed to search. + + + #### `searchexclude` * Default: "" @@ -97,6 +116,9 @@ Space-separated options that are always passed to search. Space-separated options that limit the results from search. + + + #### `registry` * Default: "https://registry.npmjs.org/" @@ -104,6 +126,9 @@ Space-separated options that limit the results from search. The base URL of the npm registry. + + + #### `prefer-online` * Default: false @@ -112,6 +137,9 @@ The base URL of the npm registry. If true, staleness checks for cached data will be forced, making the CLI look for updates immediately even for fresh package data. + + + #### `prefer-offline` * Default: false @@ -121,6 +149,9 @@ If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server. To force full offline mode, use `--offline`. + + + #### `offline` * Default: false @@ -129,6 +160,9 @@ will be requested from the server. To force full offline mode, use Force offline mode: no network requests will be done during install. To allow the CLI to fill in missing cache data, see `--prefer-offline`. + + + ### See Also diff --git a/deps/npm/docs/content/commands/npm-set-script.md b/deps/npm/docs/content/commands/npm-set-script.md index c5d5df53203b1b..e39b7a18c09f4e 100644 --- a/deps/npm/docs/content/commands/npm-set-script.md +++ b/deps/npm/docs/content/commands/npm-set-script.md @@ -30,6 +30,7 @@ npm set-script [